Не удалось вставить в HDFS из таблицы HIVE с помощью INSERT OVERWRITE DIRECTORY

Моя основная потребность - загрузить файл в HDFS из HIVE с помощью утилиты INSERT OVERWRITE. В этом запросе я пытаюсь объединить 3 таблицы улья. Ниже приводится запрос:

select * FROM 
    AGG_CUSTOMER_EXPSR_DRV_HIVE DRV 
LEFT OUTER JOIN 
    AGG_CUSTOMER_EXPSR_SRC_HIVE SRC 
ON 
    (SRC.CUSTOMER_ID = DRV.CUSTOMER_ID) 
    AND (SRC.AGGREGATION_LEVEL_CD = DRV.AGGREGATION_LEVEL_CD) 
    AND (SRC.PRODUCT_GROUP_CD = DRV.PRODUCT_GROUP_CD) AND (SRC.SRC_SYS_CD = DRV.SRC_SYS_CD) 
LEFT OUTER JOIN 
    ALTERNATE_IP_HIVE AIP1 
ON 
    (DRV.DERIVED_CUSTOMER_ID = AIP1.IP_ID) AND (AIP1.IP_TYPE_CD IN (1, 4)) 
LEFT OUTER JOIN 
    ALTERNATE_IP_HIVE AIP3 
ON 
    (SRC.FINANCIAL_RPTNG_UNIT_ID = AIP3.IP_ID) AND (AIP3.IP_TYPE_CD = 3) 
WHERE EXCLUDE_IND ='N';

Но я получаю сообщение об ошибке, как показано ниже: -sh: syntax error near unexpected token (`

Может ли кто-нибудь помочь мне разобраться в проблеме?

Примечание. Я удалил поля в предложении SELECT.


person Jomy    schedule 15.07.2014    source источник


Ответы (1)


если вы создали таблицу в улье с количеством полей результатов из приведенного выше sql, вы можете просто сделать как

INSERT OVERWRITE TABLE <database_name.your_created_table_name> SELECT * FROM 
    AGG_CUSTOMER_EXPSR_DRV_HIVE DRV 
LEFT OUTER JOIN 
    AGG_CUSTOMER_EXPSR_SRC_HIVE SRC 
ON 
    (SRC.CUSTOMER_ID = DRV.CUSTOMER_ID) 
    AND (SRC.AGGREGATION_LEVEL_CD = DRV.AGGREGATION_LEVEL_CD) 
    AND (SRC.PRODUCT_GROUP_CD = DRV.PRODUCT_GROUP_CD) AND (SRC.SRC_SYS_CD = DRV.SRC_SYS_CD) 
LEFT OUTER JOIN 
    ALTERNATE_IP_HIVE AIP1 
ON 
    (DRV.DERIVED_CUSTOMER_ID = AIP1.IP_ID) AND (AIP1.IP_TYPE_CD IN (1, 4)) 
LEFT OUTER JOIN 
    ALTERNATE_IP_HIVE AIP3 
ON 
    (SRC.FINANCIAL_RPTNG_UNIT_ID = AIP3.IP_ID) AND (AIP3.IP_TYPE_CD = 3) 
WHERE EXCLUDE_IND ='N';

из SELECT это ваш запрос. Вы можете проверить этот URL для получения дополнительной помощи по hiveql.

person Rajen Raiyarela    schedule 15.07.2014
comment
Извините ... Моя ошибка ... Я попытался запустить запрос INSERT OVERWRITE в командной строке HIVE, и теперь он работает нормально. Но оператор Ниже CASE вызывает проблему: - person Jomy; 15.07.2014
comment
СЛУЧАЙ, КОГДА (DRV.AGGREGATION_LEVEL_CD = 1) ТОГДА, КОГДА (SUBSTR (AIP1.SRC_SYS_UNIQUE_KEY_TXT, 1, (INSTR (AIP1.SRC_SYS_UNIQUE_KEY_TXT, '~', 1, 1) - 1) NOT , (INSTR (AIP1.SRC_SYS_UNIQUE_KEY_TXT, '~', 1, 1) - 1)) FAILED: SemanticException [Ошибка 10015]: строка 1: 1125 Несоответствие длины аргументов '1': функция INSTR принимает ровно 2 аргумента. WHEN ('') THEN '' ELSE NULL END ELSE '' END AS OVERRIDE_FAMILY_CUSTOMER_SRC_SYS_CD, - person Jomy; 15.07.2014
comment
Можете ли вы поделиться своим полным запросом, а также указать, с какой проблемой вы столкнулись - person Rajen Raiyarela; 15.07.2014
comment
На самом деле моя проблема заключалась в том, что я не мог использовать JOIN при импорте таблицы из HIVE в HDFS через INSERT OVERWRITE DIRECTORY. Запрос, который я использовал в вышеупомянутом INSERT, имеет INSTR, SUBSTR, NOT NULL, и проблема связана с синтаксисом INSTR. Мне не было известно о различии синтаксиса INSTR между SQL и HIVE-QL. Теперь все работает нормально. - person Jomy; 15.07.2014
comment
рад, что у вас все работает. если возможно, просто отредактируйте свой вопрос и поместите свое решение с комментариями, чтобы в случае, если кто-то проверит этот пост, он станет им полезен. - person Rajen Raiyarela; 15.07.2014
comment
в обычном SQL мы можем передать 2,3 аргумента в INSTR, но в HIVE-QL мы можем передать только 2 аргумента. Любое большее, чем это, вызовет ошибку. instr (string str, string substr) - ›› Возвращает позицию первого вхождения substr в str locate (string substr, string str [, int pos]) - ››  Возвращает позицию первого вхождения substr в str после позиции pos - person Jomy; 15.07.2014