2016-01-18 4 views
2

Я пытался запустить запрос, как это на улье (версия 1.2.1):Hive: Multiple In-элементов с одним подзапроса

DELETE FROM работника при е WHERE (e.id, e.name) IN (SELECT emp.id, emp.name FROM employee_final emp) И e.sno = 120;

Но поскольку улья не поддерживает эту конструкцию, так что я попытался это:

DELETE FROM WHERE сотрудника идентификатора (SELECT emp.id FROM employee_final AS ого) И имя IN (SELECT ого. имя FROM employee_final AS emp)
И e.sno = 120;

Но, кажется, есть ограничение в улье и поддерживает только один подзапрос, и я получаю исключение, как этот

Сообщение об ошибке: Грамматический неправильно SQL запросов:]; Вложенное исключение - org.apache.hive.service.cli.HiveSQLException: Ошибка при компиляции оператора: FAILED: SemanticException [Ошибка 10249]: Строка 1: 185 Неподдерживаемая SubQuery Expression 'name': поддерживается только 1 выражение SubQuery.

Что является наиболее эффективным способом решения этой проблемы.

ответ

0

Вы можете попробовать следующие

  1. через СУЩЕСТВУЕТ Я не уверен, что эта форма подзапроса поддерживается в улей.

    DELETE FROM employee as e WHERE EXISTS (SELECT 1 FROM employee_final emp where e.id = emp.id and e.name = emp.name) AND e.sno = 120 ; 
    
  2. через функцию CONCAT

    DELETE FROM employee as e WHERE concat (e.id, '#' ,e.name) IN (SELECT concat (emp.id,'#' ,emp.name) FROM employee_final emp) AND e.sno = 120 ; 
    
+0

функция CONCAT полезно только в том случае, когда один из столбцов является первичным ключом таблицы. Это гарантирует уникальность. –

+0

Вам не нужен первичный ключ для того же – Sanjiv

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