配置单元表上的时间戳

yqlxgs2m  于 2021-06-03  发布在  Sqoop
关注(0)|答案(2)|浏览(327)

我正在尝试将数据作为Parquet从oracle加载到hive。每次我将带有日期/时间戳列的表加载到配置单元时,它都会自动将这些列转换为bigint。是否可以使用sqoop和parquet文件将时间戳/日期格式加载到配置单元?
已经尝试先在配置单元中创建表,然后使用impala将数据加载到parquet文件的路径中。
仍然失败,但有错误
“文件xx的列xx:timestamp的Parquet架构不兼容”
顺便说一句,我使用的是cloudera快速启动虚拟机。谢谢

sigwle7e

sigwle7e1#

尝试使用sqoop的配置

--map-column-hive
<cols_name>=TIMESTAMP
gr8qqesn

gr8qqesn2#

从cloudera文档:
如果使用sqoop将rdbms数据转换为parquet,请小心解释date、datetime或timestamp列的任何结果值。基础值表示为parquet int64类型,在impala表中表示为bigint。parquet值表示以毫秒为单位的时间,而impala将bigint解释为以秒为单位的时间。因此,如果在以这种方式从sqoop导入的parquet表中有一个bigint列,那么在解释为timestamp类型时,将值除以1000。
或者您也可以像这样使用配置单元查询来获得所需时间戳格式的结果。

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

相关问题