Я импортирую данные с sqoop из MySQL в hdfs как файл паркета, где он используется Impala. Существует проблема с преобразованием типа DATE MySQL в Impala TIMESTAMP.sqoop date to impala timestamp
Impala сообщение об ошибке при выполнении compute stats table
или select *
является:
File 'hdfs://....parquet'
has an incompatible type with the table schema for column 'day'.
Expected type: INT32. Actual type: INT64
Изменения типа данных столбца дня в BIGINT или STRING оставляет Сообща ошибку же.
Даже когда я изменить тип столбца дня в Impala в STRING и установить --map-колонная яву "день = String" (также пытался день = Integer и Long) в sqoop я получаю:
Expected type: INT32. Actual type: BYTE_ARRAY in Impala
Я также попытался установить mapDateToTimestamp = false (и true) в строке подключения jdbc, но без эффекта
Каков способ преобразования MySQL DATE в Impala TIMESTAMP с sqoop при использовании паркетного файла (обратите внимание, что я не использую 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?
I Я не уверен, как использовать это в -map-column-java "day = ???", кстати. Строка производит BYTE_ARRAY в Импале. – Abdul
Действительно. Impala использует INT96 для TIMESTAMP, но sqoop не использует это сопоставление (только для INT64), а java не поддерживает INT96, поэтому нет возможности переопределить отображение – Abdul