我可以使用具有动态架构的 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) 完成此操作。
创建一个指向您的 CSV 位置的数据集(我假设是 Azure Blob 存储)。
- 最初,select 一个特定的 CSV 文件。
- 在架构选项卡上,单击 "Import schema"。可以稍后更改,但 DataSet 在设计时必须具有架构。
- 在“参数”选项卡上,为 blobName 创建一个参数。
- 在“连接”选项卡上,在 "File" 框中引用该参数。您将在运行时在管道中设置它的值。 [这会覆盖用于定义模式的初始值]。
为 SQLDW 创建数据集 table。
- Select"Create new table"
- 添加架构和 table 名称[如果需要,稍后应 configurable/overrideable 通过 DataSet 参数]
- 架构选项卡将不显示架构。
创建数据流以将数据从 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" 已启用 [默认情况下应启用]
筹备中:
- 为 "blobName"
创建一个参数
- Select数据流activity:
- 在“设置”选项卡上:将 blobName 的源参数设置为您刚刚创建的管道参数。
- SQLDW 具体:您需要为 Polybase 提供 Blob 存储链接服务和位置。
注意事项
- 据我所知,SQLDW table 中的每一列都创建为 NVARCHAR(MAX)。我认为 "Infer drifted column types" 会解决这个问题,但显然不会。
- 此配置假定 CSV 的第一行是 header 行。
- 如果header行中传入的列名包含空格或特殊字符,Sink操作将失败。为了在生产场景中解决这个问题,您应该在数据流中的 Source 和 Sink 活动之间添加一个 SELECT,然后使用新的 Rule-based 映射和表达式去除任何无效字符。
- 我的示例每次都使用相同的 SQLDW 架构和 table 名称,但如上面第 2 步所述,如果需要,您应该能够创建 DataSet 参数以在运行时覆盖这些参数。
看完这个视频。动态负载解释清楚。
我正在尝试使用 Azure 数据工厂获取 csv 并将它们转换为 DW 中的 SQL tables。
列会经常更改,因此需要动态采用 csv 的架构。
我尝试使用获取元数据来获取结构和数据类型,但我无法将其解析为相关格式来创建 sql table.
有没有人在 ADF 上做过这样的事情?可能吗?
是 - 它需要一些配置,但你可以使用 Azure 数据工厂数据流 (ADFDF) 完成此操作。
创建一个指向您的 CSV 位置的数据集(我假设是 Azure Blob 存储)。
- 最初,select 一个特定的 CSV 文件。
- 在架构选项卡上,单击 "Import schema"。可以稍后更改,但 DataSet 在设计时必须具有架构。
- 在“参数”选项卡上,为 blobName 创建一个参数。
- 在“连接”选项卡上,在 "File" 框中引用该参数。您将在运行时在管道中设置它的值。 [这会覆盖用于定义模式的初始值]。
为 SQLDW 创建数据集 table。
- Select"Create new table"
- 添加架构和 table 名称[如果需要,稍后应 configurable/overrideable 通过 DataSet 参数]
- 架构选项卡将不显示架构。
创建数据流以将数据从 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" 已启用 [默认情况下应启用]
- 来源:select 在步骤 1 中创建的数据集。
筹备中:
- 为 "blobName" 创建一个参数
- Select数据流activity:
- 在“设置”选项卡上:将 blobName 的源参数设置为您刚刚创建的管道参数。
- SQLDW 具体:您需要为 Polybase 提供 Blob 存储链接服务和位置。
注意事项
- 据我所知,SQLDW table 中的每一列都创建为 NVARCHAR(MAX)。我认为 "Infer drifted column types" 会解决这个问题,但显然不会。
- 此配置假定 CSV 的第一行是 header 行。
- 如果header行中传入的列名包含空格或特殊字符,Sink操作将失败。为了在生产场景中解决这个问题,您应该在数据流中的 Source 和 Sink 活动之间添加一个 SELECT,然后使用新的 Rule-based 映射和表达式去除任何无效字符。
- 我的示例每次都使用相同的 SQLDW 架构和 table 名称,但如上面第 2 步所述,如果需要,您应该能够创建 DataSet 参数以在运行时覆盖这些参数。
看完这个视频。动态负载解释清楚。