メインコンテンツまでスキップ

ファイル外部テーブル

このトピックでは、AWS S3 内の Parquet および ORC データファイルを直接クエリするためのファイル外部テーブルの使用方法について説明します。

使用上の注意

  • ファイル外部テーブルは default_catalog 内のデータベースに作成する必要があります。
  • サポートされているのは Parquet および ORC データファイルのみです。
  • ファイル外部テーブルはデータのクエリにのみ使用できます。ターゲットデータファイルへの INSERT、DELETE、および DROP 操作はサポートされていません。

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

構文

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 | NOT NULL 修飾子は次のルールに基づいて指定する必要があります。
  • ターゲットデータファイルの列に NULL | NOT NULL が指定されていない場合、ファイル外部テーブルの列に NULL | NOT NULL を指定しないか、ファイル外部テーブルの列に NULL を指定することができます。
  • ターゲットデータファイルの列に NULL が指定されている場合、ファイル外部テーブルの列に NULL | NOT NULL を指定しないか、ファイル外部テーブルの列に NULL を指定することができます。
  • ターゲットデータファイルの列に NOT NULL が指定されている場合、ファイル外部テーブルの列にも NOT NULL を指定する必要があります。
commentNoファイル外部テーブルの列のコメント。
ENGINEYesエンジンのタイプ。値を file に設定します。
commentNoファイル外部テーブルの説明。

ファイルの読み取り方法と AWS 認証サービス (AWS IAM) との統合を説明するために、PROPERTIES 内で FileLayoutParamsStorageCredentialParams を設定する必要があります。

FileLayoutParams

FileLayoutParams :: = 
"path" = "<file_path>",
"format" = "<file_format>"
パラメータ必須説明
pathYesAmazon S3 に保存されているデータファイルのパス。パスの形式は s3://<bucket name>/<folder>/ です。パスを入力する際には次のルールに注意してください。
  • path パラメータの値がスラッシュ / で終わる場合、例えば s3://<bucket name>/<folder>/ のように、Celerdata はそれをパスとして扱います。クエリを実行すると、Celerdata はそのパスの下にあるすべてのデータファイルをトラバースします。デフォルトでは再帰的にデータファイルをトラバースしません。
  • path パラメータの値が / で終わらない場合、例えば s3://<bucket name>/<folder> のように、Celerdata はそれを単一のデータファイルとして扱います。クエリを実行すると、Celerdata はこのデータファイルのみをスキャンします。
formatYesデータファイルの形式。サポートされているのは Parquet および ORC のみです。
enable_recursive_listingNo現在のパスの下にあるすべてのファイルを再帰的にトラバースするかどうかを指定します。デフォルト値: false

StorageCredentialParams

AWS S3

ファイルストレージとして AWS S3 を選択する場合、次のパラメータを設定します。

-- S3 にアクセスする際の認証方法としてインスタンスプロファイルを選択します。
StorageCredentialParams (for AWS S3) :: =
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "<aws_s3_region>"

-- S3 にアクセスする際の認証方法としてアサインされたロールを選択します。
StorageCredentialParams (for AWS S3) :: =
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "<ARN of your assumed role>",
"aws.s3.region" = "<aws_s3_region>"
パラメータ名必須説明
aws.s3.use_instance_profileYesAWS S3 にアクセスする際の認証方法としてインスタンスプロファイルとアサインされたロールを有効にするかどうかを指定します。有効な値: true および falsetrue は Celerdata が両方の認証方法を使用できることを許可します。デフォルト値: true
aws.s3.iam_role_arnYesターゲットデータファイルが保存されている S3 バケットに対する権限を持つ IAM ロールの ARN。AWS S3 にアクセスする際の認証方法としてアサインされたロールを使用する場合、このパラメータを指定する必要があります。Celerdata は、catalog を使用して Hive データを分析する際にこのロールをアサインします。
aws.s3.regionYesS3 バケットが存在するリージョン、例えば us-west-1

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

列タイプのマッピング

次の表は、ターゲットデータファイルとファイル外部テーブル間の列タイプのマッピングを示しています。

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

ファイル外部テーブルを使用したデータの分析

SELECT COUNT(*) FROM <file_external_table>

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

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 ファイルにアクセスします。

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"
);