Движки таблиц
Движок таблицы (тип таблицы) определяет:
- Как и где хранятся данные, куда они записываются и откуда читаются.
- Какие запросы поддерживаются и как.
- Возможность конкурентного доступа к данным.
- Использование индексов, если они есть.
- Возможно ли многопоточное выполнение запросов.
- Параметры репликации данных.
Семейства движков
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 |
| Внешние данные |
| 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.