Blog
flink-38 Flink SQL DDL
可以修改数据库属性
ALTER DATABASE [catalog_name.]db_name SET (key1=value1, ...)
删除数据库
DROP DATABASE [IF EXISTS] [catalog_name.]db_name [(RESTRICT | CASCADE)]
- RESTRICT 删除非空数据库触发异常 默认启用
- CASCADE 删除非空数据库也会删除所有相关的表和函数
- physical_column_definition
- 物理列时数据库中所说的常规列。
- metadata_column_definition
- 元数据列是SQL标准的扩展,允许访问数据源本身具有的元数据
- 使用METADATA关键字标识
可以使用元数据列从kafka记录中读取和写入时间戳
CREATE TABLE MyTable (
user_id STRING,
name STRING,
// 获取kafka的元数据
record_time TIMESTAMP_LTZ(3) METADATA FROM 'timestamp'
) WITH (
'connector' = 'kafka'
)
也可以强制转换类型
timestamp BIGINT METADATA
多数情况下外部系统提供的只读元数据字段比可写字段多,因此可以使用VIRTUAL关键字排除元数据列的持久化
timestamp BIGINT METADATA
offset BIGINT METADATA VIRTUAL
- computed_column_definition
计算列,使用语法column_name AS 计算表达式
cost AS price * quanitity
- 定义watermark
- 严格升序: WATERMARK FOR rowtime_column AS rowtime_column
- flink任务认为时间戳只会越来越大,也不存在相等的情况,只要相等或者小于之前的,就是迟到的数据
- 递增:WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL '0.001' SECOND
- 一般基本不用这种方式 如果设置此类,则允许有相同的时间戳出现
- 有界无序:WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL 'string' timeUint
- 用于设置最大乱序时间
- 严格升序: WATERMARK FOR rowtime_column AS rowtime_column
- PRIMARY KEY
- 主键约束表明表中的一列或一组列是唯一的
- 并且他们不包含NULL值
- 支持持not enforce
PRIMARY KEY(user_id) not enforce
- PARTITIONED BY
- WITH
- 用于创建表的表属性
- 用于指定外部存储系统的元数据信息
- 格式:key=val 字符串类型
- LIKE
- 基于现有的表定义创建表
- 用户可以扩展表和排除表的某些部分
- AS
- CREATE TABLE ... AS SELECT 语句
- 暂不支持创建临时表
- 不支持显示列
- 不支持指定显示水印
- 不支持创建分区表
- 不支持指定主键约束
创建简单表
CREATE TABLE test (
id INT,
ts BIGINT,
vc INT
) WITH (
'connector' = 'print'
);
扩展表
CREATE TABLE test1 (`value` STRING) LIKE test;
查看表
SHOW TABLES [(FROM|IN) [catalog_name.]database_name] [NOT][LIKE] <sql匹配>