Fileテーブルエンジン
Fileテーブルエンジンは、サポートされているファイルフォーマット(TabSeparated、Nativeなど)の一つでファイルにデータを保持します。
使用シナリオ:
- ClickHouseからファイルへのデータエクスポート。
- データをあるフォーマットから別のフォーマットに変換。
- ディスク上のファイルを編集してClickHouse内のデータを更新。
このエンジンは現在ClickHouse Cloudでは利用できませんので、代わりにS3テーブル関数を使用してください。
ClickHouseサーバーでの使用
File(Format)
Formatパラメータは利用可能なファイルフォーマットの一つを指定します。SELECTクエリを実行するには入力用、INSERTクエリを実行するには出力用のフォーマットがサポートされている必要があります。利用可能なフォーマットはFormatsセクションに一覧で載っています。
ClickHouseは、Fileのファイルシステムパスの指定を許可していません。これはサーバー設定でパスとして定義されたフォルダを使用します。
File(Format)を使用してテーブルを作成すると、そのフォルダ内に空のサブディレクトリが作成されます。テーブルにデータが書き込まれると、そのサブディレクトリ内のdata.Formatファイルにデータが保存されます。
サーバーファイルシステム内にこのサブフォルダとファイルを手動で作成し、マッチングする名前でATTACHすることで、そのファイルからデータをクエリすることができます。
この機能を使用する際は注意してください。ClickHouseはそのようなファイルへの外部変更を追跡しません。ClickHouseとClickHouse外で同時に書き込みが行われた場合、結果は未定義です。
例
1. file_engine_tableテーブルを設定する:
CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated)
デフォルトでは、ClickHouseは/var/lib/clickhouse/data/default/file_engine_tableフォルダを作成します。
2. /var/lib/clickhouse/data/default/file_engine_table/data.TabSeparatedを手動で作成し、以下の内容を含める:
$ cat data.TabSeparated
one 1
two 2
3. データをクエリする:
SELECT * FROM file_engine_table
┌─name─┬─value─┐
│ one │ 1 │
│ two │ 2 │
└──────┴───────┘
ClickHouse-localでの使用
clickhouse-localでは、FileエンジンはFormatに加えてファイルパスを受け入れます。デフォルトの入力/出力ストリームは、数値または人間に読みやすい名前(0やstdin、1やstdoutなど)で指定できます。圧縮ファイルの読み書きが、追加のエンジンパラメータまたはファイル拡張子(gz、br、またはxz)に基づいて可能です。
例:
$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table"
実装の詳細
- 複数の
SELECTクエリを同時に実行できますが、INSERTクエリは互いに待ちます。 INSERTクエリによる新しいファイルの作成がサポートされています。- ファイルが存在する場合、
INSERTは新しい値を追加します。 - サポートされていない機能:
ALTERSELECT ... SAMPLE- インデックス
- レプリケーション
PARTITION BY
PARTITION BY — オプションです。データをパーティションキーでパーティショニングすることで、別々のファイルを作成できます。ほとんどの場合、パーティションキーは必要ありませんし、必要であっても月ごとよりも詳細にする必要は通常ありません。パーティショニングはクエリを高速化しません(ORDER BY式とは対照的に)。過度に詳細なパーティショニングを使用しないでください。クライアント識別子や名前などでデータをパーティショニングしないで、クライアント識別子や名前をORDER BY式の最初のカラムにしてください。
月ごとにパーティショニングするには、date_columnがDate型の日付を持つカラムである場合、toYYYYMM(date_column)式を使用します。ここでのパーティション名は"YYYYMM"フォーマットになります。
仮想カラム
_path— ファイルへのパス。型:LowCardinalty(String)。_file— ファイルの名前。型:LowCardinalty(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。