HIVE 上的时间戳 table

TIMESTAMP on HIVE table

我正在尝试将数据从 Oracle 以镶木地板的形式加载到 Hive。每次我将带有 date/timestamp 列的 table 加载到配置单元时,它会自动将这些列转换为 BIGINT。是否可以使用 sqoop 将 timestamp/date 格式作为镶木地板文件加载到配置单元?

已经尝试先在配置单元中创建 table,然后使用 impala 将数据加载到 parquet 文件中。
仍然失败并出现错误

"file XX has an incompatible Parquet schema for column XX column: TIMESTAMP"

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

尝试使用sqoop的配置

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

来自Cloudera documentation:

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

或者您也可以像这样使用 Hive 查询来获得所需 TIMESTAMP 格式的结果。

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