【问题标题】:Add a date column in Azure Data Factory在 Azure 数据工厂中添加日期列
【发布时间】:2021-03-15 08:57:49
【问题描述】:

我想知道是否可以为每个上传的文件添加一个日期列。

例如,每个月都会生成一个 CSV。例如,我想将“2020 年 12 月”添加到每一行,然后在接下来的几个月将“2021 年 1 月”上传到 CSV 文件的每一行。在将其复制到 SQL 数据库之前。

例如文件名“2020 年 12 月最新评级”我希望“2020 年 12 月”作为一列,并且所有行的值都相同。每个月上传的命名约定都相同。

谢谢

【问题讨论】:

  • 我认为您可以使用Get MetaData活动来获取文件名并截取字符串作为列内容,然后使用ADF中复制活动的附加列来添加此列内容将它们复制到 sql 表中时的每一行。
  • 在数据流活动中执行。使用 Derived Column 活动并使用 currentDate() 作为函数或解析文件名以获取月份。

标签: azure csv azure-sql-database azure-data-factory azure-data-factory-2


【解决方案1】:

我创建了一个测试来向 csv 文件添加一列。
结果如下:

  1. 我们可以通过 Get MetaData 活动中的Child Items 获取文件名。 数据集到 ADLS 中的容器。

  2. 然后我们可以通过表达式@activity('Get Metadata1').output.childItems[0].name声明一个变量FileName来存储文件名。

3.我们可以在复制活动中使用附加列,并使用表达式@concat(split(variables('FileName'),' ')[2],' ',split(variables('FileName'),' ')[3]) 得到我们需要的值。 注意单引号包含一个空格。 在数据集中,我们需要键入动态内容@variables('FileName') 来指定要复制的文件。 接收器与复制活动中的源相同。

  1. 然后我们可以运行调试来确认它。

这里我想我们也可以直接copy到sql表中,当我们将sink设置为sql表时。

【讨论】:

  • 谢谢。因此,例如每个月我都有一个文件要上传相同的命名约定,例如“2020 年 12 月最新评级”。那么我是否必须创建一个管道并每次都重复这个过程?或者有没有办法自动化这个,所以我只需要每个月上传文件,它就会通过同一个管道运行?
  • 有一种方法可以自动执行此操作。在 ADF 中,我们可以使用触发器来触发管道运行。如果我没记错的话,有一个事件类型的触发器,当一个新的 csv 文件上传到 Azure 时,就会触发管道运行。
  • Xu 这对我有用,但有时列标题不同,这会破坏管道?我是否必须手动更改列标题以在 CSV 中匹配?或者您可以在 Azure 中执行此操作吗?
  • 我不太了解您的问题,能否请您补充详细信息或提出其他问题?
  • 因此,例如每个文件将每月上传,但某些月份列标题可能会从前几个月的文件中更改名称。例如:ID - 位置 ID - 域 ID - 位置 ID - 关键问题 “域”和“关键问题”相同,但名称已更改。并且在 Azure 中运行此文件时出现错误“没有关键问题的列”我想将其映射为与域相同
猜你喜欢
  • 2020-12-14
  • 2018-11-21
  • 2020-12-16
  • 2021-12-31
  • 2019-07-31
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多