Возможности различных типов таблиц
Ключевые столбцы и ключ сортировки
| Таблица с Primary Key | Таблица с Duplicate Key | Таблица Aggregate | Таблица с Unique Key | |
|---|---|---|---|---|
| Ключевые столбцы и ограничения UNIQUE | Первичный ключ имеет ограничение UNIQUE и ограничение NOT NULL. | Duplicate key не имеет ограничения UNIQUE. | Aggregate key имеет ограничение UNIQUE. | Unique key имеет ограничение UNIQUE. |
| Логические связи между ключевыми столбцами и изменениями данных | Если значение первичного ключа новой строки данных совпадает с существующей строкой данных в таблице, происходит нарушение ограничения уникальности. Тогда новая строка данных заменит существующую строку данных. По сравнению с таблицей Unique Key, таблица Primary Key имеет улучшенный базовый механизм хранения и поэтому может заменить таблицу Unique Key. | Duplicate key не имеет ограничения UNIQUE. Поэтому, если значение Duplicate Key новой строки данных совпадает с существующей строкой данных в таблице, обе новая и старая строки данных сохраняются в таблице. | Если значение aggregate Key новой строки данных совпадает с существующей строкой данных в таблице, новая и старая строки данных будут агрегированы на основе aggregate key и агрегатных функций столбцов значений. | Если значение unique key новой строки данных совпадает с существующей строкой данных в таблице, новая строка данных заменит существующую строку данных. Таблицу Unique Key можно рассматривать как таблицу Aggregate, агрегатной функцией которой является replace. |
| Связь между ключевыми столбцами и ключом сортировки | Начиная с версии 1.5.0, ключ сортировки отделен от первичного ключа в таблице Primary Key. | Начиная с версии 1.5.0, таблицы Duplicate Key поддерживают указание ключей сортировки с помощью ORDER BY. Если используются и ORDER BY, и DUPLICATE KEY, то ORDER BY имеет приоритет. | Начиная с версии 1.5.0, ключ сортировки отделен от aggregate key в таблице Aggregate. Таблица Aggregate поддерживает указание ключа сортировки с помощью ORDER BY и указание aggregate key с помощью AGGREGATE KEY. Столбцы в ключе сортировки и aggregate key должны быть одинаковыми, но порядок столбцов не обязательно должен быть одинаковым. | Начиная с версии 1.5.0, ключ сортировки отделен от unique key в таблице Unique Key. Таблица Unique Key поддерживает указание ключа сортировки с помощью ORDER BY и указание unique key с помощью UNIQUE KEY. Столбцы в ключе сортировки и unique key должны быть одинаковыми, но порядок столбцов не обязательно должен быть одинаковым. |
| Типы данных, поддерживаемые ключевыми столбцами и ключом сортировки | Числовые (включая целые числа и BOOLEAN), строковые и дата (DATE и DATETIME). | Числовые (включая целые числа, BOOLEAN и DECIMAL), строковые и дата (DATE и DATETIME). | ||
| Связь между ключевыми столбцами и столбцами партиционирования/бакетирования | Столбцы партиционирования и бакетирования должны быть в первичном ключе. | Нет | Столбцы партиционирования и бакетирования должны быть в aggregate key. | Столбцы партиционирования и бакетирования должны быть в unique key. |
Типы данных ключевых столбцов и столбцов значений
Ключевые столбцы поддерживают следующие типы данных: числовые (включая целые числа, BOOLEAN и DECIMAL), строковые и дата (DATE и DATETIME).
примечание
Ключевые столбцы таблицы Primary Key не поддерживают тип данных DECIMAL.
С другой стороны, столбцы значений поддерживают базовые типы данных, включая числовые, строковые и дата (DATE и DATETIME). Поддержка BITMAP, HLL и полуструктурированных типов различается для столбцов значений разных типов таблиц, как подробно описано ниже:
| Таблица с Primary Key | Таблица с Duplicate Key | Таблица Aggregate | Таблица с Unique Key | |
|---|---|---|---|---|
| BITMAP | Поддерживается | Не поддерживается | Поддерживается. Агрегатные функции должны быть bitmap_union, replace или replace_if_not_null. | Поддерживается |
| HLL | Поддерживается | Не поддерживается | Поддерживается. Агрегатные функции должны быть hll_union, replace или replace_if_not_null. | Поддерживается |
| PERCENTILE | Поддерживается | Не поддерживается | Поддерживается. Агрегатные функции должны быть percentile_union, replace или replace_if_not_null. | Поддерживается |
| полуструктурированные типы данных:JSON/ARRAY/MAP/STRUCT | Поддерживается | Поддерживается | Поддерживается. Агрегатные функции должны быть replace или replace_if_not_null. | Поддерживается |
Изменение данных
| Таблица с Primary Key | Таблица с Duplicate Key | Таблица Aggregate | Таблица с Unique Key | |
|---|---|---|---|---|
| INSERT через загрузку данных | Поддерживается. Настройте __op=0 в задании загрузки для выполнения INSERT. Во внутренней реализации Selena рассматривает операции INSERT и UPDATE как операции UPSERT. | Поддерживается | Поддерживается (Строки данных с одинаковым значением aggregate Key будут агрегированы.) | Поддерживается (Строки данных с одинаковым значением unique key будут обновлены.) |
| UPDATE через загрузку данных | Не поддерживается | Поддерживается (Это можно достичь, используя replace в качестве агрегатной функции.) | Поддерживается (Саму таблицу Unique Key можно рассматривать как таблицу Aggregate, использующую агрегатную функцию replace.) | |
| DELETE через загрузку данных | Поддерживается. Настройте __op=1 в задании загрузки для выполнения DELETE. | Не поддерживается | ||
| Целостность значений столбцов данных для загрузки | По умолчанию необходимо загружать все значения столбцов. Однако, если включено частичное обновление столбцов (partial_update), или столбец имеет значение по умолчанию, не все значения столбцов нужно загружать. | По умолчанию необходимо загружать все значения столбцов. Однако, если столбец имеет значение по умолчанию, не все значения столбцов нужно загружать. | По умолчанию необходимо загружать все значения столбцов. Однако таблицы Aggregate могут достичь частичного обновления столбцов, указав агрегатные функции для столбцов значений как REPLACE_IF_NOT_NULL. Подробности см. в aggr_type. Также, если столбец имеет значение по умолчанию, не все значения столбцов нужно загружать. | По умолчанию необходимо загружать все значения столбцов. Однако, если столбец имеет значение по умолчанию, не все значения столбцов нужно загружать. |
| DML INSERT | Поддерживается | |||
| DML UPDATE |
| Не поддерживается | ||
| DML DELETE |
|
|
| |
Совместимость с другими функциями
| Таблица с Primary Key | Таблица с Duplicate Key | Таблица Aggregate | Таблица с Unique Key | ||
|---|---|---|---|---|---|
| Bitmap index/bloom filter index | Создание индексов на ключевых столбцах | Поддерживается | |||
| Создание индексов на столбцах значений | Поддерживается | Поддерживается | Не поддерживается | Не поддерживается | |
| Партиционирование/бакетирование | Партиционирование по выражениям/list partitioning | Поддерживается | |||
| Случайное бакетирование | Не поддерживается | Поддерживается начиная с версии 1.5.0 | Не поддерживается | Не поддерживается | |
| Материализованные представления | Асинхронные материализованные представления | Поддерживается | |||
| Синхронные материализованные представления | Не поддерживается | Поддерживается | Поддерживается | Поддерживается | |
| Другие функции | CTAS | Поддерживается | Поддерживается | Не поддерживается | Не поддерживается |
| Резервное копирование и восстановление | Поддерживается начиная с версии 1.5.0 | Поддерживается | |||