Подсчитать разницу между двумя таблицами по сложному ключу в Hive - PullRequest
0 голосов
/ 14 мая 2018

У меня есть две таблицы в Hive: внешняя (X) и управляемая (M) в Hive.Обе таблицы имеют одинаковые столбцы со сложными ключами (key_col_a, key_col_b).

Как подсчитать по сложным столбцам, сколько записей первой таблицы находится в другой таблице и сколько записей нет 't?

Я хочу подсчитать, сколько записей должно быть обновлено (те, которые имеют тот же сложный ключ в другой таблице) и сколько должно быть вставлено (те, которые имеют совершенно новые ключи, невиданные ранее)используя столбцы сложных ключей?

Это не работает для меня:

SELECT count(*)
FROM table_x tx
    LEFT JOIN table_m tm ON 
        tx.key_col_a = tm.key_col_a AND tx.key_col_b = tm.key_col_b
WHERE tm.key_col_a IS NULL OR tm.key_col_b IS NULL;

Может кто-нибудь объяснить, в чем проблема и как ее решить?

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Я бы сделал:

SELECT COUNT(*)
    ,id_a
    ,id_b
FROM tm
WHERE tm.id_a NOT IN (
        SELECT id_a
        FROM tx
        )
    OR tm.id_b NOT IN (
        SELECT id_b
        FROM tx
        )

, который даст вам количество пропущенных вхождений от tm на tx.

0 голосов
/ 14 мая 2018

Использование count() с case оператором:

SELECT count(case when tm.key_col_a is null     then 1 end) new_rows_cnt,
       count(tm.key_col_a)                                  updated_rows_cnt --counts not null
  FROM table_x tx
       LEFT JOIN table_m tm ON 
                 tx.key_col_a = tm.key_col_a AND tx.key_col_b = tm.key_col_b
;
0 голосов
/ 14 мая 2018

Вы фильтруете таблицу, которая left join ed, с where.Результат эквивалентен внутреннему соединению, поэтому результатов нет.Измените запрос на

SELECT count(case when tm.key_col_a IS NULL OR tm.key_col_b IS NULL then 1 end) as non_matches,
count(tm.key_col_a) as a_matches,
count(tm.key_col_b) as b_matches,
count(case when tm.key_col_a is not null and tm.key_col_b is not null then 1 end) as a_and_b_matches
FROM table_x tx
LEFT JOIN table_m tm ON tx.key_col_a = tm.key_col_a AND tx.key_col_b = tm.key_col_b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...