file テーブル関数
SELECT したりファイルへ INSERT したりできるテーブル形式インターフェイスを提供するテーブルエンジンです。ローカルファイルを扱う場合は file を使用し、S3、GCS、MinIO などのオブジェクトストレージ内のバケットを扱う場合は s3 を使用します。
file 関数は、SELECT クエリおよび INSERT クエリで使用でき、ファイルの読み取りや書き込みを行えます。
構文
SELECT クエリでは、path に Array(String) を返す式を指定することもできます。
引数
戻り値
File への書き込み例
TSVファイルに書き込む
test.tsv に書き込まれます。
複数のTSVファイルへのパーティション別書き込み
file 型のテーブル関数にデータを挿入する際に PARTITION BY 式を指定すると、パーティションごとに別々のファイルが作成されます。データをファイルごとに分割することで、読み取り処理のパフォーマンス向上に役立ちます。
test_1.tsv、test_2.tsv、test_3.tsv の3つのファイルに書き込まれます。
ファイルから読み込む例
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 はパス (/name=value/) 内の Hive スタイルのパーティション化を検出し、クエリでパーティションカラムを仮想カラムとして使用できるようになります。これらの仮想カラムは、パーティション化されたパス内の名前と同じ名前になります。
例
Hive スタイルのパーティション化で作成された仮想カラムを使用する