2017-08-16 37 views
0

我有一个外部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查询的问题?

回答

0

毕竟在线研究并没有得到任何帮助,我在parquet文件和配置单元DDL语句中对字段顺序进行了比较,看来在Spark作业开发期间字段的顺序发生了变化。虽然配置单元能够通过名称读取列,但是presto正在按顺序进行。因此,一个愚蠢的错误导致了一场疯狂的追逐。无论如何,无耻地回答我自己的问题在这里关闭线程。

+0

您可以在Hive连接器配置中尝试'hive.parquet.use-column-names = true',以使Presto按名称匹配列。 –