7.0 KiB
slug | sidebar_position | sidebar_label |
---|---|---|
/ja/engines/table-engines/special/file | 40 | File |
Fileテーブルエンジン
Fileテーブルエンジンは、サポートされているファイルフォーマット(TabSeparated
、Native
など)の一つでファイルにデータを保持します。
使用シナリオ:
- ClickHouseからファイルへのデータエクスポート。
- データをあるフォーマットから別のフォーマットに変換。
- ディスク上のファイルを編集してClickHouse内のデータを更新。
:::note このエンジンは現在ClickHouse Cloudでは利用できませんので、代わりにS3テーブル関数を使用してください。 :::
ClickHouseサーバーでの使用
File(Format)
Format
パラメータは利用可能なファイルフォーマットの一つを指定します。SELECT
クエリを実行するには入力用、INSERT
クエリを実行するには出力用のフォーマットがサポートされている必要があります。利用可能なフォーマットはFormatsセクションに一覧で載っています。
ClickHouseは、File
のファイルシステムパスの指定を許可していません。これはサーバー設定でパスとして定義されたフォルダを使用します。
File(Format)
を使用してテーブルを作成すると、そのフォルダ内に空のサブディレクトリが作成されます。テーブルにデータが書き込まれると、そのサブディレクトリ内のdata.Format
ファイルにデータが保存されます。
サーバーファイルシステム内にこのサブフォルダとファイルを手動で作成し、マッチングする名前でATTACHすることで、そのファイルからデータをクエリすることができます。
:::note この機能を使用する際は注意してください。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
は新しい値を追加します。 - サポートされていない機能:
ALTER
SELECT ... 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
。