azure-data-factory - Azure 数据工厂 - 将未知数量的文件复制到相应的表中
问题描述
我正在尝试将未知数量的文件复制到数据库表中。假设我有两个名为 1 和 2 的文件,我想将它们复制到名为 A 和 B 的表中。
1 - A
2 - B
我通过创建映射表来做到这一点
|SourceFileName|TargetTableName|
|1 |A |
|2 |B |
当两个文件都存在但有时只有一个文件存在时,我能够完成该任务。在这种情况下,我的 ForEach 循环失败了,我希望它仍然通过并进入下一个任务。
现在我有将 Childitems 传递给 ForEach 循环的 Get Metadata,在该循环内我有一个基于映射表的查找和基于该查找的复制活动 @activity('lookup').output.value[0].TargetTableName
解决方案
您可以参数化查找查询以根据源文件获取单个表名,并将查找的输出传递给复制活动以加载数据。
Foreach
这将根据输出中输入文件的数量(1 个或更多)循环活动Get Metadata
。
映射表(查找表):
获取元数据活动的输出:
在Foreach循环 -->
Lookup
活动中,参数化查询以根据源文件名获取表名。@concat('SELECT top 1 [TableName] FROM [dbo].[MappingTable] where Filename = ''', string(item().name), '''')
查找活动的输出:
- 在
Copy data
活动中,将当前的Foreach文件项作为Source传递。
在Copy data activity Sink中,通过查找活动输出内容动态传递表名称。
@activity('Lookup1').output.firstRow.TableName
- Foreach循环 Content 循环基于Get Metadata 输出文件数。
- 当多个输入文件时:
推荐阅读
- c++ - node-gyp 没有在 macos 上正确链接库
- python - 使用 DataFrame 中的少量参数使用 Python 从 SQL Server 读取
- typescript - 使用类实例作为 Typescript Map 中的键
- angular - 从多个面板列表之一单击时,将垫子扩展面板设置为页面顶部
- android-studio - 键盘和快捷键在 Windows 的 Android Studio 中不起作用
- parsing - ANTLR 列表以空格分隔
- php - 语法错误,php shell 代码中的意外 (T_VARIABLE)
- c++ - 如何使用 C++ SDK 修复同步调用的 aws lambda 超时?
- c# - 装饰多个实现的接口之一
- mysql - 如何使用 JOIN 和多个排序条件创建 MySQL 5.6 Rank