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

Azure Synapse从Parquet创建外部表时日期时间列报错求助

Azure Synapse外部表Parquet日期时间类型兼容问题

问题场景

在Azure Synapse中基于Azure Data Lake Storage的Parquet文件创建外部表时,处理registration_time(时间戳)和birthday(日期)列时持续报错。尝试将这两列定义为varchar类型、直接使用date/datetime类型均失败。

已尝试的建表代码

create external table [parquet_userdata]
(
    registration_time [varchar] (100) null,
    id [varchar] (10) null,
    first_name [varchar] (100) null,
    last_name [varchar] (100) null,
    email [varchar] (100) null,
    gender [varchar] (100) null,
    ip_address [varchar] (100) null,
    cc [varchar] (100) null,
    country [varchar] (100) null,
    birthday [varchar] (100) null,
    salary [float] null,
    title [varchar] (100) null,
    comments [varchar] (2000) null
)
with(
    -- specify the file in container
    location= 'userdata.parquet',
    data_source = parquet_location,
    file_format = parquetformat
)

报错信息

无法将Parquet类型TIMESTAMP_MILLIS转换为目标列类型VARCHAR(100);同时无法将Parquet类型DATE转换为目标列类型VARCHAR(100)。

数据背景

使用的Parquet文件为Teradata Kylo的示例数据,其中registration_time字段为毫秒级时间戳类型,birthday字段为日期类型。


解决方案

1. 匹配Parquet原始类型与Synapse兼容类型

Parquet的TIMESTAMP_MILLIS对应Synapse的datetime2(3)(保留毫秒精度),DATE对应Synapse的date类型。修改建表语句如下:

create external table [parquet_userdata]
(
    registration_time datetime2(3) null,
    id int null,
    first_name varchar(100) null,
    last_name varchar(100) null,
    email varchar(100) null,
    gender varchar(100) null,
    ip_address varchar(100) null,
    cc varchar(100) null,
    country varchar(100) null,
    birthday date null,
    salary float null,
    title varchar(100) null,
    comments varchar(2000) null
)
with(
    location= 'userdata.parquet',
    data_source = parquet_location,
    file_format = parquetformat
)

注:id字段在Parquet中为整型,建议同步改为int类型以匹配原始数据

2. 确认外部文件格式配置

确保parquetformat的定义正确,未强制错误的类型转换:

CREATE EXTERNAL FILE FORMAT parquetformat
WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);

3. 先用OPENROWSET验证数据类型

若仍有问题,可先通过OPENROWSET直接查询Parquet文件,确认字段实际类型:

SELECT *
FROM OPENROWSET(
    BULK 'userdata.parquet',
    DATA_SOURCE = 'parquet_location',
    FORMAT = 'PARQUET'
) AS [result]

根据查询结果的字段类型调整外部表的列定义。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:25:24