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

ADF通过Polybase将Parquet导入SQL DW时遇recordReaderFillBuffer错误

解决ADF Copy Data Activity导入INT96类型Parquet datetime到SQL DW的Polybase错误

错误根源

这个PolybaseOperationFailed(错误码106000)引发的ClassCastException,核心原因是Parquet文件中INT96类型的datetime字段与SQL Data Warehouse的datetime类型不兼容,且Copy Data Activity未配置显式字段映射,导致Polybase自动类型转换失败。INT96是Parquet用于存储带纳秒精度timestamp的特殊格式,而SQL DW的datetime仅支持毫秒精度,默认自动转换无法识别INT96的二进制结构。

解决方案

1. 配置显式字段映射并强制类型转换

在Copy Data Activity中手动定义字段映射,将INT96类型的源字段转换为SQL DW兼容的datetime类型:

  • 打开Copy Data Activity的映射标签页,关闭「自动映射」
  • 找到对应的datetime字段,源列选择Parquet中的INT96字段,目标列选择SQL DW表的datetime字段
  • 在转换表达式中使用ADF内置函数处理INT96类型:
    toDateTime(fromTimestamp(your_int96_column_name))
    
    若需截断纳秒匹配SQL DW的datetime精度,可补充处理:
    date_trunc('millisecond', toDateTime(fromTimestamp(your_int96_column_name)))
    

2. 提前转换Parquet的datetime存储格式(可选)

如果原始层Parquet文件可修改,在ADF写入Parquet时,将datetime字段存储为标准timestamp类型而非INT96:

  • 在写入Parquet的Copy Activity中,配置映射时将源datetime字段的目标类型指定为timestamp,后续导入SQL DW时无需额外转换。

3. 手动定义Polybase外部表(高级方案)

若自动生成的外部表类型映射错误,可手动创建外部表指定INT96字段的正确转换逻辑:

  • 在SQL DW中创建外部数据源指向Parquet存储路径
  • 创建外部表时,将INT96类型字段定义为TIMESTAMP,并通过FORMAT_OPTIONS指定Parquet类型处理:
    CREATE EXTERNAL TABLE staging.your_table (
        your_datetime_col TIMESTAMP
    )
    WITH (
        LOCATION = '/path/to/parquet/',
        DATA_SOURCE = your_external_data_source,
        FILE_FORMAT = your_parquet_file_format
    )
    
    之后使用Copy Data Activity从该外部表加载数据到目标表,规避自动映射的类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:22:52