inserts for each partition
Меня смущает это for each partition. К чему конкретно это относится?
CREATE TABLE test_table
( A Int64, B UInt32 )
ENGINE = MergeTree
ORDER BY A PARTITION BY A SETTINGS non_replicated_deduplication_window = 2;
INSERT INTO test_table SETTINGS insert_deduplication_token = '0' VALUES (0, 0);
INSERT INTO test_table SETTINGS insert_deduplication_token = '1' VALUES (1, 0);
INSERT INTO test_table SETTINGS insert_deduplication_token = '2' VALUES (2, 0);
-- Судя по доке это так же должно дедуплицироваться
INSERT INTO test_table SETTINGS insert_deduplication_token = '0' VALUES (0, 0);
SELECT *
FROM test_table
FORMAT CSVWithNames
-- по факту же, только deduplication_window =2 отрабатывает, а for each partition - нет
"A","B"
1,0
0,0
2,0
0,0
в доке дословно For the replicated tables by default the only 100 of the most recent inserts for each partition are deduplicated (see replicated_deduplication_window, replicated_deduplication_window_seconds). For not replicated tables see non_replicated_deduplication_window. each partition это относится к PARTITION BY при создании таблицы... у вас таблица PARTITION BY A соответсвенно у вас если один INSERT в две партиции пишет, то будет я так понял два парта будут созданы и по последних 100 контрольных сумм ПАРТА (не партиции) для каждой партции будут запомнены... чтобы если повторно придет такой же кусок (парт) то не вставлять ну и сам механизм этого токена, если он задействован, то он будет использоваться вместо сравнения с контрольной суммой партов... https://fiddle.clickhouse.com/6229a421-0bea-48af-9128-3723c43508f6 посмотрите внимательно на второй и четвертый INSERT
Хмм, спасибо, ладно еще поковыряю > то он будет использоваться вместо... Ага, за этим я в сурсы сходил
Обсуждают сегодня