HIVE表上的TIMESTAMP

时间:2017-04-20 08:25:48

标签: hive cloudera sqoop impala cloudera-quickstart-vm

我试图将数据从Oracle加载到Hive作为镶木地板。每次我将带有日期/时间戳列的表加载到配置单元时,它会自动将这些列转换为BIGINT。是否可以使用sqoop和作为镶木地板文件将时间戳/日期格式加载到配置单元?

已经尝试在hive中首先创建表,然后使用impala将LOAD DATA INPATH添加到镶木地板文件中 仍然失败并出现错误

  

"文件XX的列XX列具有不兼容的Parquet架构:   TIMESTAMP"

顺便说一下,我正在使用cloudera quickstart vm。感谢

2 个答案:

答案 0 :(得分:2)

来自attribute selecotr

如果使用Sqoop将RDBMS数据转换为Parquet,请小心解释来自DATE,DATETIME或TIMESTAMP列的任何结果值。底层值表示为Parquet INT64类型,在Impala表中表示为BIGINT。 Parquet值表示以毫秒为单位的时间,而Impala将BIGINT解释为以秒为单位的时间。因此,如果在从Sqoop以这种方式导入的Parquet表中有BIGINT列,则在将其解释为TIMESTAMP类型时将值除以1000。

或者你也可以像这样使用你的Hive查询来获得你想要的TIMESTAMP格式的结果。

FROM_UNIXTIME(CAST(SUBSTR(timestamp_column, 1,10) AS INT)) AS timestamp_column;

答案 1 :(得分:0)

尝试使用sqoop

的配置
--map-column-hive
<cols_name>=TIMESTAMP