可以通过Parameter向md5函数传递列的动态列表吗



在Azure Data Factory v2中,我正在从管道调用映射数据流。数据流中的源和汇连接是参数化的,因此我可以为多个源/目标组合重用管道/数据流。然而,我想在数据流中创建一个派生列,它是特定源/目标组合的适当列的md5哈希。因此,我想将列列表传递到md5((函数中,该函数可以在数据流运行时进行评估,并且可以为每行数据生成适当的哈希值。目前我找不到让它发挥作用的方法。

我有一个字符串类型的数据流参数(pColumnList((数组没有类型选项(。管道传递一个字符串逗号分隔的列名列表,例如Col1、Col2、Col3并且派生列(ROW_HASH(具有代码/表达式md5($pColumnList),此时的问题是该函数正在对"Col1,Col2,Col3"的字符串值进行哈希,因此每行都具有相同的哈希值,而不是每行计算的哈希值。我还尝试将字符串拆分为一个数组,看看函数是否会将单独的项解释为列(即md5(split($pColumnList,','))(,但这会导致一个错误,因为我认为md5函数不接受数组。

问题是,由于源是动态的,因此在数据流中没有定义的模式,表达式可以在设计时显式引用。我只是想知道这在adf映射数据流中是否根本不可能做到,事实上,我们要么需要为每个特定的源到目标进程创建一个单独的数据流,并使用显式的源和目标连接创建相应的可见模式。(或者可替换地,作为目标表中的计算列创建的散列(。

我们现在不允许在这些函数中使用数组值。

您是否希望为整行生成哈希/指纹?

如果这是你的目标,你需要使用以下方法之一:

  1. 使用toString(byPosition(1((+toString(byPositiong(2((+。。。在派生列中,将每个列连接到一个新列中,然后对该新列进行哈希运算。

  2. 如果源是一个文件,请使用不带分隔符的源数据集,该数据集只将整行作为单个字符串读取。这样,您就可以将整行作为一个可以散列的字符串(即col_1(。

https://www.youtube.com/watch?v=tc283k8CWh8

此演示演示如何获取列数组中的值。

md5(byName($PrimaryKey))

对于单个值或

md5(byNames(split($Columns, ',')))

对于split()生成的阵列

相关内容

  • 没有找到相关文章

最新更新