テーブルエンジン (テーブルの種類) は、次の内容を決定します。
- データをどのように、どこに保存するか、どこに書き込むか、どこから読み取るか。
- どのクエリがどのようにサポートされるか。
- データへの同時アクセス。
- 索引がある場合に、それを使用するかどうか。
- リクエストをマルチスレッドで実行できるかどうか。
- データレプリケーションのパラメータ。
エンジンファミリー
MergeTree
高負荷のワークロード向けに、最も汎用的で高機能なテーブルエンジンです。これらのエンジンに共通する特徴は、高速にデータを挿入でき、その後のデータ処理がバックグラウンドで行われることです。MergeTree ファミリーのエンジンは、データのレプリケーション (Replicated* バージョンのエンジン) 、パーティション化、セカンダリのデータスキッピング索引のほか、他のエンジンではサポートされない機能もサポートしています。
このファミリーに含まれるエンジン:
Log
最小限の機能を備えた軽量なエンジンです。多数の小さなテーブル (約 100 万行まで) にすばやく書き込み、後でまとめて読み取る必要がある場合に最適です。
このファミリーに含まれるエンジン:
| Log Engines |
|---|
| Logファミリーのエンジン |
| TinyLog |
| StripeLog |
| Log |
インテグレーションエンジン
他のデータストレージシステムやデータ処理システムと連携するためのエンジンです。
このファミリーに含まれるエンジン:
特殊エンジン
このファミリーに含まれるエンジン:
| 特殊エンジン |
|---|
| 特殊テーブルエンジン |
| Alias |
| 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— データの読み取り元であるテーブル名を格納します。Type: String.使用しているテーブルエンジンに関係なく、すべてのテーブルには
_tableという共通の仮想カラムがあります。Merge テーブルエンジンを使用してテーブルにクエリする場合は、
WHERE/PREWHERE句で_tableに対する定数条件を設定できます (たとえばWHERE _table='xyz') 。この場合、読み取り処理は_tableの条件を満たすテーブルに対してのみ実行されるため、_tableカラムは索引として機能します。SELECT ... FROM (... UNION ALL ...)のような形式のクエリを使用すると、_tableカラムを指定することで、返された行が実際にどのテーブルに由来するかを判別できます。