1 Scan、Projection 与 Filter
操作符 | 描述 |
---|---|
Scan / Select / As 批处理 流处理 |
|
Where / Filter 批处理 流处理 |
|
用户定义标量函数(Scalar UDF) 批处理 流处理 |
自定义函数必须事先注册到 TableEnvironment 中。 可阅读 自定义函数文档 以获得如何指定和注册自定义函数的详细信息。
|
2 聚合
操作符 | 描述 |
---|---|
GroupBy 聚合 批处理 流处理 结果更新 |
注意: GroupBy 在流处理表中会产生更新结果(updating result)。详情请阅读 动态表流概念 。
|
GroupBy 窗口聚合 批处理 流处理 |
使用分组窗口对每个组进行计算并得到一个结果行。详情请阅读 分组窗口 章节
|
Over Window aggregation 流处理 |
注意: 所有的聚合必须定义到同一个窗口中,即相同的分区、排序和区间。当前仅支持 PRECEDING (无界或有界) 到 CURRENT ROW 范围内的窗口、FOLLOWING 所描述的区间并未支持,ORDER BY 必须指定于单个的时间属性。
|
Distinct 批处理 流处理 结果更新 |
注意: 对于流处理查询,根据不同字段的数量,计算查询结果所需的状态可能会无限增长。请提供具有有效保留间隔的查询配置,以防止出现过多的状态。请阅读 查询配置 以获取详细的信息 |
Grouping sets, Rollup, Cube 批处理 流处理 结果更新 |
Note: 流式 Grouping sets、Rollup 以及 Cube 只在 Blink planner 中支持。 |
Having 批处理 流处理 |
|
用户自定义聚合函数 (UDAGG) 批处理 流处理 |
UDAGG 必须注册到 TableEnvironment. 参考自定义函数文档 以了解如何指定和注册 UDAGG 。
|
3 Joins
操作符 | 描述 |
---|---|
Inner Equi-join 批处理 流处理 |
目前仅支持 equi-join ,即 join 的联合条件至少拥有一个相等谓词。不支持任何 cross join 和 theta join。 注意: Join 的顺序没有进行优化,join 会按照 FROM 中所定义的顺序依次执行。请确保 join 所指定的表在顺序执行中不会产生不支持的 cross join (笛卡儿积)以至查询失败。
注意: 流查询中可能会因为不同行的输入数量导致计算结果的状态无限增长。请提供具有有效保留间隔的查询配置,以防止出现过多的状态。详情请参考 查询配置 页面. |
Outer Equi-join 批处理 流处理 结果更新 |
目前仅支持 equi-join ,即 join 的联合条件至少拥有一个相等谓词。不支持任何 cross join 和 theta join。 注意: Join 的顺序没有进行优化,join 会按照 FROM 中所定义的顺序依次执行。请确保 join 所指定的表在顺序执行中不会产生不支持的 cross join (笛卡儿积)以至查询失败。
注意: 流查询中可能会因为不同行的输入数量导致计算结果的状态无限增长。请提供具有有效保留间隔的查询配置,以防止出现过多的状态。详情请参考 查询配置 页面. |
Interval Join 批处理 流处理 |
注意:Interval join (时间区间关联)是常规 join 的子集,可以使用流的方式进行处理。 Interval join需要至少一个 equi-join 谓词和一个限制了双方时间的 join 条件。例如使用两个适当的范围谓词( 比如,以下谓词是合法的 interval join 条件:
以上示例中,所有在收到后四小时内发货的 order 会与他们相关的 shipment 进行 join。 |
Expanding arrays into a relation 批处理 流处理 |
目前尚未支持非嵌套的 WITH ORDINALITY 。
|
Join 表函数 (UDTF) 批处理 流处理 |
将表与表函数的结果进行 join 操作。左表(outer)中的每一行将会与调用表函数所产生的所有结果中相关联行进行 join 。 用户自定义表函数( User-defined table functions,UDTFs ) 在执行前必须先注册。请参考 UDF 文档 以获取更多关于指定和注册UDF的信息 Inner Join 若表函数返回了空结果,左表(outer)的行将会被删除。
Left Outer Join 若表函数返回了空结果,将会保留相对应的外部行并用空值填充结果。
注意: 当前仅支持文本常量 |
Join Temporal Table Function 流处理 |
Temporal Tables 是跟随时间变化而变化的表。 Temporal Table Function 提供访问 Temporal Tables 在某一时间点的状态的能力。 Join Temporal Table Function 的语法与 Join Table Function 一致。 注意: 目前仅支持在 Temporal Tables 上的 inner join 。 假如 Rates 是一个 Temporal Table Function, join 可以使用 SQL 进行如下的表达:
请查看 Temporal Tables 概念描述 以了解详细信息。 |
Join Temporal Tables 批处理 流处理 |
Temporal Tables 是随时间变化而变化的表。 Temporal Table 提供访问指定时间点的 temporal table 版本的功能。 仅支持带有处理时间的 temporal tables 的 inner 和 left join。 下述示例中,假设 LatestRates 是一个根据最新的 rates 物化的 Temporal Table 。
请阅读 Temporal Tables 概念描述以了解详细信息。 仅 Blink planner 支持。 |
4 集合操作
操作符 | 描述 |
---|---|
Union 批处理 |
|
UnionAll 批处理 流处理 |
|
Intersect / Except 批处理 |
|
In 批处理 流处理 |
若表达式在给定的表子查询中存在,则返回 true 。子查询表必须由单个列构成,且该列的数据类型需与表达式保持一致。
注意: 在流查询中,这一操作将会被重写为 join 和 group 操作。该查询所需要的状态可能会由于不同的输入行数而导致无限增长。请在查询配置中提合理的保留间隔以避免产生状态过大。请阅读 查询配置 以了解详细信息 |
Exists 批处理 流处理 |
若子查询的结果多于一行,将返回 true 。仅支持可以被通过 join 和 group 重写的操作。
注意: 在流查询中,这一操作将会被重写为 join 和 group 操作。该查询所需要的状态可能会由于不同的输入行数而导致无限增长。请在查询配置中提合理的保留间隔以避免产生状态过大。请阅读 查询配置 以了解详细信息 |