1

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

已经尝试先在 hive 中创建表,然后使用 impala 加载数据 INPATH 镶木地板文件。
仍然因错误而失败

“文件 XX 与列 XX 列的 Parquet 模式不兼容:TIMESTAMP”

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

4

2 回答 2

3

Cloudera 文档:

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

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

FROM_UNIXTIME(CAST(SUBSTR(timestamp_column, 1,10) AS INT)) AS timestamp_column;
于 2017-04-21T06:56:10.990 回答
0

尝试使用 sqoop 的配置

--map-column-hive
<cols_name>=TIMESTAMP
于 2017-04-21T03:14:28.537 回答