英文:
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
-
由于每个数据文件都有一个元数据文件,您可以使用以下活动来获取一个包含每个对象的数组,每个对象都有名为
data
和metadata
的键,其值为相应的文件名。 -
首先,我使用了获取元数据来获取文件列表:
- 遍历这些子项。在循环内部,使用一个条件活动来检查项目的名称是否以
hash
开头。我们需要名称不以 hash 开头的文件。以下是我用作条件活动条件的动态内容。
@not(startswith(item().name,'hash'))
- 在 True 分支内部,使用设置变量活动来构建对象。以下是我使用的动态内容:
{
"data": "@{item().name}",
"metadata": "@{concat('hash_',item().name)}"
}
- 现在使用
json()
函数将上述字符串变量转换为对象,并使用追加变量活动将其附加到数组中。
- 执行管道后,您将获得如下图所示的结果:
- 如果某个特定数据文件没有元数据文件,您可以在此过程之后使用附加条件来检查。
英文:
-
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:
- 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'))
- 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.
- After executing the pipeline, you will get the results as shown in the below image:
- If there is no metadata file for any a particular data file, you can use additional conditions to check it after this process.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论