メインコンテンツまでスキップ
メインコンテンツまでスキップ

file Table Function

ファイルからSELECTおよびINSERTするためのテーブルのようなインターフェースを提供するテーブルエンジンで、s3テーブル関数に似ています。ローカルファイルを扱う際はfile()を、S3、GCS、またはMinIOのようなオブジェクトストレージ内のバケットを扱う際はs3()を使用します。

file関数は、ファイルから読み取ったり書き込んだりするために、SELECTおよびINSERTクエリで使用できます。

Syntax

Arguments

パラメーター説明
pathuser_files_pathからのファイルへの相対パス。読み取り専用モードで次のグロブがサポートされています:*?{abc,def}(ここで'abc'および'def'は文字列)および{N..M}(ここでNおよびMは数値)。
path_to_archivezip/tar/7zアーカイブへの相対パス。pathと同様のグロブがサポートされています。
formatファイルのフォーマット
structureテーブルの構造。フォーマット:'column1_name column1_type, column2_name column2_type, ...'
compressionSELECTクエリで使用される既存の圧縮タイプ、またはINSERTクエリで使用される際の希望する圧縮タイプ。サポートされている圧縮タイプはgzbrxzzstlz4、および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.tsvtest_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

file000file001、...、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のため。