2016-07-14 1 views
0

Я пытался импортировать таблицу MySQL в улье с Sqoop v1.4Как указать разделитель полей при импорте MySQL в Hive с Sqoop?

sqoop import --connect jdbc:mysqll//localhost:3306/mysqldb \ 
--username user --password pwd --table mysqltbl \ 
--hive-import --hive-overwrite \ 
--hive-table hivedb.hivetbl -m 1 \ 
--null-string '\\N' \ 
--null-non-string '\\N' \ 

Есть 100 строк в mysqltbl, где один из полей text содержит \t и \n, в результате чего Sqoop анализировать данные неправильно, т.е. были более 100 строк в hivetbl, и поля не были выровнены.

Вместо вызова специальных символов в MySQL, как указать разделители полей и записей в Sqoop?

+0

Вы можете использовать orc, паркет или avro вместо простого текстового формата. – fi11er

ответ

2

Вы используете --hive-import, он создаст таблицу улья для вас ЕСЛИ НЕ СУЩЕСТВУЕТ. Он будет создавать с по умолчанию разделителя улья - поля, заканчивающиеся: CTRL A и линии останавливала: \n

В соответствии с дрелью docs:

Даже если Hive поддерживает экранирование символов, он не обрабатывает спасаясь от новый- линейный символ.

улей будет иметь проблемы с использованием Sqoop-импортированные данных, если строки вашей базы данных содержат строковые поля, которые имеют строки по умолчанию разделителей ульи (\n и \r символов) или разделители столбцов (\01 символов), присутствующие в них. Вы можете использовать опцию --hive-drop-import-delims, чтобы удалить эти символы при импорте, чтобы предоставить текстовые данные, совместимые с Hive. Кроме того, вы можете использовать опцию --hive-delims-replacement, чтобы заменить эти символы на пользовательскую строку при импорте, чтобы предоставить совместимые с Hive текстовые данные.

Вы можете просто использовать --hive-drop-import-delims в своем запросе и он упадет \n.

sqoop import --connect jdbc:mysqll//localhost:3306/mysqldb \ 
--username user --password pwd --table mysqltbl \ 
--hive-import --hive-overwrite \ 
--hive-table hivedb.hivetbl -m 1 \ 
--hive-drop-import-delims \ 
--null-string '\\N' \ 
--null-non-string '\\N' \ 

Если вы хотите заменить свою собственную строку (скажем, пространство, т.е. "«), вы можете использовать --hive-delims-replacement.

sqoop import --connect jdbc:mysqll//localhost:3306/mysqldb \ 
--username user --password pwd --table mysqltbl \ 
--hive-import --hive-overwrite \ 
--hive-table hivedb.hivetbl -m 1 \ 
--hive-delims-replacement " " \ 
--null-string '\\N' \ 
--null-non-string '\\N' \ 

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

  • Нет связанных вопросов^_^