hdfs テーブル関数
HDFS 内のファイルからテーブルを作成します。このテーブル関数は、url および file テーブル関数に似ています。
構文
引数
引数 | 説明 |
---|---|
URI | HDFS 内のファイルへの相対 URI。ファイルへのパスは、読み取り専用モードで次のグロブをサポートします: * , ? , {abc,def} および {N..M} (ここで N と M は数字、 'abc', 'def' は文字列)。 |
format | ファイルの format。 |
structure | テーブルの構造。フォーマットは 'column1_name column1_type, column2_name column2_type, ...' です。 |
戻り値
指定された構造のテーブルが、指定されたファイルのデータを読み書きするために返されます。
例
hdfs://hdfs1:9000/test
からのテーブルと、その最初の 2 行の選択:
パス内のグロブ
パスはグロビングを使用することができます。ファイルは、サフィックスやプレフィックスだけでなく、全パスパターンに一致する必要があります。
*
—/
を除く任意の文字を任意の数(空文字を含む)を表します。**
— フォルダー内の全ファイルを再帰的に表します。?
— 任意の 1 文字を表します。{some_string,another_string,yet_another_one}
—'some_string', 'another_string', 'yet_another_one'
のいずれかの文字列に置き換えます。文字列には/
シンボルを含めることができます。{N..M}
—>= N
かつ<= M
の任意の数を表します。
{}
を含む構文は、remote および file テーブル関数に似ています。
例
- HDFS 上に次の URI のいくつかのファイルがあるとします:
- 'hdfs://hdfs1:9000/some_dir/some_file_1'
- 'hdfs://hdfs1:9000/some_dir/some_file_2'
- 'hdfs://hdfs1:9000/some_dir/some_file_3'
- 'hdfs://hdfs1:9000/another_dir/some_file_1'
- 'hdfs://hdfs1:9000/another_dir/some_file_2'
- 'hdfs://hdfs1:9000/another_dir/some_file_3'
- これらのファイルの行数をクエリします:
- これらの 2 つのディレクトリ内のすべてのファイルの行数をクエリします:
注記
ファイルのリストに先頭ゼロのある数値範囲が含まれている場合は、各桁を別々に波括弧を使って構文を使用するか、?
を使用してください。
例
file000
, file001
, ... , file999
というファイルからデータをクエリします:
仮想カラム
_path
— ファイルへのパス。型:LowCardinality(String)
。_file
— ファイル名。型:LowCardinality(String)
。_size
— ファイルのサイズ(バイト単位)。型:Nullable(UInt64)
。サイズが不明な場合の値はNULL
です。_time
— ファイルの最終変更時間。型:Nullable(DateTime)
。時間が不明な場合の値はNULL
です。
Hive スタイルのパーティショニング
use_hive_partitioning
が 1 に設定されている場合、ClickHouse はパス内の Hive スタイルのパーティショニング(/name=value/
)を検出し、クエリ内でパーティションカラムを仮想カラムとして使用できるようにします。これらの仮想カラムは、パーティションのパスと同じ名前を持ちますが、先頭に _
が付いています。
例
Hive スタイルのパーティショニングを使用して作成された仮想カラムを使用する:
ストレージ設定
- hdfs_truncate_on_insert - 挿入する前にファイルを切り捨てることができます。デフォルトでは無効です。
- hdfs_create_new_file_on_insert - 各挿入時にサフィックスを持つフォーマットで新しいファイルを作成できます。デフォルトでは無効です。
- hdfs_skip_empty_files - 読み込み中に空のファイルをスキップできます。デフォルトでは無効です。