Как выполнить импорт Sqoop в сжатую многораздельную таблицу Hive из Oracle

Как выполнить импорт Sqoop из Oracle в Hive в сжатой таблице

Пробовал импортировать Sqoop из Oracle в Hive в текстовой секционированной таблице, и это сработало. Когда вы пытаетесь сделать то же самое в сжатой таблице (SNAPPY, ZLIB, BZIP2), при сжатии данных с помощью Sqoop с соответствующим кодеком, он создает файлы. Но при попытке выбрать через Hive я получаю сообщение об ошибке: Ошибка: java.io.IOException: java.lang.RuntimeException: не удалось создать разделение ORC с исключением: org.apache.orc.FileFormatException: искаженный файл ORC maprfs: /// envir ... / 2019/4/20190416 / part-m-00000.snappy. Неверный постскриптум. (состояние =, код = 0)

Тесты проходят следующим образом: - Создать таблицу - изменить файл параметров sqoop - запустить Sqoop - Изменить таблицу .. добавить раздел - попробовать выбрать, что приведет к ошибке

SQOOP: --delete-target-dir --target-dir "/environ..3/2019/4/20190416" --compression-codec "org.apache.hadoop.io.compress.BZip2Codec" --hive-table "... tmp_member3" --hcatalog-storage-stanza 'хранится как orc tblproperties ("orc.compress" = "BZIP2")' --hive-partition-key "'год', 'месяц', 'день'" --hive-partition-value "'2019', '4', '20190416'"

HIVE: СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ xx.tmp_member3 (a STRING, kpi_name STRING, b STRING, c STRING) РАЗДЕЛЕНА ПО (YEAR INT, MONTH INT, DAY INT) СТРОКА ФОРМАТИРОВАТЬ РАЗДЕЛЕННЫЕ ПОЛЯ, ЗАКОНЧЕННЫЕ ',' STORED AS ORC LOCATION '/ envir. ./2019/4/20190416 'TBLPROPERTIES (' orc.compress '=' BZIP2 ');

Я уже пробовал "set hive.exec.orc.split.strategy = BI", но безуспешно.


person Boris    schedule 21.05.2019    source источник


Ответы (1)


Я бы лично решил это в 2 этапа.

Первым будет получение данных из Oracle в обычную таблицу этапов текстового формата улья, а затем из этапа в таблицу орков улья с форматом сжатия в соответствии с вашими требованиями.

person Sagar Morakhia    schedule 21.05.2019
comment
Это добавляет дополнительный шаг. А дублирование данных в текстовой таблице - это большая трата места. Это то, чего я в первую очередь пытался избежать. В руководстве Sqoop сказано, что я должен это сделать. - person Boris; 22.05.2019
comment
Как только вы закончите со 2-м шагом, вы можете обрезать данные из 1-й таблицы. - person Sagar Morakhia; 22.05.2019
comment
Да, это вариант. Тем не менее, было бы неплохо иметь возможность делать то, что говорит Sqoop. Я подозреваю, что это всего лишь опция Sqoop. - person Boris; 23.05.2019