azure - Azure 数据工厂 - 如果在数据库表中找不到文件,则复制活动
问题描述
我正在尝试将csv
Azure Datalake 中找到的文件中的数据复制到 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"
}
],
获得文件名后,我使用 aForEach
并迭代 Datalake 项目:
@activity('Datalake Files Metadata').output.childitems
在里面ForEach
我有一个IfCondition
检查当前 Datalake 文件是否在 Lookup 数组中。如果 Datalake 文件不在阵列中,则执行复制活动。但是,使用此构造,我不希望复制任何内容,因为数据湖中的项目已经在数据库中。我感觉里面的动态内容IfCondition
已经关闭,但是在网上搜索了最后几个小时后,我找不到任何明显的错误。IfCondition off 中有逻辑吗?是别的吗?请帮忙。
逻辑IfCondition
:
@not(contains(activity('Database Table File Lookup').output.value, item().name))
解决方案
Ifcondition 逻辑有 item().name,它返回一个等于文件名的字符串(示例 --> “surveydetails_eq5d_001.csv”)。
但是,activity('Database Table File Lookup').output.value 返回一个字典数组。在字典中是“file_name”+ 文件名。IE
[
{
"file_name": "surveydetails_eq5d_001.csv"
},
{
"file_name": "surveydetails_koos_001.csv"
},
{
"file_name": "surveydetails_oxford_001.csv"
},
{
"file_name": "surveydetails_womac_001.csv"
}
]
这就是 IF 条件失败的原因。
您可以尝试创建 2 个新数组 dblist 和 mytemparray 变量。遍历 Activity('Database Table File Lookup').output.value 的数组并将每个文件名提取到新的 dblist 数组中(您可以为此使用“union”)。然后,您可以在 Ifcondition 检查中使用此数组。不要忘记将 for 循环上的“Sequential”开关设置为 ON。请参阅屏幕截图。
在我的 for 循环中,我有 2 个设置变量活动。
- 活动 1:将 dblist 复制到 mytemparray
- 活动 2:将 mytemparray 与 file_name 组合并存储在 dblist @union(variables('mytemparray'),array(item().file_name))
推荐阅读
- javascript - 在 DOM 之前在 loadURL 上加载 CSS
- android - 如何在android studio中制作自定义导航栏
- spring - Spring Boot 2.3.x 版 src/test/resources 已移除
- php - Yii2 迁移不更新数据库
- apache-spark - 使用 Spark 和 Opendistro 摄取数据很热门?
- php - Moodle html_table 不允许重复记录
- reactjs - 我的反应代码是否使用端口 3000 而不是端口 80?
- python - 根据 PyTorch 中的分割图在每个区域中采样
- layer - DECK.GL 右键单击事件
- php - 安装 Laravel 收银员的 PHP 致命内存错误