目录
1. BatchMode的特点
- 1. BatchMode的特点
- 2. BatchMode和StreamMode转换注意点
- 3. 触发计算的API
- 4. 查询优化
- 数据是有界的insert-only流
- 使用的Operator必须支持BatchMode
- 不需要Watermark,执行结束时会发出一个最大时间戳的Watermark用来结束执行
- 不需要checkpoint
- 批量执行,结果为insert-only流
BatchMode比StreamingMode更高效。StreamingMode也可以处理bounded stream,但是并不推荐使用StreamingMode来进行批处理,而且像全局排序这种StreamingMode也实现不了
如果将StreamMode转换为BatchMode,需要注意StreamMode的结果有时是changelog流,而BatchMode的结果只有insert-only流
3. 触发计算的API- tEnv.executeSql("…")
- table.executeInsert(targetTable)
- table.execute(),表示将表的数据收集到本地
- stateSet.execute()
- streamExecutionEnvironment.execute()
包括一系列基于规则和成本的优化,例如:
- 投影剪裁
- 分区剪裁
- 过滤器下推
- 子计划消除重复数据以避免重复计算
- 特殊子查询重写,包括两部分:
- 将in和exists转换为left semi-joins
- 将not in和not exists转换为left anti-join
- 可选join重新排序,通过tEnv.getConfig().getConfiguration().setString(“table.optimizer.join-reorder-enabled”, “false”)进行设置
- 从数据源获得的丰富统计信息以及每个算子(例如 io,cpu,网络和内存)的细粒度成本来做出明智的决策