テーブルエンジン
テーブルエンジン(テーブルの種類)は、次の点を決定します。
- データの保存方法と保存場所、書き込み先および読み取り元。
- どのクエリがどのようにサポートされるか。
- データへの同時アクセス。
- インデックスが存在する場合の利用方法。
- リクエストをマルチスレッドで実行できるかどうか。
- データレプリケーションの設定。
エンジンファミリー
MergeTree
高負荷ワークロード向けの、最も汎用的かつ高機能なテーブルエンジンです。これらのエンジンに共通する特性は、高速なデータ挿入と、その後のバックグラウンドでのデータ処理です。MergeTree ファミリーのエンジンは、データレプリケーション(エンジンの Replicated* バージョンによる)、パーティショニング、セカンダリのデータスキップインデックス、その他のエンジンではサポートされない機能をサポートします。
このファミリーに含まれるエンジン:
| MergeTree エンジン |
|---|
| MergeTree |
| ReplacingMergeTree |
| SummingMergeTree |
| AggregatingMergeTree |
| CollapsingMergeTree |
| VersionedCollapsingMergeTree |
| GraphiteMergeTree |
| CoalescingMergeTree |
Log
最小限の機能を持つ軽量な エンジン です。多数の小さなテーブル(最大で約 100 万行)をすばやく書き込み、その後にテーブル全体をまとめて読み出す必要がある場合に最も効果的です。
このファミリーに含まれるエンジン:
| 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 * では仮想列の値は返されません。
テーブルの仮想列の 1 つと同じ名前の列を定義してテーブルを作成した場合、その仮想列にはアクセスできなくなります。このような構成は推奨されません。競合を避けるため、仮想列の名前には通常アンダースコアが接頭辞として付けられます。
-
_table— データが読み取られたテーブル名を含みます。型: String。使用されているテーブルエンジンに関係なく、各テーブルには
_tableという名前の汎用仮想列が含まれています。マージテーブルエンジンを使用するテーブルに対してクエリを実行する場合、
WHERE/PREWHERE句で_tableに対する定数条件を設定できます(例:WHERE _table='xyz')。この場合、読み取り処理は_tableに対する条件が満たされるテーブルに対してのみ実行されるため、_table列はインデックスとして機能します。SELECT ... FROM (... UNION ALL ...)のような形式のクエリを使用する場合、_table列を指定することで、返された行がどの実テーブルに由来するかを判別できます。