【发布时间】:2021-11-15 02:32:55
【问题描述】:
我们正在运行带有 CU 12 的 SQL 2019,其外部数据源指向 ADLS Gen2 存储帐户。我们在同一个目录中有两个 parquet 文件,其中一个文件有 2 列,另一个文件有 3 列。我们故意这样做是为了测试拒绝选项,因为我们知道我们的架构会随着时间而改变。
/employee/file1.csv(2 列/5 行)
/employee/file2.csv(3 列/5 行)
根据拒绝选项的文档,如果拒绝行属于下面列出的拒绝配置,我们应该能够查询外部表并在结果集中返回非脏行。
CREATE EXTERNAL TABLE [dbo].[Employee] (
[FirstName] varchar(100) NOT NULL,
[LastName] varchar(100) NOT NULL
)
WITH (LOCATION='/employee/',
DATA_SOURCE = DATA_LAKE,
FILE_FORMAT = ParquetFileFormat,
REJECT_TYPE = VALUE,
REJECT_VALUE = 1000000
);
当我们从外部表中选择时,我希望它从一个包含 2 列的文件中返回 5 行,并从包含 3 列的文件中拒绝 5 行。相反,除了以下异常,我们根本没有得到任何行。
创建记录读取器时遇到意外错误。 HadoopExecutionException:列数不匹配。源文件有 3 列,外部表定义有 2 列。
我觉得我一定遗漏了一些东西,或者我对拒绝选项如何支持文件架构差异的理解不正确。任何人都可以对此有所了解吗?
【问题讨论】:
标签: sql-server-2019 azure-data-lake-gen2 polybase