メインコンテンツまでスキップ
バージョン: 26.2 Preview

ファイル外部テーブル

ファイル外部テーブルは特別なタイプの外部テーブルです。データを StarRocks にロードすることなく、外部ストレージシステム内の Parquet および ORC データファイルを直接クエリすることができます。さらに、ファイル外部テーブルはメタストアに依存しません。現在のバージョンでは、StarRocks は以下の外部ストレージシステムをサポートしています: Amazon S3 および Google Cloud Storage (GCS)。

この機能は StarRocks v2.5 からサポートされています。

注記
  • v3.1 以降、StarRocks は INSERT コマンドと FILES 関数を使用してクラウドストレージ上のファイルから直接データをロードすることをサポートしています。これにより、最初に external catalog やファイル外部テーブルを作成する必要がありません。さらに、FILES() はファイルのテーブルスキーマを自動的に推測でき、データロードのプロセスを大幅に簡素化します。
  • ファイル外部テーブル機能は、StarRocks にデータをロードするために設計されており、通常の操作として外部システムに対して効率的なクエリを実行するためのものではありません。よりパフォーマンスの高いソリューションは、データを StarRocks にロードすることです。

制限事項​

  • ファイル外部テーブルは、default_catalog 内のデータベースに作成する必要があります。クラスター内で作成された catalog をクエリするには、SHOW CATALOGS を実行します。
  • Parquet および ORC データファイルのみがサポートされています。
  • ファイル外部テーブルを使用して、ターゲットデータファイル内のデータをクエリすることのみが可能です。INSERT、DELETE、DROP などのデータ書き込み操作はサポートされていません。

前提条件​

ファイル外部テーブルを作成する前に、ターゲットデータファイルが保存されている外部ストレージシステムに StarRocks がアクセスできることを確認する必要があります。詳細については、AWS リソースへの認証 および Google Cloud Storage への認証 を参照してください。

データベースの作成 (オプション)​

StarRocks クラスターに接続した後、既存のデータベースにファイル外部テーブルを作成するか、ファイル外部テーブルを管理するための新しいデータベースを作成できます。クラスター内の既存のデータベースをクエリするには、SHOW DATABASES を実行します。その後、USE <db_name> を実行してターゲットデータベースに切り替えることができます。

データベースを作成するための構文は以下の通りです。

CREATE DATABASE [IF NOT EXISTS] <db_name>

ファイル外部テーブルの作成​

ターゲットデータベースにアクセスした後、このデータベースにファイル外部テーブルを作成できます。

構文​

CREATE EXTERNAL TABLE <table_name>
(
<col_name> <col_type> [NULL | NOT NULL] [COMMENT "<comment>"]
)
ENGINE=file
COMMENT ["comment"]
PROPERTIES
(
FileLayoutParams,
StorageCredentialParams
)

パラメータ​

パラメータ必須説明
table_nameYesファイル外部テーブルの名前。命名規則は以下の通りです:
  • 名前には文字、数字 (0-9)、およびアンダースコア (_) を含めることができます。文字で始める必要があります。
  • 名前は64文字を超えてはなりません。
col_nameYesファイル外部テーブルの列名。ファイル外部テーブルの列名はターゲットデータファイルの列名と同じである必要がありますが、大文字と小文字は区別されません。ファイル外部テーブルの列の順序は、ターゲットデータファイルの順序と異なる場合があります。
col_typeYesファイル外部テーブルの列タイプ。このパラメータは、ターゲットデータファイルの列タイプに基づいて指定する必要があります。詳細については、列タイプのマッピング を参照してください。
NULL | NOT NULLNoファイル外部テーブルの列が NULL を許可するかどうか。
  • NULL: NULL を許可します。
  • NOT NULL: NULL を許可しません。
この修飾子は以下のルールに基づいて指定する必要があります:
  • ターゲットデータファイルの列にこのパラメータが指定されていない場合、ファイル外部テーブルの列に対してこのパラメータを指定しないか、NULL を指定することができます。
  • ターゲットデータファイルの列に NULL が指定されている場合、ファイル外部テーブルの列に対してこのパラメータを指定しないか、NULL を指定することができます。
  • ターゲットデータファイルの列に NOT NULL が指定されている場合、ファイル外部テーブルの列にも NOT NULL を指定する必要があります。
commentNoファイル外部テーブルの列のコメント。
ENGINEYesエンジンのタイプ。値を file に設定します。
commentNoファイル外部テーブルの説明。
PROPERTIESYes
  • FileLayoutParams: ターゲットファイルのパスと形式を指定します。このプロパティは必須です。
  • StorageCredentialParams: AWS S3 または GCS にアクセスするために必要な認証情報を指定します。

FileLayoutParams​

ターゲットデータファイルにアクセスするための一連のパラメータ。

"path" = "<file_path>",
"format" = "<file_format>",
"enable_recursive_listing" = "{ true | false }"
パラメータ必須説明
pathYesデータファイルのパス。
  • データファイルが AWS S3 に保存されている場合、パス形式は s3://<バケット名>/<フォルダ>/ です。
  • データファイルが GCS に保存されている場合、パス形式は gs://<バケット名>/<フォルダ>/ です。
