You need to enable JavaScript to run this app.
导航
使用 SQL 深度检查
最近更新时间:2025.08.28 10:49:56首次发布时间:2025.08.28 10:49:56
复制全文
我的收藏
有用
有用
无用
无用

SQL 深度检查能力是一项 SQL 引擎侧的增强能力,旨在提升产品的易用性。深度检查能够在校验阶段,提前检查作业的 SQL 语法语义、网络连通性以及作业使用的表的元数据信息,并提示 SQL 风险问题,给出对应的 SQL 优化建议,对云上用户 Flink SQL 的日常使用、深度使用有较大的帮助。
深度检查包含如下功能:

  • 语法语义检查:对常见报错展示明确的原因和解决方案
  • 网络连通性检查:检测常见 Connector 的数据源的网络连通问题
  • 正确性和优化建议:检测流式 SQL 里的正确性问题(如非确定更新问题),和优化建议

前提条件

使用方式

在 Flink 1.16 & 1.17 SQL 任务中,点击“验证”按钮后,如下:

点击后会弹出一个选择框,点选“开启深度检查”,并根据作业版本,选择对应资源池的 Session 集群,之后点击深度检查:

校验结果展示:

功能介绍

语法语义检查

分析常见的语法语义问题,并给出报错原因和解决方案。
校验结果展示:

目前已支持的报错类型如下:

校验报错类型

报错原因

SQL-Syntax-Error

不符合 SQL 语法规则,报错的位置在第 ${2} 行第 ${3} 列的 ${1}

Old-Begin-Statement-Set-Not-Support

一般是使用了 BEGIN STATEMENT SET ... END 这种被社区废弃的语法,一般来自于从其它厂商搬迁的 SQL

Table-Name-Not-Found

${5} 表或视图不存在,报错的文本位置是从第 ${1} 行第 ${2} 列到第 ${3} 行第 ${4} 列

Column-Name-Not-Found

${5} 列不存在,报错的文本位置是从第 ${1} 行第 ${2} 列到第 ${3} 行第 ${4} 列

Function-Argument-Type-Mismatch

${1} 函数入参类型不匹配。当前的入参类型为 ${2},支持的入参类型为 ${3}

Function-Argument-Number-Mismatch

${1} 函数入参个数不匹配,预期入参个数是 ${2}

Function-Not-Found

${1} 函数不存在,报错的文本位置是从第 ${1} 行第 ${2} 列到第 ${3} 行第 ${4} 列

Illegal-Use-of-NULL

不支持 untyped NULL literal,报错的文本位置是从第 ${1} 行第 ${2} 列到第 ${3} 行第 ${4} 列

Union-Type-Mismatch

不支持 UNION 隐式类型转换,报错的文本位置是从第 ${1} 行第 ${2} 列到第 ${3} 行第 ${4} 列

Query-Sink-Columns-Number-Mismatch

${1} 表的查询和写入 Sink 的字段个数不一致

Query-Sink-Columns-Type-Incompatible

${1} 表的查询和写入 Sink 的第 ${2} 个字段 ${3} 类型不一致

Metadata-Key-Not-Found

表 ${3} 的元数据列 ${1} 不存在

Connector-Option-Not-Support

${1} connector option 不支持 ${2}

Connector-SPI-Not-Found

Connector SPI 查找时,没找到 Connector identifier ${1} 对应的 DynamicTableFactory class

Query-Sink-Schema-Mismatch

${1} 表的查询和写入 Sink 的字段个数不一致,以及列类型是否一致

Implicit-Type-Conversion-Not-Support

${1} 和 ${2} 的隐式类型转换不支持

网络连通性检查

会检测各 Connector 数据源 endpoint 的 ip 和 port 的网络连通性,如果网络访问不通,则快速报错。会先对所有 ip 进行检测,如果 ip 连通失败,则直接报错。如果 ip 都能连通,则继续检测所有 ip 和 port 的组合,如果连通失败,则直接报错,反之,则正常通过。
报错提示信息:

  • ip 连通失败
  • ip 和 port 连通失败

目前已覆盖常见的 15 种 Connector:

Connector 类型

Serverless Flink 1.16

Serverless Flink 1.17

kafka

支持

支持

upsert-kafka

支持

支持

jdbc

支持

支持

mysql-cdc

支持

支持

mongo-cdc

支持

支持

postgres-cdc

支持

支持

sqlserver-cdc

支持

支持

bytehouse-cdw

支持

支持

bytehouse-ce

支持

支持

redis(single-node 模式)

支持

支持

redis(cluster 模式)

支持

支持

hbase-1.4

支持

支持

hbase-2.2

支持

支持

elasticsearch-6

支持

支持

elasticsearch-7

支持

支持

starrocks

支持

支持

doris

支持

支持

rocketmq

支持

支持

正确性和优化建议

目前支持两种正确性和优化建议的检测,分别是 NDU 正确性问题和两阶段聚合优化建议。

建议类型

具体原因

NDU 正确性问题

当前作业存在数据的非确定性更新风险。常见原因包括:1.使用了不确定函数,包括标量、表值、聚合类型的内置或自定义函数,例如 RANDOM、UUID、CURRENT_TIMESTAMP 等;2.在一个变化的源表上进行 Lookup Join;3.CDC 源表携带了元数据字段(系统列,不属于物理列)。非确定性更新可能会导致产生的数据存在正确性风险。为避免这种情况,我们建议您采纳以下建议

两阶段聚合优化建议

当前作业建议开启两阶段聚合优化,通过本地预聚合,减少下游全局聚合算子处理的数据量,提升作业的聚合性能,并缓解热点问题,具体操作步骤见如下建议

校验结果展示: