为什么" date "被转换为" datetime " ? &



我正在从SQL Server读取数据到S3作为parquet文件。在SQL Server中,我的数据类型是date,格式是2022-09-01,就像日期一样。

当我使用pandas读取parquet文件时,代码如下:

df=pd.read_parquet(r"pathtofile.parquet", engine='fastparquet')
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
print(df)

它自动将日期数据类型从源转换为目标parquet文件中的datetime64[ns]。我不知道它为什么会这样。列的格式看起来与源2022-09-01相同,但数据类型为datetime

对于其他列,源数据类型为datetime并转换为datetime,对于这一列,源数据类型为date并转换为datetime

我怎样才能阻止这一切?

我不知道该跟负责质量保证检查的团队说什么,他们一直烦我问我为什么。我不知道,因为拼花阅读器是如何做到的呢?

您混淆了日期的存储方式和日期的呈现方式。它们是两个独立的考虑因素。

日期或任何数据都不是以格式存储的。它的存储方式使SQL引擎的效率最大化。当在sql server (datetime类型)中存储日期时间时,它以什么格式存储?进行更深入的讨论。

但是,对于您的目的,日期存储为单个整数,日期时间存储为两个整数的分组,呈现查询结果的软件(SSMS或Toad或其他)使用数据类型指定来确定如何呈现当您从表中提取这条信息时。

在读取导出文件时也会发生同样的事情。内在数据转换是用一种方式存储日期,用另一种方式存储日期时间。它们显然是渲染查询时也是这样,但这取决于UI。格式不是数据的一部分;这是渲染引擎做出的决定。

一种解决方案可能是在提取到parquet文件时显式地将日期值转换为datetimes,或者您想要的任何其他格式。

相关内容

  • 没有找到相关文章

最新更新