Apache-Drill不了解Pandas datetime64 [ns]

时间:2019-08-05 09:09:40

标签: python parquet apache-drill pyarrow

我正在使用 Pyarrow Pyarrow.Parquet Pandas 。当我将Pandas function compare([a, ...aa], [b, ...bb]) { if (!a && !b) return 0; return a > b || -(a < b) || compare(aa, bb); } var array = [[88, "Bowling Ball"], [2, "Dirty Sock"], [3, "Hair Pin"], [3, "Haaf-Eaten Apple"], [5, "Microphone"], [7, "Toothpaste"]]; array.sort(([, a], [, b]) => compare(a, b)); console.log(array);系列发送到Parquet文件并通过钻取查询加载该Parquet文件时,该查询显示一个Integer,例如:1467331200000000,我不理解,似乎与UNIX时间戳有所不同。

我的查询如下:

datetime64[ns]

当我再次使用Python打开该Parquet文件时,其正确且仍为SELECT workspace.id-column AS id-column, workspace.date-column AS date-column

有什么想法,怎么解决呢?我希望此值beeing显示为常规日期。

2 个答案:

答案 0 :(得分:0)

能否请您分享实木复合地板图式?该列是否包含TIMESTAMP逻辑类型?

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

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

答案 1 :(得分:0)

好吧,几天前我找到了一个我想分享的解决方案。我想我最初错过了一些东西。向下转换为[ms]非常重要,并允许在将数据帧发送到Parquet之前允许截断时间戳,以便能够在Drill中免费打开它:

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

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