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
如果您使用 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;
我正在尝试将数据从 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
如果您使用 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;