Эффективное соединение в улье без условия ИЛИ - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужно присоединить таблицу географических регионов к таблице пользователя в Hive. географический регион может быть на уровне страны, штата или города. Когда географический регион находится на уровне округа, мне нужно выбрать все списки в этом округе и так далее. Моя версия улья не позволяет ИЛИ в состоянии соединения.

Какой самый эффективный способ написать этот запрос?

Например,

Таблица регионов

region_id , city, state, country
1,  Rome, NULL , IT
2, NULL, NULL, BM
3, VANCOUVER, BC, CA

Таблица пользователей

user_id, city , state, country
103 , VANCOUVER , BC , CA
105 , HAMILTON, NULL, BM
106 , NULL, NULL, BM

Таблица результатов

region_id, user_id, city, state, country
3, 103 , VANCOUVER , BC , CA
2, 105 , HAMILTON, NULL, BM
2, 106 , NULL, NULL, BM

1 Ответ

0 голосов
/ 19 ноября 2018

Ну, это может быть не так эффективно, как хотелось бы, но это должно сработать:

SELECT DISTINCT
    coalesce(cty.region_id, sta.region_id, cou.region_id) as region_id, u.*
FROM users u
LEFT JOIN regions cty ON u.city = cty.city
LEFT JOIN regions sta ON u.state = sta.state
LEFT JOIN regions cou ON u.ccountyity = cou.county

и альтернативой будет:

SELECT
    r.region_id
  , u.*
FROM users u
INNER JOIN (
        SELECT
            regions.region_id, users.user_id
        FROM users
        INNER JOIN regions ON users.city = regions.city
        UNION
        SELECT
            regions.region_id, users.user_id
        FROM users
        INNER JOIN regions ON usesr.state = regions.state
        UNION
        SELECT
            regions.region_id, users.user_id
        FROM users
        INNER JOIN regions ON users.ccounty = regions.county
    ) r ON u.users_id = r.users_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...