Есть несколько способов реализовать это в Hive.
- Использование предложения
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
).
Надеюсь, это поможет.