как избежать дублирования записей в улье?

Создайте таблицу с первичным ключом в Hive. Вставьте одинаковую запись данных несколько раз.

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

drop table t1;

CREATE TABLE IF NOT EXISTS `t1` (
`ID`        BIGINT DEFAULT SURROGATE_KEY(),
`Name`      STRING NOT NULL DISABLE NOVALIDATE,
CONSTRAINT `PK_t1` PRIMARY KEY (`ID`) DISABLE NOVALIDATE);

select * from t1;
+--------+----------+
| t1.id  | t1.name  |
+--------+----------+
+--------+----------+

insert into t1 values (1, "Hi");
insert into t1 values (1, "Hi");
insert into t1 values (1, "Hi");

select * from t1;
+--------+----------+
| t1.id  | t1.name  |
+--------+----------+
| 1      | Hi       |
| 1      | Hi       |
| 1      | Hi       |
+--------+----------+

Я безуспешно пытался выполнить слияние: MERGE INTO t1 USING (select * from t1) sub ON sub.id != t1.id
КОГДА не совпадают, вставьте значения (2, «Мир»);


person debo    schedule 30.03.2020    source источник
comment
Использование UNION ALL + row_number или использование FULL JOIN: stackoverflow.com/a/44755825/2700344   -  person leftjoin    schedule 30.03.2020
comment
Непонятно, как это должно быть реализовано, потому что ссылка использует 2 таблицы. У меня есть (частичное) решение: СЛИЯТЬСЯ С t1 ИСПОЛЬЗОВАНИЕМ (ВЫБЕРИТЕ 1 КАК id, привет, КАК имя) sub ON sub.id = t1.id, КОГДА не соответствует, затем вставьте значения (1, привет); Недостатком является то, что данные необходимо вводить дважды. Вы можете избежать этого?   -  person debo    schedule 30.03.2020
comment
Да, два стола. Одна таблица (новые данные) может быть подзапросом или CTE   -  person leftjoin    schedule 30.03.2020