所以基本上我的问题是这样的,我将使用元数据从 azure 的存储帐户中的源文件夹中获取文件的名称。我需要解析该名称并将其插入到相应的表中。下面的例子。
文件名将采用这种格式。 customer_GUIID_TypeOfData_其他信息.csv 即 1c56d6s4s33s4_Sales_09112021.csv 156468a5s5s54_Inventory_08022021.csv
所以这是 2 个不同的客户和两种不同类型的信息。
SQL 中的表将与没有日期的表完全相同。 156468a5s5s54_库存或1c56d6s4s33s4_销售
如何根据文件名将数据从 CSV 复制到相应的表?我还需要使用 AZURE 数据工厂根据文件数据集中的唯一标识符插入或更新目标表中的现有行。
最佳答案
使用获取元数据
事件获取文件名,并使用启用Upsert的Dataflow
事件将数据从CSV复制到Azure SQL表。
输入 blob 文件:
第 1 步:
• 创建分隔符源数据集。为文件名创建一个参数以动态传递它。
• 创建Azure SQL 数据库接收器数据集并创建参数以动态传递表名称。
源数据集:
接收器数据集:
第 2 步:
• 将源数据集连接到“获取元数据”事件,并传递“*.csv”作为文件名,以获取 blob 文件夹中所有文件名的列表。
获取元数据的输出:
第三步:
• 将Get Metadata
事件的输出连接到ForEach 循环,以将所有传入的源文件/数据加载到Sink。
• 向项目添加表达式以从之前的事件中获取子项目。
@activity('Get Metadata1').output.childitems
第四步:
• 在 foreach 循环内添加 dataflow
事件。
• 将源连接到源数据集。
数据流来源:
第五步:
• 将接收器连接到接收器数据集。
• 如果基于唯一键列存在记录,则启用允许更新插入进行更新。
第六步:
• 在源和接收器之间添加 AlterRow
以添加更新插入条件。
• 当唯一键列不为空或找到时更新插入。
Upsert if: isNull(id)==false()
第七步:
• 在ForEach
循环中,数据流 设置中,动态添加源文件名和接收器表名称的表达式。
Src_file_name: @item().name
• 当我们从源文件名中提取接收器表名称时。根据下划线“_”拆分文件名,然后组合第 1 2 个字符串以消除日期部分。
Sink_tbname:
@concat(split(item().name, '_')[0],'_',split(item().name, '_')[1])
第8步:
当管道运行时,您可以看到循环执行了 blob 中的源文件数量,并根据文件名将数据加载到各个表中。
关于azure - 从 azure blob 插入数据,并根据 blob 的名称插入到 Azure 数据工厂中的某个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69144723/