Python Apache Drill不理解datetime64[ns]

Python Apache Drill不理解datetime64[ns],python,parquet,apache-drill,pyarrow,Python,Parquet,Apache Drill,Pyarrow,我用的是Pyarrow,Pyarrow,拼花地板和熊猫。当我将Pandas datetime64[ns]系列发送到拼花地板文件并通过钻取查询再次加载它时,查询显示一个整数,如:1467331200000000,它似乎不是UNIX时间戳 查询如下所示: 选择workspace.id-column作为id列,选择workspace.date-column作为日期列 当我再次在Python中打开该文件时,它会正确加载,并且仍然具有datetime64[ns]类型 你知道哪里出了问题,怎么解决吗?我希望

我用的是Pyarrow,Pyarrow,拼花地板和熊猫。当我将Pandas datetime64[ns]系列发送到拼花地板文件并通过钻取查询再次加载它时,查询显示一个整数,如:1467331200000000,它似乎不是UNIX时间戳

查询如下所示:

选择workspace.id-column作为id列,选择workspace.date-column作为日期列

当我再次在Python中打开该文件时,它会正确加载,并且仍然具有datetime64[ns]类型


你知道哪里出了问题,怎么解决吗?我希望此值显示为常规日期。

您能分享拼花地板方案吗?它是否包含此列的时间戳逻辑类型

现在,您可以编写自定义UDF,将BigInt nanoseconds值转换为时间戳,或者使用内置函数(不确定ns),但有许多函数接受毫秒:

select to_timestamp(1467331200000/1000);
+-----------------------+
|        EXPR$0         |
+-----------------------+
| 2016-07-01 03:00:00.0 |
+-----------------------+

好的,几天前我找到了一个解决方案,我想与大家分享。我想我最初错过了一些东西。将数据帧发送到拼花地板之前,向下转换到[ms]并允许截断时间戳非常重要,以便能够在钻孔中自由打开:

pq.write_table(table, rf'{name}.parquet',
           coerce_timestamps='ms',
           allow_truncated_timestamps=True)

当我在Drill中定义一个视图时,我可以根据需要将该列转换为日期或时间戳。

嘿,在这两者之间,我找到了一个解决方案,我必须将其集成到我的CREATE view语句中:基本上,我总是想创建一个包含所有可用列的视图,尽管它们是纯列,因为它们在作为拼花写入时已经被清理干净了。但其中一些会有一个CASTxyz TO_时间戳。选择*,从workspace.file.paquet将时间戳转换为\u不起作用。不足为奇。但是你知道如何处理它吗?请提供拼花地板模式来确定Drill是否应该将该值作为时间戳来读取。关于您提供的查询,它应该可以工作,但正如预期的那样,它将返回原始列和转换列。+1,我将为Pandas数据帧添加缩写df.to_parquet'/some/path',concurve_timestamps='ms'就足够了。