Использовать результат одного запроса в качестве условия в другом запросе с использованием куста - PullRequest
0 голосов
/ 25 сентября 2019

Я хотел бы использовать информацию из одной таблицы в качестве входных данных для другого запроса.

запрос (требуется вывод):

SELECT * from maintable where year in ('2005','2006','2007','2008');

У меня есть список этих лет в отдельной таблице,Прикрепленное изображение. Этот запрос дает мне ошибки:

SELECT * from maintable where year in (SELECT * from picture_table) sub_data;

Любая помощь высоко ценится.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Вы забыли указать псевдоним для maintable:

 SELECT * from maintable a where a.year in (SELECT year from picture_table);
0 голосов
/ 25 сентября 2019

Есть несколько способов реализовать это в Hive.

  1. Использование предложения IN: если в таблице изображений есть уникальный год , то вам не нужно использовать DISTINCT во внутреннем запросе.

SELECT * FROM maintable a where a.year IN (SELECT year FROM picture_table);

Если столбец year не уникален в picture_tale, используйте ключевое слово DISTINCT:

SELECT * FROM maintable a where a.year IN (SELECT DISTINCT year FROM picture);

Использование WHERE EXISTS предложение:

SELECT * FROM maintable a WHERE EXISTS (SELECT 1 FROM picture_table b WHERE a.year = b.year);

Использование JOIN:

SELECT a.* FROM maintable a INNER JOIN picture_table b ON (a.year = b.year) WHERE b.year IS NOT NULL;

Преимущество использования предложений IN и joins состоит в том, что любая из таблиц достаточно мала для кэшированияв распределенном кеше запрос будет продвигаться как map join (при условии, что свойство hive.auto.convert.join=true).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...