如何在ADF中比较两个具有不同文件名的文件

huangapple go评论54阅读模式
英文:

How to compare two files with different filename in ADF

问题

我們在 Azure 數據湖 Gen2 文件夾中有多個文件,文件名如下:
abc_test_20170505_120101.csv,hash_abc_test_20170505_120101.csv,abc_sample_20170505_110101.csv,hash_abc_sample_20170505_110101.csv。

我想複製 abc_test_20170505_120101.csv 與 hash_abc_test_20170505_120101.csv,

以及

文件 abc_sample_20170505_110101.csv 與 hash_abc_sample_20170505_110101.csv。

abc_test 文件應該與 hash_abc 文件進行複製,另一個文件應該與 hash 文件進行複製。

我們如何在使用 Azure 數據工廠時實現這一目標。

英文:

We have multiple files in a azure data lake gen2 folder, file name like
abc_test_20170505_120101.csv ,hash_abc_test_20170505_120101.csv
,abc_sample_20170505_110101.csv,
hash_abc_sample_20170505_110101.csv.

I want to copy abc_test_20170505_120101.csv with hash_abc_test_20170505_120101.csv

And
File abc_sample_20170505_110101.csv with hash_abc_sample_20170505_110101.csv

File abc_test file should be copy with hash_abc one and another file should be copy with hash one.

How we can do this using azure data factory.

答案1

得分: 1

  • 由于每个数据文件都有一个元数据文件,您可以使用以下活动来获取一个包含每个对象的数组,每个对象都有名为 datametadata 的键,其值为相应的文件名。

  • 首先,我使用了获取元数据来获取文件列表:

如何在ADF中比较两个具有不同文件名的文件

  • 遍历这些子项。在循环内部,使用一个条件活动来检查项目的名称是否以 hash 开头。我们需要名称不以 hash 开头的文件。以下是我用作条件活动条件的动态内容。
@not(startswith(item().name,'hash'))

如何在ADF中比较两个具有不同文件名的文件

  • 在 True 分支内部,使用设置变量活动来构建对象。以下是我使用的动态内容:
{
	"data": "@{item().name}",
	"metadata": "@{concat('hash_',item().name)}"
}
  • 现在使用 json() 函数将上述字符串变量转换为对象,并使用追加变量活动将其附加到数组中。

如何在ADF中比较两个具有不同文件名的文件

  • 执行管道后,您将获得如下图所示的结果:

如何在ADF中比较两个具有不同文件名的文件

  • 如果某个特定数据文件没有元数据文件,您可以在此过程之后使用附加条件来检查。
英文:
  • Since there is a metadata file for every data file, you can use the following activities to get the an array of object with each object has keys called data and metadata with values as the respective filename.

  • First I have used get metadata to get the list of files:

如何在ADF中比较两个具有不同文件名的文件

  • Iterate through these child items. Inside for loop use an if activity to check whether the item's name starts with hash or not. We need names whose name does not start with hash. The following is the dynamic content I used as condition for if activity.
@not(startswith(item().name,'hash'))

如何在ADF中比较两个具有不同文件名的文件

  • Inside the True path, use a set variable activity to build the object. The following is the dynamic content that I used:
{
	"data": "@{item().name}",
	"metadata":"@{concat('hash_',item().name)}"
}
  • Now convert the above string variable to object using json() function and append it to an array using append variable activity.

如何在ADF中比较两个具有不同文件名的文件

  • After executing the pipeline, you will get the results as shown in the below image:

如何在ADF中比较两个具有不同文件名的文件

  • If there is no metadata file for any a particular data file, you can use additional conditions to check it after this process.

huangapple
  • 本文由 发表于 2023年6月29日 02:28:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/76575811.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定