对于不同类型的作业,血缘管理支持的SQL解析能力不同。
解析DI任务中的SQL语句时,使用的是开源的Calcite组件,如果SQL语句中含有Calcite的保留关键字(完整的SQL保留关键字请查阅Calcite官网):
对于Hive、MySQL类型的数据源,请使用反引号(`)转义,例如,DATE需写为`DATE`。
对于Greenplum、Oracle、PostgreSQL、Vertica、达梦类型的数据源,请使用双引号("")转义,例如,DATE转为“DATE”。
如果DI任务包含表抽取组件,那么可以解析的SQL语句如下:
query: SELECT { * | projectItem [, projectItem ]* } FROM tableExpression [ WHERE booleanExpression ] [ GROUP BY { groupItem [, groupItem ]* } ] [ HAVING booleanExpression ] [ ORDER BY orderItem [, orderItem ]* ] [ LIMIT count ]
tableExpression: tableExpression [, tableExpression]* | '(' query ')' | tableName | tableExpression JOIN tableExpression [ON booleanExpression] |
参数说明见下表。
表-1 DI任务SQL语句参数说明
参数 |
说明 |
projectItem |
列名 |
tableName |
表名 |
booleanExpression |
条件表达式,例如a>1,b = 'c'等 |
orderItem |
列名 |
groupItem |
列名 |
count |
查询的数量上限 |
SQL语句示例如下:
select * from table1 where id = 1; select id, name from table1 where id = 1 and name = '小明'; select a.id, b.name from "pg". "table1" as a join "default". "table2" as b on a.id = b.id; |
对于业务流程中Hive节点任务,血缘管理支持的SQL解析能力与当前Hive版本所支持的SQL能力相同。
对于业务流程中SparkSQL节点任务,血缘管理支持的SQL解析能力与当前SparkSQL版本所支持的SQL能力相同。
不支持SQL血缘解析的情况说明:
DLH类型数据源相关的SQL暂不支持血缘解析。
Vertica类型数据源在SQL血缘解析方面,对于诸如下述类型的SQL语句暂不支持血缘解析:
“insert into”SQL语句中指定table的字段包含“vertica”的,暂不支持血缘解析,例如:
insert into "public"."b_vertica_2"("id1","name1","addr1") select "id","name","addr" from "public"."b_vertica_1"
“create table ... as select ...”类型的SQL语句,暂不支持血缘解析,例如:
create table "public"."b_vertica_2" as select * from "public"."b_vertica_1"
SQL语句中带的部分函数,尤其是窗口类函数,暂不支持血缘解析,例如:
INSERT INTO "llx"."order_tb_xuhaohanshujieguo"
select * FROM (
SELECT row_number() over (PARTITION by user_no order by amount DESC) as row_num_func,
rank() over ( PARTITION by user_no order by amount DESC) as rank_func,
dense_rank() over (PARTITION by user_no order by amount DESC ) as dese_rank_func,
order_id,user_no,amount,create_date
FROM llx.order_tb
) as t
上述SQL中的row_number()函数和rank()函数,目前不支持在Vertica类型数据源的血缘解析中体现。
待解析SQL语句使用Vertica类型数据源表且映射字段中包含类型为UUID的字段时,不支持进行血缘解析。
除此上述几种情况之外,对于业务流程中RDSSQL节点任务,血缘管理支持的SQL解析能力与当前RDSSQL版本所支持的SQL能力相同。