【发布时间】:2021-09-15 02:04:48
【问题描述】:
我正在尝试将 Azure Datalake 中的 csv 文件中的数据复制到 SQL Server 中的表中。作为条件,我只想使用数据库表中的文件名列来复制数据库中尚不存在的文件。以下是我的尝试(我无法在互联网上找到这样的示例)。
我首先使用一个Get Metadata 活动来检索数据湖中的所有文件。同时,我使用Lookup 活动来获取所选表中的不同文件名。第一张图片显示了活动的组织。
这是Get Metadata 和Lookup 活动的输出。
Datalake 文件元数据输出
{
"childItems": [
{
"name": "surveydetails_eq5d_001.csv",
"type": "File"
},
{
"name": "surveydetails_koos_001.csv",
"type": "File"
},
{
"name": "surveydetails_oxford_001.csv",
"type": "File"
},
{
"name": "surveydetails_womac_001.csv",
"type": "File"
}
],
数据库表文件查找
{
"count": 4,
"value": [
{
"file_name": "surveydetails_koos_001.csv"
},
{
"file_name": "surveydetails_oxford_001.csv"
},
{
"file_name": "surveydetails_eq5d_001.csv"
},
{
"file_name": "surveydetails_womac_001.csv"
}
],
获得文件名后,我使用 ForEach 并迭代 Datalake 项目:
@activity('Datalake Files Metadata').output.childitems
在ForEach 内部,我有一个IfCondition,用于检查当前Datalake 文件是否在查找数组中。如果 Datalake 文件不在阵列中,则执行复制活动。但是,使用此构造,我不希望复制任何内容,因为数据湖中的项目已经在数据库中。我感觉IfCondition 中的动态内容已关闭,但在最近几个小时在线搜索后,我找不到任何明显的错误。 IfCondition off 中有逻辑吗?是别的吗?请帮忙。
IfCondition 的逻辑:
@not(contains(activity('Database Table File Lookup').output.value, item().name))
【问题讨论】:
-
好问题!非常详细。我有类似的问题。希望你能尽快得到答复;)
标签: azure azure-data-factory azure-data-factory-2