file テーブル関数
s3 テーブル関数と同様に、ファイルに対する SELECT や INSERT をテーブルと同じように扱えるインターフェイスを提供するテーブルエンジンです。ローカルファイルを扱う場合は file() を使用し、S3、GCS、MinIO などのオブジェクトストレージ内のバケットを扱う場合は s3 のテーブル関数 s3() を使用します。
file 関数は、SELECT および INSERT クエリで使用して、ファイルからの読み取りやファイルへの書き込みを行うことができます。
構文
引数
| パラメータ | 説明 |
|---|---|
path | user_files_path からのファイルへの相対パス。読み取り専用モードでは、次のグロブパターンをサポートします:*、?、{abc,def}('abc' と 'def' は文字列)、および {N..M}(N と M は数値)。 |
path_to_archive | zip/tar/7z アーカイブへの相対パス。path と同じグロブパターンをサポートします。 |
format | ファイルのフォーマット。 |
structure | テーブルの構造。形式:'column1_name column1_type, column2_name column2_type, ...'。 |
compression | SELECT クエリで使用する場合は既存の圧縮形式、INSERT クエリで使用する場合は指定する圧縮形式。サポートされる圧縮形式は gz、br、xz、zst、lz4、bz2 です。 |
戻り値
ファイル内のデータを読み書きするためのテーブル。
ファイルへの書き込み例
TSV ファイルへの書き込み
その結果、データはファイル test.tsv に書き込まれます。
複数の TSV ファイルへのパーティション分割書き込み
file() 型のテーブル関数にデータを挿入する際に PARTITION BY 式を指定すると、パーティションごとに別々のファイルが作成されます。データを複数のファイルに分割することで、読み取り処理のパフォーマンスを向上できます。
その結果、データは次の3つのファイルに書き込まれます:test_1.tsv、test_2.tsv、test_3.tsv。
cat /var/lib/clickhouse/user_files/test_2.tsv
1 3 2
cat /var/lib/clickhouse/user_files/test_3.tsv
1 2 3
ファイルから読み込む例
CSV ファイルからの SELECT
まず、サーバー設定で user_files_path を設定し、test.csv というファイルを用意します。
次に、test.csv からテーブルにデータを読み込んで、先頭の 2 行を選択します。
ファイルからテーブルにデータを挿入する
archive1.zip および/または archive2.zip に含まれている table.csv からデータを読み込む:
パス内のグロブ
パスにはグロブを使用できます。ファイルは、接頭辞や接尾辞だけでなく、パターン全体に一致する必要があります。ただし 1 つだけ例外があり、パスが既存のディレクトリを指していて、かつグロブを使用していない場合は、そのディレクトリ内のすべてのファイルが選択されるように、パスの末尾に暗黙的に * が追加されます。
*—/以外の任意の長さ(空文字列を含む)の文字列を表します。?— 任意の 1 文字を表します。{some_string,another_string,yet_another_one}— 文字列'some_string', 'another_string', 'yet_another_one'のいずれかに置き換えられます。これらの文字列には/記号を含めることができます。{N..M}—>= Nかつ<= Mの任意の数値を表します。**— ディレクトリ配下のすべてのファイルを再帰的に表します。
{} を用いる構文は、remote および hdfs テーブル関数と同様です。
例
例
次の相対パスを持つファイルがあるとします:
some_dir/some_file_1some_dir/some_file_2some_dir/some_file_3another_dir/some_file_1another_dir/some_file_2another_dir/some_file_3
すべてのファイルに含まれる行数の合計を問い合わせます:
同じ結果が得られる別のパス式:
暗黙的な * を用いて、some_dir の総行数を取得します:
ファイル一覧に先頭ゼロ付きの番号範囲が含まれている場合は、各桁を個別に中かっこで指定する構文を使うか、? を使用してください。
例
file000、file001、...、file999 という名前のファイルに含まれる行数の合計をクエリします。
例
big_dir/ ディレクトリ配下のすべてのファイルに対して、再帰的に行数の合計をクエリします。
例
ディレクトリ big_dir/ 以下のすべてのフォルダに含まれる file002 ファイルの全行数を、再帰的にクエリします。
仮想カラム
_path— ファイルへのパス。型:LowCardinality(String)。_file— ファイル名。型:LowCardinality(String)。_size— ファイルサイズ(バイト単位)。型:Nullable(UInt64)。ファイルサイズが不明な場合、値はNULLです。_time— ファイルの最終更新時刻。型:Nullable(DateTime)。時刻が不明な場合、値はNULLです。
use_hive_partitioning 設定
use_hive_partitioning 設定を 1 にすると、ClickHouse はパス(/name=value/)内の Hive スタイルのパーティショニングを検出し、クエリ内でパーティション列を仮想列として使用できるようにします。これらの仮想列は、パーティションを表すパス内の名前と同じ名前を持ちますが、先頭に _ が付きます。
例
Hive スタイルのパーティショニングで作成された仮想列を使用する。
設定
| Setting | Description |
|---|---|
| engine_file_empty_if_not_exists | 存在しないファイルから空の結果セットを SELECT できるようにします。デフォルトでは無効です。 |
| engine_file_truncate_on_insert | INSERT の前にファイルの内容を切り詰められるようにします。デフォルトでは無効です。 |
| engine_file_allow_create_multiple_files | フォーマットにサフィックスがある場合、INSERT ごとに新しいファイルを作成できるようにします。デフォルトでは無効です。 |
| engine_file_skip_empty_files | 読み取り時に空のファイルをスキップできるようにします。デフォルトでは無効です。 |
| storage_file_read_method | ストレージファイルからデータを読み取る方法です。read、pread、mmap のいずれかです(mmap は clickhouse-local のみ)。デフォルト値: clickhouse-server では pread、clickhouse-local では mmap。 |