Перейти к основному содержимому

Обзор таблиц

Таблицы являются единицами хранения данных. Понимание структуры таблиц в Selena и способов проектирования эффективной структуры таблиц помогает оптимизировать организацию данных и повысить эффективность запросов. Кроме того, по сравнению с традиционными базами данных, Selena может хранить сложные полуструктурированные данные, такие как JSON, ARRAY, в столбцовом формате для улучшения производительности запросов.

Эта тема представляет структуру таблиц в Selena как с базовой, так и с общей точки зрения.

Начиная с версии 1.5.0, Selena поддерживает создание временных таблиц в Default Catalog.

Начало работы с базовой структурой таблиц

Как и в других реляционных базах данных, таблица логически состоит из строк и столбцов:

  • Строки: Каждая строка содержит запись. Каждая строка содержит набор связанных значений данных.
  • Столбцы: Столбцы определяют атрибуты для каждой записи. Каждый столбец содержит данные определенного атрибута. Например, таблица сотрудников может включать столбцы, такие как имя, ID сотрудника, отдел и зарплата, где каждый столбец хранит соответствующие данные. Данные в каждом столбце имеют одинаковый тип данных. Все строки в таблице имеют одинаковое количество столбцов.

Создать таблицу в Selena просто. Вам нужно только определить столбцы и их типы данных в операторе CREATE TABLE для создания таблицы. Пример:

CREATE DATABASE example_db;
USE example_db;
CREATE TABLE user_access (
uid int,
name varchar(64),
age int,
phone varchar(16),
last_access datetime,
credits double
)
ORDER BY (uid, name);

Приведенный выше пример CREATE TABLE создает таблицу Duplicate Key. К столбцам в этом типе таблиц не добавляется никаких ограничений, поэтому в таблице могут существовать дублирующиеся строки данных. Первые два столбца таблицы Duplicate Key указываются как столбцы сортировки для формирования ключа сортировки. Данные хранятся после сортировки на основе ключа сортировки, что может ускорить индексацию во время запросов.

Начиная с версии 1.5.0, таблица Duplicate Key поддерживает указание ключа сортировки с помощью ORDER BY. Если используются и ORDER BY, и DUPLICATE KEY, то DUPLICATE KEY не действует.

примечание

Если кластер Selena в промежуточной среде содержит только один BE, количество реплик может быть установлено в 1 в секции PROPERTIES, например PROPERTIES( "replication_num" = "1" ). Количество реплик по умолчанию равно 3, что также является рекомендуемым числом для производственных кластеров Selena. Если вы хотите использовать количество по умолчанию, вам не нужно настраивать параметр replication_num.

Выполните DESCRIBE для просмотра схемы таблицы.

MySQL [test]> DESCRIBE user_access;
+-------------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-------+---------+-------+
| uid | int | YES | true | NULL | |
| name | varchar(64) | YES | true | NULL | |
| age | int | YES | false | NULL | |
| phone | varchar(16) | YES | false | NULL | |
| last_access | datetime | YES | false | NULL | |
| credits | double | YES | false | NULL | |
+-------------+-------------+------+-------+---------+-------+
6 rows in set (0.00 sec)

Выполните SHOW CREATE TABLE для просмотра оператора CREATE TABLE.

MySQL [example_db]> SHOW CREATE TABLE user_access\G
*************************** 1. row ***************************
Table: user_access
Create Table: CREATE TABLE `user_access` (
`uid` int(11) NULL COMMENT "",
`name` varchar(64) NULL COMMENT "",
`age` int(11) NULL COMMENT "",
`phone` varchar(16) NULL COMMENT "",
`last_access` datetime NULL COMMENT "",
`credits` double NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`uid`, `name`)
DISTRIBUTED BY RANDOM
ORDER BY(`uid`, `name`)
PROPERTIES (
"bucket_size" = "4294967296",
"compression" = "LZ4",
"fast_schema_evolution" = "true",
"replicated_storage" = "true",
"replication_num" = "3"
);
1 row in set (0.01 sec)

Понимание комплексной структуры таблиц

Глубокое изучение структур таблиц Selena поможет вам спроектировать эффективную структуру управления данными, адаптированную под ваши бизнес-потребности.

Типы таблиц

Selena предоставляет четыре типа таблиц: таблицы Duplicate Key, таблицы Primary Key, таблицы Aggregate и таблицы Unique Key для хранения данных в различных бизнес-сценариях, таких как сырые данные, часто обновляемые данные реального времени и агрегированные данные.

  • Таблицы Duplicate Key просты и удобны в использовании. К столбцам в этом типе таблиц не добавляется никаких ограничений, поэтому в таблице могут существовать дублирующиеся строки данных. Таблицы Duplicate Key подходят для хранения сырых данных, таких как логи, которые не требуют никаких ограничений или предварительной агрегации.
  • Таблицы Primary Key мощные. К столбцам первичного ключа добавляются ограничения уникальности и NOT NULL. Таблицы Primary Key поддерживают частые обновления в реальном времени и частичные обновления столбцов, обеспечивая при этом высокую производительность запросов, и поэтому подходят для сценариев запросов в реальном времени.
  • Таблицы Aggregate подходят для хранения предварительно агрегированных данных, помогая уменьшить количество сканируемых и вычисляемых данных и повысить эффективность агрегационных запросов.
  • Таблицы Unique также подходят для хранения часто обновляемых данных реального времени. Однако этот тип таблиц заменяется таблицами Primary Key, которые более мощные.

