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

Can I create SQL tables using Azure Data Factory with a dynamic schema

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

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

我尝试使用获取元数据来获取结构和数据类型,但我无法将其解析为相关格式来创建 sql table.

有没有人在 ADF 上做过这样的事情?可能吗?

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

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

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

    • Select"Create new table"
    • 添加架构和 table 名称[如果需要,稍后应 configurable/overrideable 通过 DataSet 参数]
    • 架构选项卡将不显示架构。
  3. 创建数据流以将数据从 CSV 移动到 SQLDW。

    • 来源:select 在步骤 1 中创建的数据集。
      • 在源设置选项卡上:确保选中 "Allow schema drift" 并取消选中 "Validate schema" [这些是默认设置]。
      • 检查 "Infer drifted column types",这不是默认值。
    • SINK: select 在步骤 2 中创建的数据集。
      • 在“接收器”选项卡上:确保选中 "Allow schema drift" 并取消选中 "Validate schema" [这些是默认设置]。
      • 在“设置”选项卡上,将 "Table action" 更改为 "Recreate table"。这应该推断出新的模式并根据它找到的内容删除和创建列。
      • 在“映射”选项卡上:确保 "Auto Mapping" 已启用 [默认情况下应启用]
  4. 筹备中:

    • 为 "blobName"
    • 创建一个参数
    • Select数据流activity:
      • 在“设置”选项卡上:将 blobName 的源参数设置为您刚刚创建的管道参数。
      • SQLDW 具体:您需要为 Polybase 提供 Blob 存储链接服务和位置。
  5. 注意事项

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

看完这个视频。动态负载解释清楚。

ADF Dynamic Load