Flink1.12新特性和与Flink1.10语法差异

Flink1.12新特性

SQL Connectors 中的 Metadata 处理

Flink 1.12 中,元数据列是 SQL 标准的扩展,参数中connector和format配置提供的metadata字段。元数据列由METADATA关键字指示。例如,元数据列可用于在 Kafka 记录中读取和写入时间戳,以进行基于时间的操作。连接器和格式文档列出了每个组件的可用元数据字段。但是,在表的架构中声明元数据列是可选的。

//sql CREATE TABLE source( field1 varchar, field2 int, ts TIMESTAMP(3) METADATA FROM'timestamp', partition BIGINT METADATA, offset BIGINT METADATA, proc_time AS PROCTIME() )WITH( 'properties.bootstrap.servers'='110.42.146.82:9092', 'connector'='kafka-x', 'scan.parallelism'='1', 'format'='json', 'topic'='planet_MetaData', 'scan.startup.mode'='latest-offset' ); CREATE TABLE sink_kafka( field1 varchar, field2 int, ts timestamp, partition bigint, offset bigint )WITH( 'properties.bootstrap.servers'='110.42.146.82:9092', 'connector'='kafka-x', 'format'='json', 'topic'='planetTest', 'sink.parallelism'='1' ); create table sink( field1 varchar, field2 int, ts timestamp, partition bigint, offset bigint )with( 'connector'='stream-x', 'print'='true' ); insert intosink select field1, field2, ts, partition, offset from source; insert into sink_kafka select field1, field2, ts, partition, offset from source;

~

上述案例中 Kafka connector available metadata

image-20220314172256555

时态表

Flink1.12中,一张随时间变化的表即可被称为时态表,时态表是一个概念解释,并没有实体。

时态表可以被分为两个实体概念,根据有无ChangeLog来区分定义。

版本表: 如果时态表中的记录可以追踪和并访问它的历史版本,这种表我们称之为版本表,来自数据库的 changelog 可以定义成版本表。

普通表: 如果时态表中的记录仅仅可以追踪并和它的最新版本,这种表我们称之为普通表,来自数据库 或 HBase 的表可以定义成普通表。

声明版本表

在 Flink1.12 中,定义了主键约束(1)和事件时间属性(2)的表就是版本表。

-- 定义一张版本表
CREATE TABLE product_changelog (
  product_id STRING,
  product_name STRING,
  product_price DECIMAL(10, 4),
  update_time TIMESTAMP(3) METADATA FROM 'value.source.timestamp' VIRTUAL,
  PRIMARY KEY(product_id) NOT ENFORCED,      -- (1) 定义主键约束
  WATERMARK FOR update_time AS update_time   -- (2) 通过 watermark 定义事件时间              
) WITH (
  'connector' = 'kafka-x',
  'topic' = 'products',
  'scan.startup.mode' = 'earliest-offset',
  'properties.bootstrap.servers' = 'localhost:9092',
  'format' = 'debezium-json'    -- 时态表限定debezium-json
);

声明版本视图

Flink1.12还支持讲Append-Only流转成changlog流。 先声明一个Append-Only表

-- 定义一张 append-only 表
CREATE TABLE RatesHistory (
    currency_time TIMESTAMP(3),
    currency STRING,
    rate DECIMAL(38, 10),
    WATERMARK FOR currency_time AS currency_time   -- 定义事件时间
) WITH (
  'connector' = 'kafka',
  
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值