是否可以使用具有动态架构的 Azure 数据工厂创建 SQL 表

Nox*_*lle 3 azure azure-data-factory azure-data-factory-2

我正在尝试使用 Azure 数据工厂获取 csv 并将它们转换为 DW 中的 SQL 表。

列会经常更改,因此需要动态采用 csv 的模式。

我已经尝试使用 get metadata 来获取结构和数据类型,但我无法将其解析为相关格式来创建 sql 表。

有没有人在 ADF 上做过这样的事情?是否可以?

Joe*_*ran 7

是的 - 这需要一些配置,但您可以使用 Azure 数据工厂数据流 (ADFDF) 来完成此操作。

  1. 创建一个指向您的 CSV 位置的数据集(我假设是 Azure Blob 存储)。

    • 最初,选择一个特定的 CSV 文件。
    • 在架构选项卡上,单击“导入架构”。稍后这会改变是可以的,但是 DataSet 在设计时必须有一个架构。
    • 在“参数”选项卡上,为 blobName 创建一个参数。
    • 在“连接”选项卡上,在“文件”框中引用该参数。您将在运行时在管道中设置其值。[这会覆盖用于定义架构的初始值]。
  2. 为 SQLDW 表创建一个数据集。

    • 选择“创建新表”
    • 添加模式和表名 [如果需要,这应该可以在以后通过 DataSet 参数进行配置/覆盖]
    • 架构选项卡将不显示架构。
  3. 创建一个 DataFlow 以将数据从 CSV 移动到 SQLDW。

    • SOURCE:选择在步骤 1 中创建的数据集。
      • 在“源设置”选项卡上:确保选中“允许架构漂移”并取消选中“验证架构”[这些是默认设置]。
      • 检查“推断漂移列类型”,这不是默认设置。
    • SINK:选择在步骤 2 中创建的 DataSet。
      • 在接收器选项卡上:确保选中“允许架构漂移”并取消选中“验证架构”[这些是默认设置]。
      • 在设置选项卡上,将“表操作”更改为“重新创建表”。这应该推断新模式并根据它找到的内容删除和创建列。
      • 在映射选项卡上:确保启用“自动映射”[默认情况下应为]
  4. 在管线中:

    • 为“blobName”创建一个参数
    • 选择数据流活动:
      • 在设置选项卡上:将 blobName 的源参数设置为您刚刚创建的管道参数。
      • SQLDW特定:您需要为 Polybase 提供 Blob 存储链接服务和位置。
  5. 警告

    • 据我所知,SQLDW 表中的每一列都创建为 NVARCHAR(MAX)。我认为“推断漂移列类型”会解决这个问题,但显然不是。
    • 此配置假定 CSV 的第一行是标题行。
    • 如果标题行中的传入列名称包含空格或特殊字符,则 Sink 操作将失败。为了在生产场景中解决这个问题,您应该在数据流中的 Source 和 Sink 活动之间添加一个 SELECT,然后使用新的基于规则的映射和表达式来去除任何无效字符。
    • 我的示例每次都使用相同的 SQLDW 架构和表名,但如上面第 2 步所述,您应该能够创建 DataSet 参数以在需要时在运行时覆盖这些参数。