在不知道列顺序的情况下通过 Polybase 获取 CSV 文件
Ingesting a CSV file thru Polybase without knowing the sequence of columns
我正在尝试使用 Polybase 将一些 CSV 文件从 Azure Data Lake 提取到 Azure Synapse。
每个 CSV 文件中都有一组固定的列,列名在第一行给出。但是,列可以按不同的顺序排列。
在 Polybase 中,我需要声明外部 table,我需要在设计时知道列的确切顺序,因此我无法创建外部 table。是否有其他方式获取 CSV 文件?
我认为您不能直接使用 Polybase 执行此操作,因为正如您所指出的,CREATE EXTERNAL TABLE 语句需要列声明。在运行时,CSV 数据随后会映射到这些列名。
通过允许数据流生成 table,您可以使用 Azure 数据工厂和数据流(它在幕后使用 Polybase 将数据移动到 Synapse)轻松完成此操作。这是有效的,因为 table 是在数据被读取之后生成的,而不是像 EXTERNAL 之前那样生成的。
对于接收器数据集,使用参数化 table 名称[和可选模式] 创建它:
在接收器 activity 中,指定 "Recreate table":
将所需的 table 名称从管道传递到接收器数据集:
请注意,所有基于字符串的列都将定义为 VARCHAR(MAX)。
我正在尝试使用 Polybase 将一些 CSV 文件从 Azure Data Lake 提取到 Azure Synapse。 每个 CSV 文件中都有一组固定的列,列名在第一行给出。但是,列可以按不同的顺序排列。
在 Polybase 中,我需要声明外部 table,我需要在设计时知道列的确切顺序,因此我无法创建外部 table。是否有其他方式获取 CSV 文件?
我认为您不能直接使用 Polybase 执行此操作,因为正如您所指出的,CREATE EXTERNAL TABLE 语句需要列声明。在运行时,CSV 数据随后会映射到这些列名。
通过允许数据流生成 table,您可以使用 Azure 数据工厂和数据流(它在幕后使用 Polybase 将数据移动到 Synapse)轻松完成此操作。这是有效的,因为 table 是在数据被读取之后生成的,而不是像 EXTERNAL 之前那样生成的。
对于接收器数据集,使用参数化 table 名称[和可选模式] 创建它:
在接收器 activity 中,指定 "Recreate table":
将所需的 table 名称从管道传递到接收器数据集:
请注意,所有基于字符串的列都将定义为 VARCHAR(MAX)。