Timestamp字段在EMR上显示1970-01-01
问题描述:
我有一个外部Hive表指向通过S3上的Spark作业写入的Parquet文件,它具有日期,时间戳字段,当我通过配置单元查询时,我得到正确的日期Timestamp字段在EMR上显示1970-01-01
CREATE EXTERNAL TABLE events(
event_date date,
event_timestamp timestamp,
event_name string,
event_category string
PARTITIONED BY (
dateid int,
STORED AS PARQUET
LOCATION 's3a://somebucket/events'
hive> SELECT event_timestamp, event_date from events limit 10;
2017-01-02 13:40:23 2017-01-02
2017-01-02 13:40:23.013 2017-01-02
2017-01-02 13:40:23.419 2017-01-02
2017-01-02 18:51:57.637 2017-01-02
2017-01-02 18:52:03.512 2017-01-02
2017-01-02 18:52:03.769 2017-01-02
2017-01-02 18:52:30.945 2017-01-02
2017-01-02 18:52:32.757 2017-01-02
2017-01-02 18:52:37.083 2017-01-02
2017-01-02 18:52:38.099 2017-01-02
然而,当我通过急运行在EMR集群版本(EMR-5.6.0),我看到所有日期为1970-01-01
presto-cli --catalog hive --schema default
presto:default> SELECT event_timestamp, event_date from events limit 10;
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
1970-01-01 00:00:17.197 | 1970-01-01
运行(0.170版) Hive中的时间戳字段是否存在与Parquet通过Presto查询的问题?
答
毕竟在线研究并没有得到任何帮助,我在parquet文件和配置单元DDL语句中对字段顺序进行了比较,看来在Spark作业开发期间字段的顺序发生了变化。虽然配置单元能够通过名称读取列,但是presto正在按顺序进行。因此,一个愚蠢的错误导致了一场疯狂的追逐。无论如何,无耻地回答我自己的问题在这里关闭线程。
您可以在Hive连接器配置中尝试'hive.parquet.use-column-names = true',以使Presto按名称匹配列。 –