ファイル テーブル エンジン
ファイル テーブル エンジンは、サポートされている ファイル形式 のいずれかでファイルにデータを保持します(TabSeparated
、Native
など)。
使用シナリオ:
- ClickHouseからファイルへのデータエクスポート。
- データを1つの形式から別の形式に変換。
- ディスク上のファイルを編集してClickHouseのデータを更新。
このエンジンは現在ClickHouse Cloudでは使用できませんので、代わりにS3テーブル関数を使用してください。
ClickHouseサーバーでの使用
Format
パラメータは利用可能なファイル形式の1つを指定します。SELECT
クエリを実行する場合、形式は入力に対してサポートされる必要があり、INSERT
クエリを実行するには出力に対してサポートされている必要があります。利用可能な形式は、Formats セクションにリストされています。
ClickHouseでは、File
のファイルシステムパスを指定することはできません。path設定でサーバー構成に定義されたフォルダーが使用されます。
File(Format)
を使用してテーブルを作成すると、そのフォルダー内に空のサブディレクトリが作成されます。そのテーブルにデータが書き込まれると、そのサブディレクトリ内のdata.Format
ファイルに格納されます。
このサブフォルダーとファイルをサーバーファイルシステム内に手動で作成し、対応する名前でテーブル情報にATTACHすることで、そのファイルからデータをクエリすることができます。
この機能を使用する際は注意してください。ClickHouseはそのようなファイルに対する外部の変更を追跡しません。ClickHouseとClickHouse外での同時書き込みの結果は不定です。
例
1. file_engine_table
テーブルを設定します:
デフォルトでは、ClickHouseは /var/lib/clickhouse/data/default/file_engine_table
フォルダーを作成します。
2. data.TabSeparated
を含む /var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated
を手動で作成します:
3. データをクエリします:
ClickHouse-localでの使用
clickhouse-local では、Fileエンジンは Format
に加えてファイルパスを受け入れます。デフォルトの入出力ストリームは、0
やstdin
、1
やstdout
のような数値または人間が読み取れる名前で指定できます。追加のエンジンパラメータまたはファイル拡張子(gz
、br
、xz
)に基づいて、圧縮ファイルを読み書きすることも可能です。
例:
実装の詳細
- 複数の
SELECT
クエリを同時に実行できますが、INSERT
クエリは互いに待機します。 INSERT
クエリによって新しいファイルを作成することがサポートされています。- ファイルが存在する場合、
INSERT
はそのファイルに新しい値を追加します。 - サポートされていないもの:
ALTER
SELECT ... SAMPLE
- インデックス
- レプリケーション
PARTITION BY
PARTITION BY
— オプションです。パーティションキーでデータをパーティション分割することによって、別々のファイルを作成できます。ほとんどの場合、パーティションキーは必要なく、必要な場合でも通常は月単位でのパーティションキーを使用することが推奨されます。パーティション分割は、クエリの速度を向上させることはありません(ORDER BY式とは対照的です)。過剰に細かいパーティション分割を行ってはいけません。クライアント識別子や名前でデータをパーティション分割しないでください(代わりに、クライアント識別子や名前をORDER BY式の最初のカラムにします)。
月単位のパーティション分割には、toYYYYMM(date_column)
式を使用します。ここで、date_column
は Date 型の日付を持つカラムです。パーティション名はここで "YYYYMM"
形式になります。
仮想カラム
_path
— ファイルへのパス。型:LowCardinality(String)
。_file
— ファイルの名前。型:LowCardinality(String)
。_size
— ファイルのサイズ(バイト単位)。型:Nullable(UInt64)
。サイズが不明な場合、値はNULL
です。_time
— ファイルの最終変更時刻。型:Nullable(DateTime)
。時刻が不明な場合、値はNULL
です。
設定
- engine_file_empty_if_not_exists - 存在しないファイルから空のデータを選択できるようにします。デフォルトでは無効です。
- engine_file_truncate_on_insert - 挿入前にファイルを切り詰めることを許可します。デフォルトでは無効です。
- engine_file_allow_create_multiple_files - フォーマットにサフィックスがある場合、各挿入で新しいファイルを作成できるようにします。デフォルトでは無効です。
- engine_file_skip_empty_files - 読み取り時に空のファイルをスキップできるようにします。デフォルトでは無効です。
- storage_file_read_method - ストレージファイルからデータを読み取る方法。
read
、pread
、mmap
のいずれかです。mmapメソッドはclickhouse-serverには適用されません(clickhouse-local用です)。デフォルト値:clickhouse-serverの場合はpread
、clickhouse-localの場合はmmap
です。