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

为何SQL Server的date类型导入Parquet后变为datetime64[ns]?

SQL Server Date类型导出Parquet后读取类型转换问题解决

技术解决方案

方案1:读取后手动转回纯日期类型

若已知原SQL Server的date列名称,读取后直接对目标列做类型转换,还原为纯日期类型:

df = pd.read_parquet(r"path\to\file.parquet", engine='fastparquet')
# 假设目标列名为`order_date`,转换为pandas纯日期类型(datetime64[D])
df['order_date'] = df['order_date'].astype('datetime64[D]')
# 或转换为Python原生date对象
df['order_date'] = df['order_date'].dt.date

方案2:读取时禁用自动日期转换

利用fastparquet的convert_dates参数,关闭自动日期解析,后续手动转换为date类型:

# 关闭自动日期转换,date列会以字符串形式读取
df = pd.read_parquet(r"path\to\file.parquet", engine='fastparquet', convert_dates=False)
# 将字符串列转换为纯日期类型
df['order_date'] = pd.to_datetime(df['order_date']).dt.date

方案3:切换至pyarrow引擎读取

pyarrow对Parquet日期类型的映射更贴合源类型,默认读取后可直接转换为纯日期类型:

df = pd.read_parquet(r"path\to\file.parquet", engine='pyarrow')
# 转换为纯日期类型
df['order_date'] = df['order_date'].astype('datetime64[D]')

给质检团队的回复说明

关于SQL Server date类型导出Parquet后读取显示为datetime的问题:

  1. 原因:Parquet文件的date类型在fastparquet引擎默认解析规则下,会被映射为datetime64[ns]类型,但仅保留日期部分(时间为00:00:00),实际日期值与源数据完全一致,无偏差。
  2. 处理措施:我们已针对原date类型的列,通过读取后转换的方式还原为纯日期类型;后续会调整读取参数或切换引擎,从根源避免自动类型转换。
  3. 影响说明:当前转换后的列仅类型标识为datetime,但存储的日期数据准确,不会影响业务分析、报表生成等任何数据使用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:57:20