Как избежать дубликатов в таблице clickhouse? - PullRequest
0 голосов
/ 23 ноября 2018

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

CREATE TABLE sample.tmp_api_logs (id UInt32, EventDate Date) ENGINE = MergeTree (EventDate, id, (EventDate, id), 8192);

вставить в sample.tmp_api_logs значения (1, «2018-11-23»), (2, «2018-11-23»);вставить в sample.tmp_api_logs значения (1, '2018-11-23'), (2, '2018-11-23');

select * from sample.tmp_api_logs;┌─id─┬──EventDate─┐ │ 1 │ 2018-11-23 │ │ 2 │ 2018-11-23 │ └────┴────────────┘ ┌─id─┬──EventDate─┐ │ 1 │ 2018-11-23 │ │ 2 │ 2018-11-23 │ └────┴────────────┘

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Если необработанные данные не содержат дубликатов, и они могут появиться только при повторных попытках INSERT INTO, в есть репликация MergeTree .Чтобы это работало, вы должны повторить вставку одинаковых пакетов данных (один и тот же набор строк в том же порядке).Вы можете использовать разные реплики для этих повторных попыток, и блок данных будет вставлен только один раз, поскольку хэши блоков распределяются между репликами через ZooKeeper.

В противном случае вам следует выполнять дедупликацию данных перед вставкой в ​​ClickHouse или асинхронно очищать дубликаты с помощью ReplacingMergeTree или ReplicatedReplacingMergeTree .

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

Скорее всего ReplacingMergeTree - это то, что вам нужно, если дубликаты записей дублируют первичные ключи.Вы также можете попробовать другие MergeTree движки для большего количества действий при обнаружении реплицируемой записи.Ключевое слово FINAL может использоваться при выполнении запросов для обеспечения уникальности.

...