Hive LATERAL VIEW и WHERE, используя подзапрос

Я ищу способ оптимизировать мой запрос.

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

Я хотел бы выбрать все события, которые соответствуют результату запроса, который выбирает нужные теги.

Моя первая попытка:

SELECT uuid, app_properties, tag
FROM events
LATERAL VIEW explode(split(app_properties, '(, |,)')) tag_table AS tag
WHERE tag IN (SELECT source_value FROM mapping WHERE indicator = 'Bandwidth Usage')

Но Улей не допустит этого...

FAILED: SemanticException [Error 10249]: Line 4:6 Unsupported SubQuery Expression 'tag': Correlating expression cannot contain unqualified column references.

Дали еще одну попытку, заменив WHERE tag IN от WHERE tag_table.tag IN но не удача...

FAILED: SemanticException Line 4:6 Invalid table alias tag_table' in definition of SubQuery sq_1 [tag_table.tag IN (SELECT source_value FROM mapping WHERE indicator = 'Bandwidth Usage')] used as sq_1 at Line 4:20,

В конце концов... Запрос ниже дает желаемый результат, но я чувствую, что это не самый оптимизированный способ решения этого варианта использования. Кто-нибудь сталкивался с тем же случаем, когда вам нужно выбрать из LATERAL VIEW используя Sub query?

SELECT to_date(substring(events.time, 0, 10)) as date, t2.code, t2.indicator, count(1) as total
FROM events
LEFT JOIN (
    SELECT distinct t.uuid, im.code, im.indicator
    FROM mapping im
    RIGHT JOIN (
      SELECT tag, uuid
      FROM events
      LATERAL VIEW explode(split(app_properties, '(, |,)')) tag_table AS tag
      ) t
    ON im.source_value = t.tag AND im.indicator = 'Bandwidth Usage'
    WHERE im.source_value IS NOT NULL
) t2 ON (events.uuid = t2.uuid)
WHERE t2.code IS NOT NULL
GROUP BY to_date(substring(events.time, 0, 10)), t2.code, t2.indicator;

1 ответ

Подзапрос Hive в предложении WHERE может использоваться с IN, NOT IN, EXIST или NOT EXIST следующим образом. Если псевдоним (см. Следующий пример для таблицы employee) не указан перед столбцами (name) в условии WHERE, Hive сообщит об ошибке Корреляционное выражение не может содержать неквалифицированных ссылок на столбцы. Это ограничение подзапроса Hive.

Из Apache Hive Essentials.

Я думаю, что эта проблема также вызвана подзапросом. события должны иметь псевдоним

Другие вопросы по тегам