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

Pandas写入Parquet后日期显示异常(Synapse查询呈Epoch时间)

解决Pandas写入Parquet后Synapse日期显示为Epoch时间的问题

核心原因

源Parquet文件1的日期列是**date类型**(仅日期,无时间部分),而Pandas默认将datetime64[ns]类型列写入为**timestamp[ns]类型**的Parquet字段,Synapse无服务器SQL对这两种类型的解析逻辑不同,导致显示为Epoch时间戳。

解决方案

要让文件2的日期存储格式与文件1一致,需要将日期列转换为date类型后写入Parquet,具体步骤如下:

  1. 转换日期列类型
    将DataFrame中的datetime64[ns]日期列转换为纯日期类型(去掉时间部分):

    # 替换成你的实际日期列名
    df['date_column'] = df['date_column'].dt.date
    
  2. 用PyArrow引擎写入Parquet
    确保使用PyArrow引擎写入,此时Pandas会将date类型列映射为Parquet的date类型:

    df.to_parquet("file2.parquet", engine='pyarrow')
    

更稳妥的方式(指定Schema)

如果需要严格匹配源文件的Schema,可以手动定义PyArrow Schema后写入,避免类型自动转换偏差:

import pyarrow as pa
import pyarrow.parquet as pq

# 定义Schema,指定日期列为date32类型(对应yyyy-MM-dd格式)
schema = pa.schema([
    ('date_column', pa.date32()),
    # 其他列按实际数据类型补充,例如:
    # ('string_col', pa.string()),
    # ('int_col', pa.int64())
])

# 将DataFrame转为PyArrow Table并写入
table = pa.Table.from_pandas(df, schema=schema)
pq.write_table(table, "file2.parquet")

验证结果

写入完成后,用Synapse无服务器SQL查询文件2,日期列会显示为yyyy-MM-dd格式,与源文件1一致;若需要带T00:00:00,可以在查询时用FORMAT(date_column, 'yyyy-MM-ddTHH:mm:ss')做格式转换,或者保持date类型不变(Synapse默认显示纯日期)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:50:14