Hi!

你看的是阿里云 Blink 的文档。Blink 是阿里原来基于 Flink 1.5 开发的产品,所以一些语法与现在的 Flink
有些不同。period for system_time 是以前 blink 定义维表的语法,现在不需要写了。另外 datagen
确实不能作为维表的数据来源,可以尝试用文件作为维表来源,比如 csv 文件。

目前 Blink 的大部分代码已贡献回 Flink(Flink 1.14 默认 planner 就是原来的 Blink planner),建议直接看
Flink 官网的文档学习[1]。

如果想要了解商业化的内容,应该看阿里云 Flink 全托管的文档[2]。

[1]
https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/dev/table/sql/queries/joins/#temporal-joins
[2] https://help.aliyun.com/document_detail/169590.html

段泽炳 <duanzeb...@foxmail.com> 于2022年2月7日周一 10:17写道:

> 大家好:    我是一个flink初学者,刚学到维表join的部分,在维表join的部分遇到了困难。我在阿里云(
> https://help.aliyun.com/document_detail/62506.html)flink sql上找到维表 ddl如下:
> create table phoneNumber( name VARCHAR, phoneNumber bigint, primary
> key(name), PERIOD FOR SYSTEM_TIME )with( type='rds' );
>
>
> 而我自己写的如下:
> create table source_1(
> id int,
> data TINYINT,
> primary key (id),
> PERIOD FOR SYSTEM_TIME
> )with(
>     'connector' = 'datagen',
>     'fields.id.kind'='sequence',
>     'fields.id.start'='5',
>     'fields.id.end'='8',
>     'fields.data.kind'='sequence',
>     'fields.data.start'='4',
>     'fields.data.end'='11'
> )结果在执行的时候报错:
> py4j.protocol.Py4JJavaError: An error occurred while calling o1.executeSql.
> : org.apache.flink.table.api.SqlParserException: SQL parse failed.
> Incorrect syntax near the keyword 'PERIOD' at line 6, column 9.
> Was expecting one of:
> &nbsp; &nbsp; "CONSTRAINT" ...
> &nbsp; &nbsp; "PRIMARY" ...
>
> ……
>
>
> 而这个疑惑在我查看flink官网的时候变的更大,因为官网的例子是这样的:
> CREATE TABLE currency_rates (     currency STRING,     conversion_rate
> DECIMAL(32, 2),     update_time TIMESTAMP(3) METADATA FROM
> `values.source.timestamp` VIRTUAL,     WATERMARK FOR update_time AS
> update_time,     PRIMARY KEY(currency) NOT ENFORCED ) WITH (
>  'connector' = 'kafka',     'value.format' = 'debezium-json',    /* ... */
> );基于以上,我的疑惑共有几点:1.是维表不能使用‘datagen’数据来源吗?还是pyflink 1.14
> 目前不支持维表ddl?2.阿里云的维表ddl语句和官网的维表ddl语句有什么区别吗?他们的使用场景是什么?3.如何能够让我在练习的时候正确使用维表join请大家指点一下,感激不尽

回复