带有列定义的 parquet 文件的 Synapse CETAS 失败

问题描述 投票:0回答:1

在 Synapse 管道中,我尝试使用之前(从 Azure SQL 数据库)生成的 parquet 文件中的 CETAS 脚本活动。 源数据库有一些包含 LOB 列(xml 类型)的表,因此默认 varchar(8000) 类型不足以满足某些值。 我尝试定义列和类型:

CREATE EXTERNAL TABLE myTable ([column1] int, [column2] varchar(MAX))
WITH (
        LOCATION = 'myLocation',
        DATA_SOURCE = mySource,
        FILE_FORMAT = Parquet
) 
AS
SELECT * FROM OPENROWSET(BULK 'myParquetFile.parquet',
    FORMAT='PARQUET') AS f;

我的实际表有 24 列(不仅仅是上面脚本中的 2 列),但在运行脚本时收到此消息:

{
    "errorCode": "2011",
    "message": "Different number of columns in CREATE TABLE or CREATE EXTERNAL TABLE and SELECT query.",
    "failureType": "UserError",
    "target": "myScriptName",
    "details": []
}

使用 parquet 文件查看器检查时,它确实包含 24 列,与我在 CETAS 脚本中传递的列定义完全相同。 parquet 文件中是否存在某种“隐藏”列?我应该用 24 列的确切列表替换“SELECT *”吗?

感谢您的帮助!

azure-data-factory parquet azure-synapse external-tables
1个回答
0
投票

当我尝试使用下面的脚本复制问题时:

CREATE EXTERNAL TABLE myTable ([EMPLOYEE_ID] int, [FIRST_NAME] varchar(MAX))
WITH (
        LOCATION = '<location>',
        DATA_SOURCE = '<dataSource>',
        FILE_FORMAT = <fileFormat>
) 
AS
SELECT * FROM OPENROWSET(BULK 'employees.parquet',
    FORMAT='PARQUET') AS f;

我遇到了类似的错误:

enter image description here

我使用以下脚本来解决该问题:

CREATE EXTERNAL TABLE dbo.emp (
    [EMPLOYEE_ID] int,
    [FIRST_NAME] varchar(MAX)
)
WITH (
    LOCATION = '<location>',
    DATA_SOURCE = <dataSource>,
    FILE_FORMAT = <fileFormat>
)

脚本活动成功运行,没有任何错误:

enter image description here

已创建外部表:

enter image description here

如果你想从源中获取所有列,可以使用下面的代码:

SELECT *
FROM OPENROWSET(
    BULK '<filePath>',
    FORMAT='PARQUET'
) AS [dbo.employee];
© www.soinside.com 2019 - 2024. All rights reserved.