パスを入力する際のルールは以下の通りです:
  • パス内のすべてのファイルにアクセスしたい場合、このパラメータをスラッシュ (/) で終わらせます。例: s3://bucket-test/folder1/。クエリを実行すると、StarRocks はパス下のすべてのデータファイルをトラバースします。再帰的にデータファイルをトラバースすることはありません。
  • 単一のファイルにアクセスしたい場合、このファイルを直接指すパスを入力します。例: s3://bucket-test/folder1/raw_0.parquet。クエリを実行すると、StarRocks はこのデータファイルのみをスキャンします。
formatYesデータファイルの形式。有効な値: parquet および orc。
enable_recursive_listingNo現在のパス下のすべてのファイルを再帰的にトラバースするかどうかを指定します。デフォルト値: false。値 true はサブディレクトリを再帰的にリストすることを指定し、値 false はサブディレクトリを無視することを指定します。

StorageCredentialParams​

ターゲットストレージシステムと StarRocks を統合する方法に関する一連のパラメータ。

ターゲットデータファイルが AWS S3 に保存されている場合は、次のセクションで説明するパラメータを構成します。ターゲットデータファイルが GCS に保存されている場合は、Google Cloud Storage への認証 の説明に従って StorageCredentialParams を構成します。

AWS S3​

AWS S3 に保存されたデータファイルにアクセスする必要がある場合、StorageCredentialParams に以下の認証パラメータを構成します。

  • インスタンスプロファイルベースの認証方法を選択した場合、StorageCredentialParams を次のように構成します:
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "<aws_s3_region>"
  • 想定ロールベースの認証方法を選択した場合、StorageCredentialParams を次のように構成します:
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "<ARN of your assumed role>",
"aws.s3.region" = "<aws_s3_region>"
  • IAM ユーザーベースの認証方法を選択した場合、StorageCredentialParams を次のように構成します:
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "<aws_s3_region>"
パラメータ名必須説明
aws.s3.use_instance_profileYesAWS S3 にアクセスする際にインスタンスプロファイルベースの認証方法と想定ロールベースの認証方法を有効にするかどうかを指定します。 有効な値: true および false。デフォルト値: false。
aws.s3.iam_role_arnYesAWS S3 バケットに対する権限を持つ IAM ロールの ARN。
AWS S3 にアクセスするために想定ロールベースの認証方法を使用する場合、このパラメータを指定する必要があります。その後、StarRocks はターゲットデータファイルにアクセスする際にこのロールを想定します。
aws.s3.regionYesAWS S3 バケットが存在するリージョン。例: us-west-1。
aws.s3.access_keyNoIAM ユーザーのアクセスキー。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
aws.s3.secret_keyNoIAM ユーザーのシークレットキー。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。

AWS S3 にアクセスするための認証方法の選択方法と AWS IAM コンソールでのアクセス制御ポリシーの構成方法については、AWS S3 へのアクセスのための認証パラメータ を参照してください。

列タイプのマッピング​

以下の表は、ターゲットデータファイルとファイル外部テーブル間の列タイプのマッピングを提供します。

データファイルファイル外部テーブル
INT/INTEGERINT
BIGINTBIGINT
TIMESTAMPDATETIME.
TIMESTAMP は現在のセッションのタイムゾーン設定に基づいてタイムゾーンなしの DATETIME に変換され、精度の一部が失われることに注意してください。
STRINGSTRING
VARCHARVARCHAR
CHARCHAR
DOUBLEDOUBLE
FLOATFLOAT
DECIMALDECIMAL
BOOLEANBOOLEAN
ARRAYARRAY
MAPMAP
STRUCTSTRUCT

例​

AWS S3​

例 1: ファイル外部テーブルを作成し、インスタンスプロファイル を使用して AWS S3 の 単一の Parquet ファイル にアクセスします。

USE db_example;

CREATE EXTERNAL TABLE table_1
(
name string,
id int
)
ENGINE=file
PROPERTIES
(
"path" = "s3://bucket-test/folder1/raw_0.parquet",
"format" = "parquet",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
);

例 2: ファイル外部テーブルを作成し、想定ロール を使用して AWS S3 のターゲットファイルパス下の すべての ORC ファイル にアクセスします。

USE db_example;

CREATE EXTERNAL TABLE table_1
(
name string,
id int
)
ENGINE=file
PROPERTIES
(
"path" = "s3://bucket-test/folder1/",
"format" = "orc",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::51234343412:role/role_name_in_aws_iam",
"aws.s3.region" = "us-west-2"
);

例 3: ファイル外部テーブルを作成し、IAM ユーザー を使用して AWS S3 のファイルパス下の すべての ORC ファイル にアクセスします。

USE db_example;

CREATE EXTERNAL TABLE table_1
(
name string,
id int
)
ENGINE=file
PROPERTIES
(
"path" = "s3://bucket-test/folder1/",
"format" = "orc",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "us-west-2"
);

ファイル外部テーブルをクエリする​

構文:

SELECT <clause> FROM <file_external_table>

例えば、例 - AWS S3 で作成したファイル外部テーブル table_1 からデータをクエリするには、次のコマンドを実行します:

SELECT * FROM table_1;

+--------+------+
| name | id |
+--------+------+
| jack | 2 |
| lily | 1 |
+--------+------+
2 rows in set (0.08 sec)

ファイル外部テーブルを管理する​

DESC を使用してテーブルのスキーマを表示したり、DROP TABLE を使用してテーブルを削除したりできます。