首页 > 解决方案 > 在不知道列顺序的情况下通过 Polybase 摄取 CSV 文件

问题描述

我正在尝试使用 Polybase 将一些 CSV 文件从 Azure Data Lake 摄取到 Azure Synapse。每个 CSV 文件中有一组固定的列,列名在第一行给出。但是,这些列可以以不同的顺序出现。

在 Polybase 中,我需要声明外部表,我需要在设计时知道列的确切顺序,因此我无法创建外部表。还有其他方法可以摄取 CSV 文件吗?

标签: azureazure-data-lakepolybaseazure-synapse

解决方案


我不相信您可以直接使用 Polybase 执行此操作,因为正如您所指出的 CREATE EXTERNAL TABLE 语句需要列声明。在运行时,CSV 数据会映射到这些列名。

通过允许数据流生成表,您可以使用 Azure 数据工厂和数据流(在后台使用 Polybase 将数据移动到 Synapse)轻松完成此操作。这是有效的,因为该表是在读取数据之后生成的,而不是像 EXTERNAL 那样在读取之前生成。

对于接收器数据集,使用参数化的表名 [和可选的模式] 创建它: 在此处输入图像描述

在 Sink 活动中,指定“重新创建表”: 在此处输入图像描述

将所需的表名从管道传递到接收器数据集: 在此处输入图像描述

请注意,所有基于字符串的列都将定义为 VARCHAR(MAX)。


推荐阅读