Azure 数据工厂 DataFlow md5 特定列
Azure Data Factory DataFlow md5 specific columns
首先,我有一个名为 $array_merge_keys
的列参数数组
$array_merge_keys = ['Column1', 'Column2', 'NoColumnInSomeCases']
那么我将对它们进行哈希处理,如果第三个 NoColumnInSomeCases
不存在,我想将其视为 null 或其他一些有价值的字符串。
但实际上,当我将它们与 byNames()
一起使用时,它会 return NULL 因为最后一个不存在,即使 first 和 second 仍然有值。所以我希望 byNames($array_merge_keys) 总是 return 值以便散列它们。
既然那个问题解决不了,我又回来过滤这些只存在的列
filter(columnNames('', true()), contains(['Column1', 'Column2', 'NoColumnInSomeCases'], #item_1 == #item)) => ['Column1', 'Column2']
但是涉及到另一个问题byNames()
不能即时计算,它说'byNames' does not accept column or argument
array(byNames(filter(columnNames('', true()), contains(['Column1', 'Column2', 'NoColumnInSomeCases'], #item_1 == #item))))
Spark job failed: { "text/plain":
"{"runId":"649f28bf-35af-4472-a170-1b6ece50c551","sessionId":"a26089f4-b0f4-4d24-8b79-d2a91a9c52af","status":"Failed","payload":{"statusCode":400,"shortMessage":"DF-EXPR-030
at Derive 'CreateTypeFromFile'(Line 35/Col 36): Column name function
'byNames' does not accept column or argument
parameters","detailedMessage":"Failure 2022-04-13 05:26:31.317
failed DebugManager.processJob,
run=649f28bf-35af-4472-a170-1b6ece50c551, errorMessage=DF-EXPR-030 at
Derive 'CreateTypeFromFile'(Line 35/Col 36): Column name function
'byNames' does not accept column or argument parameters"}}\n" } -
RunId: 649f28bf-35af-4472-a170-1b6ece50c551
我尝试了很多方法,甚至创建了一个新的派生列(在该流名称之前)来存储 ['Column1'、'Column2']。但是它说 column cannot be referenced within byNames() function
我们有什么优雅的解决方案吗?
的确,byName() 无法使用后期绑定求值。您需要使用 Select 转换来设置您希望首先散列的流中的列,或者通过参数发送列名。由于这是“早期列绑定”,byName() 将起作用。
您可以在管道中使用获取元数据 activity 在调用数据流之前检查您的源中存在哪些列,从而允许您发送仅包含您希望散列的那些列的管道参数。
或者,您可以创建一个新分支,使用 select 匹配规则,然后根据这些列对行进行哈希处理(参见下面的示例)。
首先,我有一个名为 $array_merge_keys
的列参数数组$array_merge_keys = ['Column1', 'Column2', 'NoColumnInSomeCases']
那么我将对它们进行哈希处理,如果第三个 NoColumnInSomeCases
不存在,我想将其视为 null 或其他一些有价值的字符串。
但实际上,当我将它们与 byNames()
一起使用时,它会 return NULL 因为最后一个不存在,即使 first 和 second 仍然有值。所以我希望 byNames($array_merge_keys) 总是 return 值以便散列它们。
既然那个问题解决不了,我又回来过滤这些只存在的列
filter(columnNames('', true()), contains(['Column1', 'Column2', 'NoColumnInSomeCases'], #item_1 == #item)) => ['Column1', 'Column2']
但是涉及到另一个问题byNames()
不能即时计算,它说'byNames' does not accept column or argument
array(byNames(filter(columnNames('', true()), contains(['Column1', 'Column2', 'NoColumnInSomeCases'], #item_1 == #item))))
Spark job failed: { "text/plain": "{"runId":"649f28bf-35af-4472-a170-1b6ece50c551","sessionId":"a26089f4-b0f4-4d24-8b79-d2a91a9c52af","status":"Failed","payload":{"statusCode":400,"shortMessage":"DF-EXPR-030 at Derive 'CreateTypeFromFile'(Line 35/Col 36): Column name function 'byNames' does not accept column or argument parameters","detailedMessage":"Failure 2022-04-13 05:26:31.317 failed DebugManager.processJob, run=649f28bf-35af-4472-a170-1b6ece50c551, errorMessage=DF-EXPR-030 at Derive 'CreateTypeFromFile'(Line 35/Col 36): Column name function 'byNames' does not accept column or argument parameters"}}\n" } - RunId: 649f28bf-35af-4472-a170-1b6ece50c551
我尝试了很多方法,甚至创建了一个新的派生列(在该流名称之前)来存储 ['Column1'、'Column2']。但是它说 column cannot be referenced within byNames() function
我们有什么优雅的解决方案吗?
的确,byName() 无法使用后期绑定求值。您需要使用 Select 转换来设置您希望首先散列的流中的列,或者通过参数发送列名。由于这是“早期列绑定”,byName() 将起作用。
您可以在管道中使用获取元数据 activity 在调用数据流之前检查您的源中存在哪些列,从而允许您发送仅包含您希望散列的那些列的管道参数。
或者,您可以创建一个新分支,使用 select 匹配规则,然后根据这些列对行进行哈希处理(参见下面的示例)。