我正在尝试创建一个接受来自配置文件 (JSON) 的值的管道,以尝试基于文件中的值构建源查询、查找逻辑和目标接收器。
配置文件中的对象示例如下所示:
{
/*Destination Table fields */
"destTableName": "DimTable1",
"destTableNaturalKey": "ClientKey, ClientNaturalKey",
"destTableSchema": "dbo",
/*Source Table fields */
"sourcePullFields": "ClientKey, ClientNaturalKey",
"sourcePullFilters": "WHERE ISNULL(ClientNaturalKey,'') <> ''",
"sourceTableName": "ClientDataStaged",
"sourceTableSchema": "stg"
}
管道将识别配置中需要检查新数据的项目数(对于每个项目),基本管道如下所示:
然后,我会将这些值从 ADF 管道传递到数据流中: ADF 参数
并在数据流表达式中构建源拉取和查找值,如下所示:
concat('SELECT DISTINCT ', $sourcePullFields, ' FROM ', $sourceTableSchema, '.', $sourceTableName, ' ', $sourcePullFilters)
当我在数据流中并在调试设置中传递相同的配置值时,我可以正确地查看投影并正确地单步执行数据流。当我从管道执行数据流时,我得到了错误。
作为第二次尝试,我只是通过配置中的源查询:
{
"destQuery": "SELECT Hashbytes('MD5', (cast(ClientKey as varchar(5)) + ClientNaturalKey)) AS DestHashVal FROM dbo.DimTable1",
"sourceQuery": "SELECT DISTINCT ClientKey, ClientNaturalKey, Hashbytes('MD5', ( Cast(SchoolKey AS VARCHAR(5)) + ClientNaturalKey )) AS SourceHashVal FROM stg.ClientNaturalKey WHERE Isnull(ClientNaturalKey, '') <> ''"
}
我本来打算在数据流表达式中使用 md5 函数,但此时我只想:
- 定义源查询,无论是通过 SQL 语句还是从变量构建
- 定义查找查询,无论是通过 SQL 语句还是从变量构建
- 能够比较从源到查找(目标表)的散列值
- 如果查找在哈希上没有返回匹配项,则加载值
理想情况下,我不会直接定义 SQL 语句。它只是感觉不太聪明。无论如何,这是为了防止将大约 50 个 DFT 从 SSIS 迁移到几个管道和可以处理动态的单个数据流。由于该过程一直在数据流的范围内工作,因此我一直在以不同的方式传递参数,删除引号,不确定字符串插值在做什么......等等。