Hive错误:ORC不支持从DATE到TIMESTAMP的类型转换

时间:2017-04-21 12:14:21

标签: hadoop hive hiveql

我在Hive中有一个源表,DDL为:

CREATE EXTERNAL TABLE JRNL.SOURCE_TAB(
  ticket_id varchar(11),
  ttr_start timestamp,
  ttr_stop timestamp
)
PARTITIONED BY (
  exp_dt string)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '\u0001'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'hdfs://my.cluster.net:8020//db/data/SOURCE_TAB'
  TBLPROPERTIES (
  'last_modified_by'='edpintdatd',
  'last_modified_time'='1466093031',
  'serialization.null.format'='',
  'transient_lastDdlTime'='1466093031')

当我查询表时:

hive> select exp_dt from JRNL.SOURCE_TAB limit 3;

它给了我一个例外:

Failed with exception java.io.IOException:java.io.IOException: ORC does not support type conversion from DATE to TIMESTAMP

即使我尝试使用:

创建类似上述源的副本表
CREATE TABLE JRNL.SOURCE_TAB_BKP(
  ticket_id varchar(11),
  ttr_start timestamp,
  ttr_stop timestamp
)
PARTITIONED BY (exp_dt string);

然后使用以下方法在此表中插入数据

INSERT INTO TABLE JRNL.SOURCE_TAB_BKP PARTITION (exp_dt)
  SELECT
  ticket_id,
  ttr_start,
  ttr_stop,
  exp_dt string
FROM JRNL.SOURCE_TAB;

它仍然给我错误ORC does not support type conversion from DATE to TIMESTAMP
我尝试使用

to_utc_timestamp(unix_timestamp(ttr_start),'UTC'),
to_utc_timestamp(unix_timestamp(ttr_stop),'UTC'),

但这也没有帮助 我已经设置了hive.exec.dynamic.partition.mode=nonstrict。 我甚至使用了CAST(.... as DATE)CAST(.... as TIMESTAMP)。也没用。

0 个答案:

没有答案