【发布时间】:2016-01-08 15:52:42
【问题描述】:
我使用 sqoop 将数据从 MySQL 导入 hdfs,作为 Impala 使用的 parquet 文件。将 MySQL DATE 类型转换为 Impala TIMESTAMP 时出现问题。
执行compute stats table 或select * 时的Impala 错误消息是:
File 'hdfs://....parquet'
has an incompatible type with the table schema for column 'day'.
Expected type: INT32. Actual type: INT64
将日期列的数据类型更改为 BIGINT 或 STRING 会保留相同的错误消息。
即使我将 Impala 中的日期列类型更改为 STRING 并在 sqoop 中设置 --map-column-java "day=String"(也尝试过 day=Integer 和 Long)我得到:
Expected type: INT32. Actual type: BYTE_ARRAY in Impala
我也尝试在 jdbc 连接字符串中设置 mapDateToTimestamp=false(和 true)但没有效果
使用 parquet 文件时,使用 sqoop 将 MySQL DATE 转换为 Impala TIMESTAMP 的方法是什么(注意我没有使用 AVRO)?
(我使用的sqoop版本是1.4.5-cdh5.3.3) Sqoop 命令如下所示:
sqoop import
--connect jdbc:mysql://adress/db
--username name
--password pass
--table tableName
--target-dir dir
--as-parquetfile -m 1
--driver com.mysql.jdbc.Driver
编辑:我尝试使用
转换 SQL 日期--query "SELECT UNIX_TIMESTAMP(STR_TO_DATE(day, '%Y-%m-%d'))
但 Impala 将其视为 INT64 并期望 INT96。那么另一个问题是如何将其转换为INT96?
【问题讨论】:
标签: mysql hadoop timestamp sqoop impala