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

问题描述 投票:0回答:1

在Azure数据工厂v2中,我从管道中调用映射数据流。数据流中的源连接和接收器连接已参数化,因此我可以将管道/数据流重新用于多个源/目标组合。但是我想在数据流中创建派生列,该派生列是该特定源/目标组合的适当列的md5哈希。因此,我想将列列表传递给md5()函数,该函数可以在数据流运行时进行评估,并且可以为每行数据生成适当的哈希值。目前,我找不到使它正常工作的方法。

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

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

expression md5 azure-data-factory azure-data-factory-2
1个回答
0
投票

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

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

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

  1. 在派生列中使用toString(byPosition(1))+ toString(byPositiong(2))+ ...将每一列合并为新列,然后对该新列进行哈希处理。

  2. 如果源是文件,请使用不带定界符的源数据集,该定界符仅将整个行作为单个字符串读取。这样,您将整个行作为一个可以哈希的单个字符串(即col_1)。

© www.soinside.com 2019 - 2024. All rights reserved.