Merge テーブルエンジン
Merge
エンジン ( MergeTree
と混同しないでください ) は、データを自体に保存することはありませんが、他の任意の数のテーブルから同時に読み取ることを可能にします。
読み取りは自動的に並列化されます。テーブルへの書き込みはサポートされていません。読み取り時には、実際に読み取られているテーブルのインデックスが使用されます(存在する場合)。
テーブルの作成
エンジンパラメータ
db_name
db_name
— 考えられる値:
- データベース名、
- データベース名を返す定数式(例:
currentDatabase()
)、 REGEXP(expression)
、ここでexpression
は DB 名に一致する正規表現です。
tables_regexp
tables_regexp
— 指定された DB または DBs 内のテーブル名に一致する正規表現。
正規表現 — re2 (PCREのサブセットをサポート)、大文字と小文字を区別します。 正規表現内の記号のエスケープについての注意については、「一致」セクションを参照してください。
使用法
読み取るテーブルを選択する際に、正規表現に一致しても Merge
テーブル自体は選択されません。これはループを回避するためです。
2つの Merge
テーブルを作成し、それぞれが互いのデータを読み取ろうとし続けることができますが、これは良いアイデアではありません。
Merge
エンジンの典型的な使用法は、単一のテーブルとして大規模な TinyLog
テーブル群を扱うことです。
例
例 1
データベース ABC_corporate_site
と ABC_store
の2つを考えます。 all_visitors
テーブルには、両方のデータベースの visitors
テーブルからのIDが含まれます。
例 2
古いテーブル WatchLog_old
があり、データを新しいテーブル WatchLog_new
に移動せずにパーティショニングを変更することに決め、両方のテーブルからデータを見たい場合を考えます。
仮想カラム
-
_table
— データが読み取られたテーブルの名前が含まれています。タイプ: String。WHERE/PREWHERE
句で_table
に対する定数条件を設定できます (例えば、WHERE _table='xyz'
)。この場合、条件が_table
に満たされているテーブルのみで読み取り操作が実行されるため、_table
カラムはインデックスとして機能します。
関連項目