FILES
リモートストレージ内のデータファイルを定義し、データロードとデータアンロードに使用します。
FILES() は以下のデータソースとファイル形式をサポートしています。
- データソース:
- HDFS
- AWS S3
- Google Cloud Storage
- その他の S3 互換ストレージシステム
- Microsoft Azure Blob Storage
- NFS(NAS)
- ファイル形式:
- Parquet
- ORC (v3.3 以降でサポート)
- CSV (v3.3 以降でサポート)
- Avro (v3.4.4 以降でサポート、ロードのみ)
v3.2 以降、FILES() は基本データ型に加えて、ARRAY、JSON、MAP、STRUCT などの複雑なデータ型もサポートしています。
FILES() for loading
v3.1.0 以降 、StarRocks はテーブル関数 FILES() を使用してリモートストレージ内の読み取り専用ファイルを定義することをサポートしています。ファイルのパス関連プロパティを使用してリモートストレージにアクセスし、ファイル内のデータのテーブルスキーマを推測し、データ行を返します。データ行を直接クエリするには SELECT を使用し、既存のテーブルにデータ行をロードするには INSERT を使用し、新しいテーブルを作成してデータ行をロードするには CREATE TABLE AS SELECT を使用します。v3.3.4 以降、FILES() を使用してデータファイルのスキーマを DESC で表示することもできます。
構文
FILES( data_location , [data_format] [, schema_detect ] [, StorageCredentialParams ] [, columns_from_path ] [, list_files_only ] [, list_recursively])
パラメータ
すべてのパラメータは "key" = "value" のペアで指定します。
data_location
ファイルにアクセスするために使用される URI です。
パスまたはファイルを指定できます。たとえば、HDFS サーバー上のパス /user/data/tablename からデータファイル 20210411 をロードするには、このパラメータを "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/20210411" と指定します。
ワイルドカード ?, *, [], または ^ を使用して複数のデータファイルの保存パスを指定することもできます。たとえば、HDFS サーバー上のパス /user/data/tablename 内のすべてのパーティションまたは 202104 パーティションのみからデータファイルをロードするには、このパラメータを "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/*/*" または "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/dt=202104*/*" と指定します。
ワイルドカードは中間パスを指定するためにも使用できます。
-
HDFS にアクセスするには、このパラメータを次のように指定する必要があります。
"path" = "hdfs://<hdfs_host>:<hdfs_port>/<hdfs_path>"
-- 例: "path" = "hdfs://127.0.0.1:9000/path/file.parquet" -
AWS S3 にアクセスするには:
-
S3 プロトコルを使用する場合、このパラメータを次のように指定する必要があります。
"path" = "s3://<s3_path>"
-- 例: "path" = "s3://path/file.parquet" -
S3A プロトコルを使用する場合、このパラメータを次のように指定する必要があります。
"path" = "s3a://<s3_path>"
-- 例: "path" = "s3a://path/file.parquet"
-
-
Google Cloud Storage にアクセスするには、このパラメータを次のように指定する必要があります。
"path" = "s3a://<gcs_path>"
-- 例: "path" = "s3a://path/file.parquet" -
Azure Blob Storage にアクセスするには:
-
ストレージアカウントが HTTP 経由でのアクセスを許可している場合、このパラメータを次のように指定する必要があります。
"path" = "wasb://<container>@<storage_account>.blob.core.windows.net/<blob_path>"
-- 例: "path" = "wasb://testcontainer@testaccount.blob.core.windows.net/path/file.parquet" -
ストレージアカウントが HTTPS 経由でのアクセスを許可している場合、このパラメータを次のように指定する必要があります。
"path" = "wasbs://<container>@<storage_account>.blob.core.windows.net/<blob_path>"
-- 例: "path" = "wasbs://testcontainer@testaccount.blob.core.windows.net/path/file.parquet"
-
-
NFS(NAS) にアクセスするには:
"path" = "file:///<absolute_path>"
-- 例: "path" = "file:///home/ubuntu/parquetfile/file.parquet"注記file://プロトコルを介して NFS(NAS) にアクセスするには、同じ NAS デバイスを NFS として、パスにアクセスする必要があるノード上の同じディレクトリにマウントしてください。- 読み取り/書き込み操作の場合、各 FE ノードおよび各 BE または CN ノードにマウントする必要があります。FE ノードはファイルを一覧表示し、ファイルスキーマを推論します。BE/CN ノードはデータを読み取ります。
- 書き込みのみの操作の場合、各 BE または CN ノードにマウントする必要があります。
data_format
データファイルの形式です。 有効な値:
parquetorc(v3.3 以降でサポート)csv(v3.3 以降でサポート)avro(v3.4.4 以降でサポート、ロードのみ)
特定のデータファイル形式に対して詳細なオプションを設定する必要があります。
list_files_only が true に設定されている場合、data_format を指定する必要はありません。
Parquet
Parquet 形式の例:
"format"="parquet",
"parquet.use_legacy_encoding" = "true", -- アンロードのみ
"parquet.version" = "2.6" -- アンロードのみ
Parquet ファイルを読み取る際(たとえば FILES() または Broker Load を使用)、StarRocks は Parquet TIMESTAMP 論理型をその isAdjustedToUTC 属性に従って DATETIME にマッピングします:
- インスタントセマンティクス:
isAdjustedToUTCがtrueの場合、その値は UTC に正規化されたタイムライン上の瞬間を特定します。StarRocks は現在のセッションタイムゾーンにおける壁時計時刻に変換します。 - ローカルセマンティクス:
isAdjustedToUTCがfalseの場合、その値はタイムゾーンを持たない壁時計時刻です。StarRocks はセッションタイムゾーンに関係なく、書き込まれたままの値を返します。 - レガシーな INT96 物理型は
isAdjustedToUTC属性を持ちません。StarRocks は、INT96 タイムスタンプがトップレベルの列であるか STRUCT、ARRAY、または MAP 内にネストされているかにかかわらず、INT96 列を UTC に正規化された瞬間として扱い、セッションタイムゾーンに変換します。
動作変更: 以前のバージョンでは、StarRocks はローカルセマンティクス(isAdjustedToUTC が false)のタイムスタンプを読み取る際、セッションタイムゾーンのオフセット分だけ値をシフトしていました。現在は書き込まれたままの値が返されます。セッションタイムゾーンが UTC でない場合、同じファイルから返される値は以前のバージョンと異なります(現在の動作は Parquet 仕様に準拠しています)。
parquet.use_legacy_encoding
DATETIME および DECIMAL データ型に使用されるエンコーディング技術を制御します。 有効な値: true および false (デフォルト)。このプロパティはデータアンロードにのみサポートされています。
この項目が true に設定されている場合:
- DECIMAL 型の場合、システムは
fixed_len_byte_arrayエンコーディングを使用します。 - DATETIME 型の場合、システムは
INT96エンコーディングを使用します。
この項目が false に設定されている場合:
- DECIMAL 型の場合、システムは
INT32またはINT64エンコーディングを使用します。 - DATETIME 型の場合、システムは
INT64エンコーディングを使用します。- インスタントセマンティクス:Parquet の TIMESTAMP型に対して
isAdjustedToUTCがtrueに設定されている場合、システムは UTC に正規化されたタイムスタンプを出力します。各値はタイムライン上の単一の瞬間を明確に特定し、特定のタイムゾーンに変換することができます。 - ローカルセマンティクス:Parquet の TIMESTAMP 型に対して
isAdjustedToUTCがfalseに設定されている場合、システムは、どのタイムゾーンがローカルとみなされるかに関係なく、ローカルタイムゾーンにおける年、月、日、時、分、秒、およびサブ秒を表すタイムスタンプを出力します。このような値は、適用されているローカルタイムゾーンに関係なく常に同じ形式で表示され、タイムライン上の特定の瞬間を特定するものではありません。
- インスタントセマンティクス:Parquet の TIMESTAMP型に対して
DECIMAL 128 データ型の場合、fixed_len_byte_array エンコーディングのみが利用可能です。parquet.use_legacy_encoding は効果を持ちません。
parquet.version
システムがデータをアンロードする Parquet バージョンを制御します。v3.4.6 以降でサポートされています。 有効な値: 1.0, 2.4, および 2.6 (デフォルト)。このプロパティはデータアンロードにのみサポートされています。
CSV
CSV 形式の例:
"format"="csv",
"csv.column_separator"="\\t",
"csv.enclose"='"',
"csv.skip_header"="1", -- ロードのみ
"csv.escape"="\\"