【发布时间】:2022-08-21 23:33:09
【问题描述】:
我的问题是我不能在 JOIN 操作之后使用 ORDER BY 子句。要重现问题,
CREATE TABLE stack (
id INT PRIMARY KEY,
ts TIMESTAMP(3),
WATERMARK FOR ts AS ts - INTERVAL \'1\' SECONDS
) WITH (
\'connector\' = \'datagen\',
\'rows-per-second\' = \'5\',
\'fields.id.kind\'=\'sequence\',
\'fields.id.start\'=\'1\',
\'fields.id.end\'=\'100\'
);
此表有水印策略和TIMESTAMP(3) *ROWTIME* 类型ts。
Flink SQL> DESC stack;
+------+------------------------+-------+---------+--------+----------------------------+
| name | type | null | key | extras | watermark |
+------+------------------------+-------+---------+--------+----------------------------+
| id | INT | FALSE | PRI(id) | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | `ts` - INTERVAL \'1\' SECOND |
+------+------------------------+-------+---------+--------+----------------------------+
2 rows in set
但是,如果我将视图定义为简单的自联接
CREATE VIEW self_join AS (
SELECT l.ts, l.id, r.id
FROM stack as l INNER JOIN stack as r
ON l.id=r.id
);
它丢失了水印策略,但没有丢失类型,
Flink SQL> DESC self_join;
+------+------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+------+------------------------+-------+-----+--------+-----------+
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| id | INT | FALSE | | | |
| id0 | INT | FALSE | | | |
+------+------------------------+-------+-----+--------+-----------+
3 rows in set
我假设我们可以保留水印策略并在JOIN 操作之后使用ORDER BY,但事实并非如此。如何再次向VIEW 添加水印策略?
提前致谢。