我可以使用带有动态架构的Azure Data Factory创建SQL表吗

时间:2019-08-16 09:30:12

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

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

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

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

有人在ADF上做过类似的事情吗?有可能吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

    • 选择“创建新表”
    • 添加架构和表名[如果需要,稍后可以通过DataSet参数对其进行配置/重写]
    • “架构”标签将不显示任何架构。
  3. 创建一个DataFlow将数据从CSV移到SQLDW。

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

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

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

答案 1 :(得分:0)

浏览此视频。清楚地说明了动态负载。

ADF Dynamic Load