file Table Function
ファイルからSELECTおよびINSERTするためのテーブルのようなインターフェースを提供するテーブルエンジンで、s3テーブル関数に似ています。ローカルファイルを扱う際はfile()
を、S3、GCS、またはMinIOのようなオブジェクトストレージ内のバケットを扱う際はs3()
を使用します。
file
関数は、ファイルから読み取ったり書き込んだりするために、SELECT
およびINSERT
クエリで使用できます。
Syntax
Arguments
パラメーター | 説明 |
---|---|
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 です。 |
Returned value
ファイル内のデータを読み書きするためのテーブルです。
Examples for Writing to a File
Write to a TSV file
結果として、データはファイルtest.tsv
に書き込まれます:
Partitioned write to multiple TSV files
file()
タイプのテーブル関数にデータを挿入する際にPARTITION BY
式を指定すると、各パーティションに対して別のファイルが作成されます。データを別々のファイルに分割すると、読み取り操作のパフォーマンスが向上します。
結果として、データは3つのファイルに書き込まれます:test_1.tsv
、test_2.tsv
、およびtest_3.tsv
。
Examples for Reading from a File
SELECT from a CSV file
まず、サーバー設定でuser_files_path
を設定し、test.csv
ファイルを準備します:
次に、test.csv
からデータをテーブルに読み込み、最初の2行を選択します:
Inserting data from a file into a table
archive1.zip
または/およびarchive2.zip
にあるtable.csv
からデータを読み取ります:
Globs in path
パスはグロビングを使用できます。ファイルは全体のパスパターンと一致しなければなりません。サフィックスやプレフィックスのみではありません。1つだけ例外があり、パスが存在するディレクトリを参照しており、グロブを使用しない場合、*
が暗黙的にパスに追加され、ディレクトリ内のすべてのファイルが選択されます。
*
—/
を除く任意の多くの文字を表しますが、空の文字列を含みます。?
— 任意の1文字を表します。{some_string,another_string,yet_another_one}
— 文字列'some_string', 'another_string', 'yet_another_one'
のいずれかを置き換えます。文字列は/
記号を含むことができます。{N..M}
— 任意の数>= N
および<= M
を表します。**
- フォルダ内のすべてのファイルを再帰的に表します。
{}
を含む構造は、remoteおよびhdfsテーブル関数に似ています。
Examples
Example
次の相対パスを持つファイルがあるとします:
some_dir/some_file_1
some_dir/some_file_2
some_dir/some_file_3
another_dir/some_file_1
another_dir/some_file_2
another_dir/some_file_3
すべてのファイルの総行数をクエリします:
同じ結果を得る別のパス表現:
暗黙的*
を使用してsome_dir
の総行数をクエリします:
ファイルリストに先頭ゼロの数字範囲が含まれている場合は、各桁に対してブレースを使用するか、?
を使用してください。
Example
file000
、file001
、...、file999
という名前のファイルの総行数をクエリします:
Example
ディレクトリbig_dir/
内のすべてのファイルの総行数を再帰的にクエリします:
Example
ディレクトリbig_dir/
内の任意のフォルダにあるfile002
という名前のすべてのファイルの総行数を再帰的にクエリします:
Virtual Columns
_path
— ファイルへのパス。タイプ:LowCardinality(String)
。_file
— ファイルの名前。タイプ:LowCardinality(String)
。_size
— ファイルのサイズ(バイト単位)。タイプ:Nullable(UInt64)
。ファイルサイズが不明な場合、値はNULL
です。_time
— ファイルの最終更新時刻。タイプ:Nullable(DateTime)
。時間が不明な場合、値はNULL
です。
Hive-style partitioning
use_hive_partitioning
が1に設定されている場合、ClickHouseはパス内のHiveスタイルのパーティショニングを検出し(/name=value/
)、クエリ内でパーティションカラムを仮想カラムとして使用できるようにします。これらの仮想カラムは、パーティション化されたパスと同じ名前を持ちますが、_
で始まります。
Example
Hiveスタイルのパーティショニングで作成された仮想カラムを使用:
Settings
設定 | 説明 |
---|---|
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 | ストレージファイルからデータを読み取る方法の設定の1つ:read、pread、mmap(clickhouse-local専用)。デフォルト値:pread はclickhouse-serverのため、mmap はclickhouse-localのため。 |