请求修改Azure Data Factory表达式以支持表别名用法
适配带表别名的T-SQL的Azure Data Factory管道表达式修改
背景
此前已完成无表别名T-SQL代码到Azure Data Factory(ADF)管道表达式的转换,现需修改该表达式,适配包含表别名的目标T-SQL代码。
原无别名T-SQL及对应ADF表达式
原T-SQL代码
SELECT deltaTable.* FROM dbo.deltaTable LEFT OUTER JOIN dbo.targetTable ON deltaTable.signature = targetTable.signature WHERE targetTable.signature IS NULL
对应ADF管道表达式
@concat('SELECT ',pipeline().parameters.DeltaTable,'.* FROM ',pipeline().parameters.tempdb,'.',pipeline().parameters.Domain,'.',pipeline().parameters.DeltaTable,' LEFT OUTER JOIN ',pipeline().parameters.tempdb,'.',pipeline().parameters.Domain,'.',pipeline().parameters.TableName,' ON ',pipeline().parameters.DeltaTable,'.signature = ',pipeline().parameters.TableName,'.signature WHERE ',pipeline().parameters.TableName,'.signature IS NULL')
目标带表别名的T-SQL代码
SELECT DeltaTable.* FROM dlt.DeltaTable LEFT OUTER JOIN dbo.TableName AS tgt ON dlt.DeltaTable.signature = tgt.signature WHERE tgt.signature IS NULL;
修改后的ADF管道表达式
针对目标T-SQL中的表别名(tgt)以及Delta表的独立架构(dlt),调整后的ADF表达式如下:
@concat('SELECT ',pipeline().parameters.DeltaTable,'.* FROM ',pipeline().parameters.tempdb,'.',pipeline().parameters.DeltaSchema,'.',pipeline().parameters.DeltaTable,' LEFT OUTER JOIN ',pipeline().parameters.tempdb,'.',pipeline().parameters.TargetSchema,'.',pipeline().parameters.TableName,' AS tgt ON ',pipeline().parameters.DeltaSchema,'.',pipeline().parameters.DeltaTable,'.signature = tgt.signature WHERE tgt.signature IS NULL;')
关键调整说明
- 新增
DeltaSchema参数,对应目标T-SQL中Delta表的架构dlt;新增TargetSchema参数,对应目标表的架构dbo - 在JOIN子句中添加表别名定义
AS tgt,后续ON关联条件与WHERE过滤条件统一使用该别名 - 保留原表达式的动态参数替换逻辑,确保可灵活适配不同数据库、架构及表名
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

