Модель Duplicate Key
Модель Duplicate Key — это модель таблиц по умолчанию в Doris. Она сохраняет каждую исходную запись без дедупликации и агрегации. При создании таблицы используйте ключевое слово DUPLICATE KEY, чтобы задать столбцы сортировки для хранения данных и оптимизировать типичные запросы. Обычно рекомендуется выбирать не более трёх столбцов в качестве ключа сортировки. Подробнее о выборе столбцов сортировки см. в разделе Ключ сортировки.
Сценарии применения
В модели Duplicate Key данные обычно только добавляются, а старые данные не обновляются. Она подходит для сценариев, в которых нужно хранить исходные данные в полном объёме:
- Хранение журналов: используется для хранения различных журналов работы программ, например журналов доступа и ошибок. Каждая запись должна сохраняться полностью для последующего аудита и анализа.
- Данные о поведении пользователей: при анализе поведения пользователей, например данных о кликах и истории посещений, необходимо сохранять подробные сведения об их действиях для последующего построения профилей пользователей и детального анализа последовательностей действий.
- Данные о транзакциях: при хранении сведений о транзакциях или заказах данные обычно не изменяются после завершения транзакции. Модель Duplicate Key позволяет сохранять такую информацию без потери записей, что упрощает точную сверку транзакций.
Основные особенности
У модели Duplicate Key есть три основные особенности:
| Особенность | Описание |
|---|---|
| Сохранение исходных данных | Сохраняет все исходные данные и подходит для их хранения и выполнения запросов к ним. В сценариях, требующих подробного анализа данных, модель Duplicate Key позволяет избежать риска потери данных. |
| Отсутствие дедупликации и агрегации | В отличие от моделей Aggregate Key и Unique Key, модель Duplicate Key не выполняет дедупликацию или агрегацию данных. Даже если две строки идентичны, при каждой вставке обе сохраняются полностью. |
| Гибкие запросы к данным | Поскольку все исходные данные сохраняются, можно извлекать подробные сведения из полного набора данных и выполнять агрегацию по любому измерению на основе всего набора, что позволяет проводить аудит метаданных и детальный анализ. |
Синтаксис создания таблицы
При создании таблицы используйте ключевое слово DUPLICATE KEY, чтобы указать модель Duplicate Key и задать столбцы Key. В модели Duplicate Key столбцы Key используются только для сортировки и не обязаны быть уникальными.
В следующем примере создаётся таблица с моделью Duplicate Key для хранения журналов с сортировкой по трём столбцам: log_time, log_type и error_code:
CREATE TABLE IF NOT EXISTS example_tbl_duplicate
(
log_time DATETIME NOT NULL,
log_type INT NOT NULL,
error_code INT,
error_msg VARCHAR(1024),
op_id BIGINT,
op_time DATETIME
)
DUPLICATE KEY(log_time, log_type, error_code)
DISTRIBUTED BY HASH(log_type) BUCKETS 10;
Запись и хранение данных
В таблице с моделью Duplicate Key данные не подвергаются дедупликации или агрегации. Вставленные данные сохраняются как есть, а столбцы Key используются только как ключи сортировки.

Как показано на рисунке выше, изначально в таблице было 4 строки. После вставки ещё 2 строк все данные сохраняются в режиме APPEND, и в итоге остаётся 6 строк:
-- Write 4 rows of original data
INSERT INTO example_tbl_duplicate VALUES
('2024-11-01 00:00:00', 2, 2, 'timeout', 12, '2024-11-01 01:00:00'),
('2024-11-02 00:00:00', 1, 2, 'success', 13, '2024-11-02 01:00:00'),
('2024-11-03 00:00:00', 2, 2, 'unknown', 13, '2024-11-03 01:00:00'),
('2024-11-04 00:00:00', 2, 2, 'unknown', 12, '2024-11-04 01:00:00');
-- Append 2 more rows
INSERT INTO example_tbl_duplicate VALUES
('2024-11-01 00:00:00', 2, 2, 'timeout', 12, '2024-11-01 01:00:00'),
('2024-11-01 00:00:00', 2, 2, 'unknown', 13, '2024-11-01 01:00:00');
-- The query result shows that all 6 rows are retained
SELECT * FROM example_tbl_duplicate;
+---------------------+----------+------------+-----------+-------+---------------------+
| log_time | log_type | error_code | error_msg | op_id | op_time |
+---------------------+----------+------------+-----------+-------+---------------------+
| 2024-11-02 00:00:00 | 1 | 2 | success | 13 | 2024-11-02 01:00:00 |
| 2024-11-01 00:00:00 | 2 | 2 | timeout | 12 | 2024-11-01 01:00:00 |
| 2024-11-03 00:00:00 | 2 | 2 | unknown | 13 | 2024-11-03 01:00:00 |
| 2024-11-04 00:00:00 | 2 | 2 | unknown | 12 | 2024-11-04 01:00:00 |
| 2024-11-01 00:00:00 | 2 | 2 | unknown | 13 | 2024-11-01 01:00:00 |
| 2024-11-01 00:00:00 | 2 | 2 | timeout | 12 | 2024-11-01 01:00:00 |
+---------------------+----------+------------+-----------+-------+---------------------+