как получить новую запись для размещения основной таблицы из временной таблицы - PullRequest
0 голосов
/ 13 марта 2019

Я новичок в Hive. У меня есть главная таблица t1 и временная таблица t2. Временная таблица загружается входящими данными каждый день. Поступающие данные могут быть обновлены записи, а также новые записи.

table t2(temp):               table t1(main)
id   name                      id      name
1   vinni                      1       vikki
3   anna                       2       amita

Я хочу, чтобы в моей главной таблице были старые записи, обновленные записи из временной таблицы и новые записи из временной таблицы.

В моей главной таблице должны быть записи, подобные приведенным ниже:

id  name
1   vinni
2   amita
3   anna

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

1 Ответ

0 голосов
/ 13 марта 2019

Вы можете сделать это с объединением двух таблиц, а затем выбрать обновленные записи для уже существующих идентификаторов, например,

with union_table as (
  select *, 0 as new_flag from t1
  union all
  select *, 1 as new_flag from t2
),
stage_table as (
  select *, max(new_flag) over (partition by id) as max_flag
    from union_table
),
stage_table2 as (
  select id, name, new_flag
    from stage_table
   where new_flag = max_flag
)
select id, name
  from stage_table2

Windowing max поможет вам выяснить, нужно ли заменить конкретный идентификатор наобновленное значение

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