メインコンテンツへスキップ
メインコンテンツへスキップ

テーブルエンジン

テーブルエンジン(テーブルの種類)は、次の点を決定します。

  • データの保存方法と保存場所、書き込み先および読み取り元。
  • どのクエリがどのようにサポートされるか。
  • データへの同時アクセス。
  • インデックスが存在する場合の利用方法。
  • リクエストをマルチスレッドで実行できるかどうか。
  • データレプリケーションの設定。

エンジンファミリー

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 TABLEDESCRIBE TABLE クエリの結果にも表示されません。仮想列は読み取り専用であり、仮想列にデータを挿入することはできません。

仮想列からデータを取得するには、その名前を SELECT クエリで指定する必要があります。SELECT * では仮想列の値は返されません。

テーブルの仮想列の 1 つと同じ名前の列を定義してテーブルを作成した場合、その仮想列にはアクセスできなくなります。このような構成は推奨されません。競合を避けるため、仮想列の名前には通常アンダースコアが接頭辞として付けられます。

  • _table — データが読み取られたテーブル名を含みます。型: String

    使用されているテーブルエンジンに関係なく、各テーブルには _table という名前の汎用仮想列が含まれています。

    マージテーブルエンジンを使用するテーブルに対してクエリを実行する場合、WHERE / PREWHERE 句で _table に対する定数条件を設定できます(例: WHERE _table='xyz')。この場合、読み取り処理は _table に対する条件が満たされるテーブルに対してのみ実行されるため、_table 列はインデックスとして機能します。

    SELECT ... FROM (... UNION ALL ...) のような形式のクエリを使用する場合、_table 列を指定することで、返された行がどの実テーブルに由来するかを判別できます。