file テーブル関数
ファイルからSELECTおよびINSERTを行うためのテーブルエンジンで、s3 テーブル関数と似たテーブルのようなインターフェースを提供します。ローカルファイルを扱う場合はfile()を使用し、S3、GCS、またはMinIOのようなオブジェクトストレージのバケットを扱う場合はs3()を使用します。
file関数は、ファイルを読み書きするためのSELECTおよびINSERTクエリで使用できます。
構文
引数
| パラメーター | 説明 |
|---|---|
path | user_files_pathからのファイルへの相対パス。読み取り専用モードで次のグロブをサポートします: *, ?, {abc,def}('abc'と'def'が文字列である場合)および{N..M}(NとMが数値である場合)。 |
path_to_archive | zip/tar/7zアーカイブへの相対パス。同様のグロブをサポートします。 |
format | ファイルのフォーマット。 |
structure | テーブルの構造。形式: 'column1_name column1_type, column2_name column2_type, ...'。 |
compression | SELECTクエリで使用する場合の既存の圧縮タイプ、またはINSERTクエリで使用する場合の希望する圧縮タイプ。サポートされている圧縮タイプはgz、br、xz、zst、lz4、およびbz2です。 |
戻り値
ファイル内のデータを読み書きするためのテーブル。
ファイルへの書き込み例
TSVファイルへの書き込み
結果として、データはファイルtest.tsvに書き込まれます:
複数のTSVファイルへのパーティション書き込み
ファイルタイプのテーブル関数にデータを挿入する際にPARTITION BY式を指定した場合、各パーティションのために別々のファイルが作成されます。データを別々のファイルに分割することで、読み取り操作のパフォーマンスが向上します。
結果として、データは3つのファイルに書き込まれます: test_1.tsv、test_2.tsv、およびtest_3.tsv。
ファイルからの読み取り例
CSVファイルからSELECT
まず、サーバ設定でuser_files_pathを設定し、ファイルtest.csvを準備します:
次に、test.csvからテーブルにデータを読み込み、最初の2行を選択します:
ファイルからテーブルへのデータ挿入
archive1.zipまたはarchive2.zipにあるtable.csvからデータを読み込みます:
パスにおけるグロブ
パスはグロブを使うことができます。ファイルはパターン全体に一致する必要があり、サフィックスやプレフィックスのみでは不十分です。一つの例外として、パスが既存のディレクトリを指し、グロブを使用していない場合は、*が暗黙的にパスに追加され、そのディレクトリ内のすべてのファイルが選択されます。
*—/を除く任意の文字を表し、空文字列も含みます。?— 任意の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はパス内のHiveスタイルのパーティショニングを検出し(/name=value/)、クエリ内でパーティション列を擬似列として使用できるようにします。これらの擬似列は、パーティション化されたパスと同じ名前を持ちますが、_で始まります。
例
Hiveスタイルのパーティショニングで作成された擬似列を使用します:
設定
| 設定 | 説明 |
|---|---|
| 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(clickhouse-localのみ)。デフォルト値: clickhouse-server用のpread、clickhouse-local用のmmap。 |