Движки таблиц
Движок таблицы (тип таблицы) определяет:
- Как и где хранятся данные, куда их записывать и откуда их читать.
- Какие запросы поддерживаются и как.
- Параллельный доступ к данным.
- Использование индексов, если они имеются.
- Возможно ли многопоточное выполнение запросов.
- Параметры репликации данных.
Семейства движков
MergeTree
Наиболее универсальные и функциональные движки таблиц для высоконагруженных задач. Общим свойством этих движков является быстрая вставка данных с последующей обработкой данных в фоновом режиме. Движки семейства MergeTree
поддерживают репликацию данных (в версиях с Replicated*), партиционирование, вторичные индексы пропуска данных и другие функции, которые не поддерживаются в других движках.
Движки в семействе:
Движки MergeTree |
---|
MergeTree |
ReplacingMergeTree |
SummingMergeTree |
AggregatingMergeTree |
CollapsingMergeTree |
VersionedCollapsingMergeTree |
GraphiteMergeTree |
CoalescingMergeTree |
Log
Легковесные движки с минимальной функциональностью. Они наиболее эффективны, когда нужно быстро записывать много мелких таблиц (до примерно 1 миллиона строк) и читать их позже целиком.
Движки в семействе:
Движки Log |
---|
TinyLog |
StripeLog |
Log |
Интеграционные движки
Движки для взаимодействия с другими системами хранения и обработки данных.
Движки в семействе:
Интеграционные движки |
---|
ODBC |
JDBC |
MySQL |
MongoDB |
Redis |
HDFS |
S3 |
Kafka |
EmbeddedRocksDB |
RabbitMQ |
PostgreSQL |
S3Queue |
TimeSeries |
Специальные движки
Движки в семействе:
Специальные движки |
---|
Distributed |
Dictionary |
Merge |
Executable |
File |
Null |
Set |
Join |
URL |
View |
Memory |
Buffer |
External Data |
GenerateRandom |
KeeperMap |
FileLog |
Виртуальные колонки
Виртуальная колонка — это неотъемлемый атрибут движка таблицы, который определяется в исходном коде движка.
Вы не должны указывать виртуальные колонки в запросе CREATE TABLE
, и вы не можете их увидеть в результатах запросов SHOW CREATE TABLE
и DESCRIBE TABLE
. Виртуальные колонки также являются только для чтения, поэтому вы не можете вставить данные в виртуальные колонки.
Чтобы выбрать данные из виртуальной колонки, вы должны указать ее имя в запросе SELECT
. SELECT *
не возвращает значения из виртуальных колонок.
Если вы создаете таблицу с колонкой, имеющей то же имя, что и одна из виртуальных колонок таблицы, виртуальная колонка становится недоступной. Мы не рекомендуем делать это. Чтобы помочь избежать конфликтов, имена виртуальных колонок обычно начинаются с символа подчеркивания.
-
_table
— Содержит имя таблицы, из которой были прочитаны данные. Тип: String.Независимо от используемого движка таблицы, каждая таблица включает универсальную виртуальную колонку с именем
_table
.При запросе таблицы с движком merge таблицы вы можете установить постоянные условия на
_table
в предложенииWHERE/PREWHERE
(например,WHERE _table='xyz'
). В этом случае операция чтения выполняется только для тех таблиц, где условие на_table
удовлетворено, так что колонка_table
действует как индекс.При использовании запросов, отформатированных как
SELECT ... FROM (... UNION ALL ...)
, мы можем определить, из какой фактической таблицы происходят возвращаемые строки, указав колонку_table
.