You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Synapse中带列定义的CETAS读取Parquet文件失败排查求助

Synapse CETAS创建外部表列数不匹配问题解决

问题场景

在Synapse管道中使用CETAS脚本活动,从Azure SQL数据库生成的Parquet文件创建外部表。源表包含xml类型的LOB列,默认varchar(8000)无法容纳部分值,因此手动定义了24列及对应类型,但执行脚本时触发列数不匹配错误。

执行的SQL脚本

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;

错误信息

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

已通过Parquet文件查看器确认文件包含24列,与定义完全一致,疑问:Parquet是否存在隐藏列?是否需要将SELECT *替换为具体列列表?

解决方案

  • 必须将SELECT *替换为显式列列表
    即使Parquet文件列数与外部表定义一致,SELECT *在OPENROWSET读取Parquet时,可能因列顺序、大小写敏感(如Parquet列名小写,外部表列名大写)或元数据解析差异,导致实际返回列与预期不匹配。显式指定列名既能避免列数不匹配问题,还能确保xml等LOB列的类型映射完全符合自定义规则(比如对应varchar(MAX))。

  • 关于Parquet隐藏列
    标准Parquet格式无默认隐藏列,但部分ETL工具生成Parquet时可能添加自定义元数据列。不过你已确认文件列数为24,大概率不是此原因,但显式列列表可直接规避这类潜在问题。

内容的提问来源于stack exchange,提问作者Jean-Christophe Rat-Patron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:17:17