2016-01-08 4 views
0

Я импортирую данные с 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?

ответ

0

Похоже, единственный способ заключается в использовании --map-column-java "day=String" и либо иметь этот столбец, как струна в Impala и использовать cast() функции для запросов с днем ​​или использовать временную таблицу ,

0

Вы попробовали INT96? также я думаю, что вы не будете в состоянии преобразовать TINYINT, столбец SMALLINT в BIGINT

+0

I Я не уверен, как использовать это в -map-column-java "day = ???", кстати. Строка производит BYTE_ARRAY в Импале. – Abdul

+0

Действительно. Impala использует INT96 для TIMESTAMP, но sqoop не использует это сопоставление (только для INT64), а java не поддерживает INT96, поэтому нет возможности переопределить отображение – Abdul

0

Usally, что мы следуем в то время как мы импортируем из совка или другой внешней системы все тип данных будут по умолчанию строки (посадки) после посадки мы будем использовать

from_unixtime(unix_timestamp(<datecol>,yyyyMMdd'),'yyyy-MM-dd') 

Для преобразования в Impala конкретных TIMESTAMP

Смежные вопросы