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

Synapse外部表查询报错:INT类型与Parquet UTF8类型不兼容

问题解决:Synapse外部表类型不兼容报错

问题现象

查询外部表refine_table.FOREX_EOD时触发错误:

列'ASSET_TYPE_CODE'的INT类型与外部数据类型'Parquet physical type: BYTE_ARRAY, logical type: UTF8'不兼容,请尝试使用'VARCHAR(8000)'。
但Synapse数据流的数据预览调试结果显示正常。

原因分析

数据流预览会自动做类型兼容转换,但直接查询外部表时,Synapse会严格校验表定义结构与Parquet文件实际数据类型的匹配度。ASSET_TYPE_CODE列在Parquet文件中实际为字符串类型(BYTE_ARRAY+UTF8逻辑类型),但外部表定义时设为了INT,导致类型不匹配触发报错。

解决步骤

  1. 修改外部表列类型
    执行以下DDL语句,将ASSET_TYPE_CODE列的类型调整为VARCHAR(8000):

    ALTER EXTERNAL TABLE refine_table.FOREX_EOD
    ALTER COLUMN ASSET_TYPE_CODE VARCHAR(8000);
    

    若为创建表时定义错误,直接重新创建外部表并将该列类型设为VARCHAR(8000)即可。

  2. 验证修复效果
    修改完成后重新查询外部表,确认报错消失。

  3. 按需做类型转换(可选)
    如果业务需要将该列作为INT使用,可在查询时做显式转换,同时添加过滤条件避免转换失败:

    SELECT CAST(ASSET_TYPE_CODE AS INT) AS ASSET_TYPE_CODE
    FROM refine_table.FOREX_EOD
    WHERE ISNUMERIC(ASSET_TYPE_CODE) = 1;
    

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:12:02