Согласно документации Hive он поддерживает подзапросы NOT IN
в предложении WHERE
, при условии, что подзапрос является некоррелированным подзапросом (не ссылается на столбцы из основного запроса).
Однако, когда я пытаюсь выполнить приведенный ниже тривиальный запрос, я получаю сообщение об ошибке FAILED: SemanticException Cartesian products are disabled for safety reasons.
-- sample data
CREATE TEMPORARY TABLE foods (name STRING);
CREATE TEMPORARY TABLE vegetables (name STRING);
INSERT INTO foods VALUES ('steak'), ('eggs'), ('celery'), ('onion'), ('carrot');
INSERT INTO vegetables VALUES ('celery'), ('onion'), ('carrot');
-- the problematic query
SELECT *
FROM foods
WHERE foods.name NOT IN (SELECT vegetables.name FROM vegetables)
Обратите внимание, что если я использую предложение IN
вместо предложения NOT IN
, оно на самом деле работает нормально, что вызывает недоумение, поскольку структура оценки запроса в обоих случаях должна быть одинаковой.
Есть ли обходной путь для этого или другой способ фильтрации значений из запроса на основе их присутствия в другой таблице?
Это Hive 2.3.4, работающий в кластере Amazon EMR.