Ошибка при создании таблицы с Sqoop - PullRequest
0 голосов
/ 12 мая 2011

Я хочу создать схему таблицы в Hive, используя "sqoop create-hive-table".Моя БД - Oracle Database 10g Enterprise Edition 10.2.0.4.0, я использую sqoop-1.2.0-cdh3u0 и hive-0.7.0-cdh3u0.Данные для последующей загрузки в таблицу Hive уже находятся в HDFS, и я бы предпочел, чтобы метаданные таблицы создавались автоматически с помощью sqoop & hive, а не создавались вручную и затем загружались данные.

Вот командаЯ выполняю:

$ sqoop create-hive-table --connect jdbc:oracle:thin:@//dbserver:1521/masterdb
        --username myuser --table DBFUNC1.R1_EVOLUTION
        --fields-terminated-by ',' -P

И получаю следующую ошибку:

11/05/12 11:33:11 INFO hive.HiveImport: Загрузка загруженных данных в Hive

11/05/12 11:33:12 INFO manager.OracleManager: для часового пояса установлено GMT 11/05/12

11: 33: 12 INFO manager.SqlManager: Выполнение инструкции SQL: ВЫБРАТЬ t. * ИЗ BFUNC1.R1_EVOLUTION t ГДЕ 1 = 0

11/05/12 11:33:14 ИНФОРМАЦИЯ hive.HiveImport: Файл истории кустов = / tmp / edjatsay / hive_job_log_edjatsay_201105121133_1466429457.xt

11/05/12 11:33:14 INFO hive.HiveImport: FAILED: Ошибка разбора: строка 1:58 не соответствует входу ')', ожидающий идентификатор в спецификации столбца

11/ 05/12 11:33:14 INFO hive.HiveImport:

11/05/12 11:33:14 ERROR tool.CreateHiveTableTool: Обнаружено исключение IOException, выполняющее задание создания таблицы: java.io.IOException: Hive завершился со статусом 11

Вот схема таблицы в БД:

SQL> describe BFUNC1.R1_EVOLUTION;

OWNER_ID          NOT NULL NUMBER(38)    
AI_CODE           NOT NULL CHAR(3) 
TA_NUMBER         NOT NULL NUMBER(38)   
RULE              NOT NULL CHAR(4)
F_CLASS           NOT NULL CHAR(8)      
EVOLUTION_ID      NOT NULL NUMBER(38)
CREATION_MODIFID   NUMBER(38)
DISC_MODIFID       NUMBER(38)

CREATION_DATETIME   CHAR(19)
ENDED_DATETIME      CHAR(19)
EVOLUTION_STATE     CHAR(1)     

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Я наконец решил эту проблему, импортировав импорт одной строки моей таблицы с помощью sqoop с параметром --hive-import.Это команда, которую я использовал:

$ sqoop import --connect jdbc:oracle:thin:@//dbserver:1521/masterdb --username myuser --table DBFUNC1.R1_EVOLUTION --where 'rownum=1' --verbose -P

Затем я просто удалил ранее импортированную строку и загрузил вручную данные, которые у меня уже были в HDFS.Цель этого состояла в том, чтобы позволить Hive угадать и автоматически создать метаданные.Я приказываю выполнить весь процесс в общем сценарии.

0 голосов
/ 29 ноября 2017

Ниже приведен запрос импорта sqoop, который я использую в своем проекте:

oracle_connection.txt будет содержать информацию о соединении.

sqoop --options-file  oracle_connection.txt \
--table $DATABASE.$TABLENAME \
-m $NUMMAPPERS  \
--where "$CONDITION" \
--hive-import \
--map-column-hive "$COLLIST" \
--create-hive-table \
--hive-drop-import-delims \
--split-by $SPLITBYCOLUMN  \
--hive-table $HIVEDATABASE.$TABLENAME \
--bindir sqoop_hive_rxhome/bindir/ \
--outdir sqoop_hive_rxhome/outdir 
...