2013-03-26 4 views
2

Я импортирую таблицу из mysql в hive используя Sqoop. Некоторые столбцы кодируются латинским. Есть ли способ сделать это:Кодирование столбцов в Hive

  1. Установите кодировку для этих столбцов как latin1 в Hive. OR
  2. Преобразование столбцов в utf-8 при импорте с помощью sqoop?

ответ

1

Оказалось, что проблема не связана. Столбец отлично работает независимо от кодировки ... но схема таблицы была изменена в mysql. Я предположил, что, поскольку я передаю флаг перезаписи, sqoop переделывает таблицу каждый раз в Улье. Не так! Изменения схемы в mysql не передавались в Hive, поэтому данные в столбце md5 были фактически данными из другого столбца.

«Исправление», на котором мы остановились, было перед каждой проверкой импорта sqoop для изменений схемы, и если произошли изменения, отбросьте таблицу и повторно импортируйте. Это приводит к обновлению схемы в Hive.

Edit: моя оригинальная команда sqoop было что-то вроде:

sqoop import --connect jdbc:mysql://HOST:PORT/DB --username USERNAME --password PASSWORD --table uploads --hive-table uploads --hive-import --hive-overwrite --split-by id --num-mappers 8 --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N' 

Но теперь я вручную выдать drop table uploads в улей первый, если изменения схемы.

+0

Было бы здорово добавить вашу полную команду Sqoop, добавленную в ответ выше. – AvkashChauhan

+0

Хорошо, сделано! Надеюсь, поможет. –

2

В Hive -default-character-set используется для установки набора символов для всей базы данных, не относящегося к нескольким столбцам. Мне не удалось найти параметр Sqoop, который будет преобразовывать столбцы таблиц в utf-8 во фланге, а столбцы должны установить фиксированный тип.

$ sqoop import --connect jdbc:mysql://server.foo.com/db --table bar \ 
--direct -- --default-character-set=latin1 

Я считаю, что вам нужно будет преобразовать столбцы Latin1 в UTF-8 первым в своем MySql, а затем вы можете импортировать из Sqoop. Вы можете использовать следующий скрипт для преобразования всех столбцов в utf-8, который я нашел here.

mysql --database=dbname -B -N -e "SHOW TABLES" | \ 
awk '{print "ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE \ 
utf8_general_ci;"}' | mysql --database=dbname & 
+0

Спасибо! Но проблема оказалась чем-то другим ... см. Мой ответ. –

+0

Я пытаюсь ответить на основе первоначально сообщенного вопроса. Не верьте, что маркировка «-ve» подходит для исходного ответа. – AvkashChauhan

+0

Согласен! Я не знаю, кто тебя убивает. –

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