【问题标题】:Azure Data Factory data flow file sinkAzure 数据工厂数据流文件接收器
【发布时间】:2021-12-06 20:20:43
【问题描述】:

我正在使用 .csv 文件将数据导入 Azure SQL 数据库。数据导入完成后,我现在将源文件从 Source 容器移动到 myArchive 容器。我现在尝试将文件名保存为 SaleData_yyyyMMdd_HHmm.csv,但是,我创建了具有此名称的文件夹,并且该文件被分解为多个部分文件(部分-00000-,部分-00001-,...)。请指导我如何使用当前数据和时间戳指定文件名。

文件系统:我的存档

文件夹路径:concat('SalesDepartment/Warehouse1/','SaleData_',toString(currentTimestamp(),'yyyyMMdd_HHmm'),'.csv')

【问题讨论】:

  • 你用什么任务来移动它?听起来它正在保存为镶木地板。这仍然是一种有效的文件格式,但可能不是您想要的。确保您的数据集是 CSV 而不是镶木地板
  • 所以你使用了两个复制活动?一个复制到 SQL 表,另一个移动到存档?
  • @Nick.McDermaid,我将文件保存为 .csv,但它没有使用我定义的命名约定。文件夹被创建为SaleData_yyyyMMdd_HHmm.csv,文件被创建为part-0000
  • @AllAboutBI,是的,我正在使用 2 个复制活动 1 复制到 SQL 表,另一个用于存档到 Data Lake Storage。
  • 正如我所说,该文件夹/部分意味着它保存为镶木地板,而不是 csv。因此,请确保您的目标数据集是 CSV,而不是 parquet

标签: azure-data-factory azure-data-factory-2 azure-data-factory-pipeline azure-data-flow


【解决方案1】:

可以在接收器数据集中直接提及文件夹路径。 (注意,我的 source 和 sink 都是分隔类型)

对于文件名, 在 sink 数据集下,创建一个参数来传递文件名,并在数据集的文件名部分使用它。

在复制活动接收器的参数值中使用以下表达式

@concat('SaleData_',formatDateTime(utcnow(),'yyyyMMdd_HHmm'),'.csv')

请记住,这只是以不同的名称复制您的源代码。我们需要添加一个删除活动来删除原始源文件。

如果您使用的是数据流,

确保您在 Sink 的优化选项卡中选择单个分区,而不是使用当前分区。

然后,转到设置,选择输出到单个文件。在文件名下,提及带有时间戳的表达式。

concat('SaleData_',toString(currentUTC('yyyyMMdd_HHmm')),'.csv')

【讨论】:

  • OP 没有说清楚,但我认为他们使用的是标准数据副本而不是数据流。 ADF 确实需要一个简单的“移动”和“复制”活动,而不是逐行复制数据。
  • 为避免“逐行”,请在 Copy 中使用 Binary 数据集类型
猜你喜欢
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2021-04-24
  • 2023-02-12
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多