我正在尝试计算 Azure 数据工厂中某些列的哈希值。我在其他问题中看到了使用
sha2(256,columns()))
等函数的建议。乍一看这似乎很安全,但我发现这两个表达式生成相同的哈希值:
sha2(256, "ABC", "DEF")
sha2(256, "AB", "CDEF")
所以看起来哈希函数在传递多个参数时,只需在生成哈希之前将它们连接在一起即可。由于上面的源数据不相同但生成相同的哈希值,这似乎没有达到您的预期。
是否有从不同数据(如上面的“ABC”、“DEF”和“AB”、“CDEF”)生成不同哈希的最佳实践,特别是当涉及到动态生成的列列表时?还是我错过了什么?
我确实同意@Martin,在数据之间添加一个字符串可能是解决方法。
如果您想对所有传入列动态执行此操作,首先需要在连接的列数据之间添加一个恒定的唯一字符串。要为不同索引处的所有行动态添加它,请使用以下表达式。
concat(left(concatWS('',columns()),mod(length(concatWS('',columns())),10)),'HiRakesh',substring(concatWS('',columns()),add(mod(length(concatWS('',columns())),10),1)))
它将在随机索引处添加字符串
HiRakesh
,如下所示。
现在,在下一次转换中在此列上使用
sha2(256,<column_name>)
即可获得结果。