File Table Engine
Fileテーブルエンジンは、サポートされているファイルフォーマットのいずれか(TabSeparated
、Native
など)でファイルにデータを保持します。
使用シナリオ:
- ClickHouseからファイルへのデータエクスポート。
- データを別のフォーマットに変換。
- ディスク上のファイルを編集してClickHouseのデータを更新。
このエンジンは現在ClickHouse Cloudで使用できませんので、S3テーブル関数を使用してください。
ClickHouseサーバーでの使用
Format
パラメータは、利用可能なファイルフォーマットの1つを指定します。SELECT
クエリを実行するには、フォーマットが入力をサポートしている必要があり、INSERT
クエリを実行するには、出力をサポートしている必要があります。利用可能なフォーマットは、Formatsセクションにリストされています。
ClickHouseはFile
のためにファイルシステムのパスを指定することを許可しません。サーバー設定のpath設定で定義されたフォルダーを使用します。
File(Format)
を使用してテーブルを作成すると、そのフォルダーに空のサブディレクトリが作成されます。そのテーブルにデータが書き込まれると、そのサブディレクトリ内のdata.Format
ファイルに配置されます。
このサブフォルダーとファイルを手動でサーバーファイルシステム内に作成し、対応する名前のテーブル情報にATTACHすることで、そのファイルからデータをクエリすることができます。
この機能には注意が必要です。ClickHouseはそのようなファイルへの外部変更を追跡しません。ClickHouse外部と同時に書き込みを行う結果は未定義です。
例
1. file_engine_table
テーブルを設定します:
デフォルトでは、ClickHouseはフォルダー/var/lib/clickhouse/data/default/file_engine_table
を作成します。
2. 手動で/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
です。