Ошибка при создании таблицы с помощью Sqoop

#oracle #hive #sqoop

#Oracle #улей #sqoop

Вопрос:

Я хочу создать схему таблицы в 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 amp; hive, а не создавались вручную и загружались данные впоследствии.

Вот команда, которую я выполняю :

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

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

05.11.12 11:33:11 ИНФОРМАЦИОННЫЙ улей.HiveImport: загрузка загруженных данных в Hive

05.11.12 11:33:12 ИНФОРМАЦИОННЫЙ менеджер.OracleManager: для часового пояса установлено значение GMT 11/05/12

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

05.11.12 11:33:14 ИНФОРМАЦИОННЫЙ куст.HiveImport: история улья file=/tmp/edjatsay/hive_job_log_edjatsay_201105121133_1466429457.txt

05.11.12 11:33:14 ИНФОРМАЦИОННЫЙ куст.HiveImport: СБОЙ: Ошибка синтаксического анализа: строка 1: 58 не соответствует вводимому ‘)’ ожидаемому идентификатору в спецификации столбца

05.11.12 11:33:14 ИНФОРМАЦИОННЫЙ куст.HiveImport:

05.11.12 11:33:14 Инструмент ДЛЯ УСТРАНЕНИЯ ОШИБОК.CreateHiveTableTool: Возникло исключение IOException при выполнении задания создания таблицы: java.io.Исключение IOException: Куст завершен со статусом 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)     
  

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

Ответ №1:

Я, наконец, решил эту проблему, импортировав одну строку моей таблицы с помощью 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 угадать и создать метаданные автоматически. Я хочу иметь возможность выполнять весь процесс в общем сценарии.

Ответ №2:

Ниже приведен запрос импорта 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