FILES
説明
リモートストレージ内のデータファイルを定義します。
バージョン v3.1.0 以降、StarRocks はリモートストレージ内の読み取り専用ファイルをテーブル関数 FILES() を使用して定義することをサポートしています。ファイルのパス関連プロパティを使用してリモートストレージにアクセスし、ファイル内のデータのテーブルスキーマを推測し、データ行を返します。SELECT を使用してデータ行を直接クエリしたり、INSERT を使用して既存のテーブルにデータ行をロードしたり、CREATE TABLE AS SELECT を使用して新しいテーブルを作成し、データ行をロードすることができます。
バージョン v3.2.0 以降、FILES() はリモートストレージ内のファイルにデータを書き込むことをサポートしています。INSERT INTO FILES() を使用して StarRocks からリモートストレージにデータをアンロードできます。
現在、FILES() 関数は以下のデータソースとファイル形式をサポートしています:
- データソース:
- HDFS
- AWS S3
- Google Cloud Storage
- その他の S3 互換ストレージシステム
- Microsoft Azure Blob Storage
- ファイル形式:
- Parquet
- ORC (データアンロードには現在サポートされていません)
構文
-
データロード:
FILES( data_location , data_format [, StorageCredentialParams ] [, columns_from_path ] ) -
データアンロード:
FILES( data_location , data_format [, StorageCredentialParams ] , unload_data_param )
パラメータ
すべてのパラメータは "key" = "value" のペアで指定します。
data_location
ファイルにアクセスするための URI です。
パスまたはファイルを指定できます。たとえば、このパラメータを "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/20210411" と指定して、HDFS サーバーのパス /user/data/tablename から 20210411 という名前のデータファイルをロードできます。
ワイルドカード ?, *, [], {}, または ^ を使用して複数のデータファイルの保存パスとしてこのパラメータを指定することもできます。たとえば、このパラメータを "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/*/*" または "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/dt=202104*/*" と指定して、HDFS サーバーのパス /user/data/tablename 内のすべてのパーティションまたは 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"
-
data_format
データファイルの形式です。有効な値は parquet と orc です。
schema_detect
バージョン v3.2 以降、FILES() は同じバッチのデータファイルの自動スキーマ検出と統合をサポートしています。StarRocks はまず、バッチ内のランダムなデータファイルの特定のデータ行をサンプリングすることでデータのスキーマを検出します。その後、StarRocks はバッチ内のすべてのデータファイルから列を統合します。
サンプリングルールは次のパラメータを使用して設定できます:
auto_detect_sample_files: 各バッチでサンプリングするランダムなデータファイルの数。範囲: [0, + ∞]。デフォルト:1。auto_detect_sample_rows: 各サンプリングされたデータファイルでスキャンするデータ行の数。範囲: [0, + ∞]。デフォルト:500。
サンプリング後、StarRocks は次のルールに従ってすべてのデータファイルから列を統合します:
- 異なる列名またはインデックスを持つ列は、それぞれ個別の列として識別され、最終的にすべての個別の列の統合が返されます。
- 同じ列名を持つが異なるデータ型を持つ列は、同じ列として識別されますが、相対的に細かい粒度レベルで一般的なデータ型を持ちます。たとえば、ファイル A の列
col1が INT で、ファイル B では DECIMAL の場合、返される列では DOUBLE が使用されます。- すべての整数列は、全体的に粗い粒度レベルで整数型として統合されます。
- 整数列と FLOAT 型の列は、DECIMAL 型として統合されます。
- 他の型を統合するために文字列型が使用されます。
- 一般的に、STRING 型はすべてのデータ型を統合するために使用できます。
Example 6 を参照してください。
StarRocks がすべての列を統合できない場合、エラー情報とすべてのファイルスキーマを含むスキーマエラーレポートを生成します。
注意
単一バッチ内のすべてのデータファイルは同じファイル形式である必要があります。
StorageCredentialParams
StarRocks がストレージシステムにアクセスするために使用する認証情報です。
StarRocks は現在、HDFS へのシンプル認証、AWS S3 および GCS への IAM ユーザー認証、Azure Blob Storage への共有キー認証をサポートしています。
-
シンプル認証を使用して HDFS にアクセスする:
"hadoop.security.authentication" = "simple",
"username" = "xxxxxxxxxx",
"password" = "yyyyyyyyyy"キー 必須 説明 hadoop.security.authentication いいえ 認証方法。有効な値: simple(デフォルト)。simpleはシンプル認証を表し、認証を行わないことを意味します。username はい HDFS クラスターの NameNode にアクセスするために使用するアカウントのユーザー名。 password はい HDFS クラスターの NameNode にアクセスするために使用するアカウントのパスワード。 -
IAM ユーザー認証を使用して AWS S3 にアクセスする:
"aws.s3.access_key" = "AAAAAAAAAAAAAAAAAAAA",
"aws.s3.secret_key" = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"aws.s3.region" = "<s3_region>"キー 必須 説明 aws.s3.access_key はい Amazon S3 バケットにアクセスするために使用できるアクセスキー ID。 aws.s3.secret_key はい Amazon S3 バケットにアク セスするために使用できるシークレットアクセスキー。 aws.s3.region はい AWS S3 バケットが存在するリージョン。例: us-west-2。 -
IAM ユーザー認証を使用して GCS にアクセスする:
"fs.s3a.access.key" = "AAAAAAAAAAAAAAAAAAAA",
"fs.s3a.secret.key" = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"fs.s3a.endpoint" = "<gcs_endpoint>"キー