Распределение данных

Selena использует двухуровневую стратегию распределения данных партиционирование+бакетирование для равномерного распределения данных по BE. Хорошо спроектированная стратегия распределения данных может эффективно уменьшить количество сканируемых данных и максимизировать возможности параллельной обработки Selena, тем самым повышая производительность запросов.

img

Партиционирование

Первый уровень - это партиционирование: Данные в таблицах могут быть разделены на более мелкие единицы управления данными на основе столбцов партиционирования, которые обычно являются столбцами, содержащими даты и время. Во время запросов обрезка партиций может уменьшить количество данных, которые необходимо сканировать, эффективно оптимизируя производительность запросов.

Selena предоставляет простой в использовании метод партиционирования - партиционирование по выражениям, а также предлагает более гибкие методы, такие как партиционирование по диапазону и списку.

Бакетирование

Второй уровень - это бакетирование: Данные внутри партиции дополнительно разделяются на более мелкие единицы управления данными через бакетирование. Реплики каждого бакета равномерно распределяются по BE для обеспечения высокой доступности данных.

Selena предоставляет два метода бакетирования:

  • Hash bucketing: Данные распределяются по бакетам на основе хеш-значений ключа бакетирования. Вы можете выбрать столбцы, часто используемые как столбцы условий в запросах, в качестве столбцов бакетирования, что помогает улучшить эффективность запросов.
  • Random bucketing: Данные случайно распределяются по бакетам. Этот метод бакетирования более простой и удобный в использовании.

Типы данных

В дополнение к базовым типам данных, таким как NUMERIC, DATE и STRING, Selena поддерживает сложные полуструктурированные типы данных, включая ARRAY, JSON, MAP и STRUCT.

Индексы

Индекс - это специальная структура данных, используемая как указатель на данные в таблице. Когда столбцы условий в запросах являются индексированными столбцами, Selena может быстро найти данные, соответствующие условиям.

Selena предоставляет встроенные индексы: Prefix indexes, Ordinal indexes и ZoneMap indexes. Selena также позволяет пользователям создавать индексы, то есть Bitmap indexes и Bloom Filter indexes, для дальнейшего повышения эффективности запросов.

Ограничения

Ограничения помогают обеспечить целостность, согласованность и точность данных. Столбцы первичного ключа в таблицах Primary Key должны иметь уникальные значения и NOT NULL. Столбцы ключа агрегации в таблицах Aggregate и столбцы уникального ключа в таблицах Unique Key должны иметь уникальные значения.

Временные таблицы

При обработке данных вам может потребоваться сохранить промежуточные результаты для будущего повторного использования. В ранних версиях Selena поддерживала только использование CTE (Common Table Expressions) для определения временных результатов в рамках одного запроса. Однако CTE являются лишь логическими конструкциями, не хранят результаты физически и не могут использоваться в разных запросах, что представляет определенные ограничения. Если вы выберете создание таблиц для сохранения промежуточных результатов, вам потребуется управлять жизненным циклом этих таблиц, что может быть затратным.

Для решения этой проблемы Selena вводит временные таблицы в версии 3.3.1. Временные таблицы позволяют временно хранить данные (такие как промежуточные результаты из ETL-процессов) в таблице, с их жизненным циклом, привязанным к сессии и управляемым Selena. Когда сессия заканчивается, временные таблицы автоматически очищаются. Временные таблицы видны только в текущей сессии, и разные сессии могут создавать временные таблицы с одинаковыми именами.

Использование

Вы можете использовать ключевое слово TEMPORARY в следующих SQL-операторах для создания и удаления временных таблиц:

примечание

Подобно другим типам нативных таблиц, временные таблицы должны создаваться в базе данных под Default Catalog. Однако, поскольку временные таблицы основаны на сессиях, они не подчиняются ограничениям уникального именования. Вы можете создавать временные таблицы с одинаковыми именами в разных сессиях или даже создавать временные таблицы с теми же именами, что и другие не временные, нативные таблицы.

Если в базе данных есть временные и не временные таблицы с одинаковыми именами, временная таблица имеет приоритет. В рамках сессии все запросы и операции с таблицами с одинаковыми именами будут влиять только на временную таблицу.

Ограничения

Хотя использование временных таблиц похоже на использование нативных таблиц, есть некоторые ограничения и различия:

  • Временные таблицы должны создаваться в Default Catalog.
  • Установка colocate group не поддерживается. Если свойство colocate_with явно указано при создании таблицы, оно будет проигнорировано.
  • ENGINE должен быть указан как olap при создании таблицы.
  • Операторы ALTER TABLE не поддерживаются.
  • Создание представлений и материализованных представлений на основе временных таблиц не поддерживается.
  • Операторы EXPORT не поддерживаются.
  • Создание временных таблиц или загрузка данных из/в них с помощью асинхронных задач с использованием SUBMIT TASK не поддерживается.

Дополнительные функции

Помимо вышеперечисленных функций, вы можете использовать дополнительные функции в зависимости от ваших бизнес-требований для проектирования более надежной структуры таблиц. Например, использование столбцов Bitmap и HLL для ускорения подсчета уникальных значений, указание генерируемых столбцов или столбцов с автоинкрементом для ускорения некоторых запросов, настройка гибких и автоматических методов охлаждения хранилища для снижения затрат на обслуживание и настройка Colocate Join для ускорения многотабличных JOIN-запросов. Для получения более подробной информации см. CREATE TABLE.