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



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

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

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

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

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

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

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

    • 选择"创建新表">
    • 添加架构和表名称[如果需要,以后应该可以通过数据集参数进行配置/覆盖]
    • "架构"选项卡将不显示"架构"。
  3. 创建数据流以将数据从 CSV 移动到 SQLDW。

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

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

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

相关内容

  • 没有找到相关文章

最新更新