SQL Hints
更新时间: 2021-10-20 13:43:00
阅读 455
简述
SQL hints 写在 SQL 表达式里用于修改执行计划。
通常它可用于:
- 强制 planner: 没有完美的 planner,因此用户可以通过它更好地控制执行器;
- 添加元数据或统计信息:“用于 scan 的表索引”、“某些 shuffle keys 的倾斜信息” 这些统计信息对于查询是动态的,来自 planner 的元数据信息经常会失真,用户可以通过配置 hints 方便地告知 planner;
- 操作资源限制:很多情况下,我们给执行算子一个默认的资源配置。如最小并行度、managed memory 或特殊的资源要求(GPU、SSD)等, 可以在每次查询中配置 hint 来灵活地修改资源分配
动态表选项
动态表选项允许动态地指定或覆盖表选项。与 SQL DDL 或 连接器 API 中定义的静态表选项不同,这些选项可以在每个表的每次查询范围内灵活地指定。
适用于交互界面中的每次即时查询。
如在 SQL-CLI 中,可以指定动态选项 /+ OPTIONS(‘csv.ignore-parse-errors’=’true’) / 来忽略 csv 数据源的解析错误。
注意:动态表选项默认是被禁止的,因为它可能变更查询的语义。需要将配置 table.dynamic-table-options.enabled 改为 true (默认 false)
详细配置项见 配置
语法
为了不破坏 SQL 的兼容性,采用了 Oracle 形式的 SQL hint 语法: ```sql table_path /+ OPTIONS(key=val [, key=val]) */
key: stringLiteral val: stringLiteral
# 示例
```sql
CREATE TABLE kafka_table1 (id BIGINT, name STRING, age INT) WITH (...);
CREATE TABLE kafka_table2 (id BIGINT, name STRING, age INT) WITH (...);
-- override table options in query source
select id, name from kafka_table1 /*+ OPTIONS('scan.startup.mode'='earliest-offset') */;
-- override table options in join
select * from
kafka_table1 /*+ OPTIONS('scan.startup.mode'='earliest-offset') */ t1
join
kafka_table2 /*+ OPTIONS('scan.startup.mode'='earliest-offset') */ t2
on t1.id = t2.id;
-- override table options for INSERT target table
insert into kafka_table1 /*+ OPTIONS('sink.partitioner'='round-robin') */ select * from kafka_table2;
文档反馈
以上内容对您是否有帮助?