Athena から S3 テーブルのバケットカタログを登録し、テーブルをクエリする
Amazon S3 テーブルバケットは、Amazon S3 のバケットの一種で、Apache Iceberg テーブルに表形式データを保存するために専用に構築されています。テーブルバケットは、圧縮、スナップショット管理、ガベージコレクションなどのテーブル管理タスクを自動化して、クエリのパフォーマンスを継続的に最適化し、コストを最小限に抑えます。Iceberg 環境を始めたばかりの場合でも、Iceberg 環境に何千ものテーブルがある場合でも、テーブルバケットはあらゆる規模でデータレイクを簡素化します。詳細については、「Table buckets」を参照してください。
考慮事項と制限事項
-
Iceberg テーブルでサポートされているすべての DDL オペレーションは、S3 Tables でもサポートされていますが、以下の例外があります。
-
ALTER TABLE RENAME、CREATE VIEW、ALTER DATABASEはサポートされていません。 -
OPTIMIZEおよびVACUUM– S3 で圧縮とスナップショットの管理を行うことができます。詳細については、「S3 Tables のメンテナンスドキュメント」を参照してください。
-
-
Athena データソースとして登録された S3 Tables での DDL クエリはサポートされていません。
-
クエリ結果の再利用はサポートされていません。
-
SSE-KMS、CSE-KMS 暗号化が有効になっているワークグループでは、
INSERT、UPDATE、DELETE、またはMERGEなどの書き込みオペレーションを S3 Tables で実行することはできません。 -
S3 リクエスタ支払いオプションが有効になっているワークグループでは、S3 Tables で DML オペレーションを実行できません。
Athena から S3 Tables をクエリする
Athena で S3 Tables をクエリする前に、以下の前提条件となる手順を実行する
S3 テーブルバケットを作成します。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「テーブルバケットの作成」を参照してください。
-
テーブルバケットと AWS Glue Data Catalog の統合が成功していることを確認します。必要なアクセス許可とセットアップ手順については、「AWS Glue デベロッパーガイド」の「S3 Tables 統合の前提条件」および「S3 Tables と Glue Data Catalog の統合の有効化」を参照してください。
Athena でクエリを実行するために使用されるプリンシパルには、次のいずれかのアプローチを使用して S3 Table カタログに対するアクセス許可を付与します。
オプション 1: IAM アクセス許可を使用する
IAM アクセスコントロールを使用する場合、プリンシパルには AWS Glue Data Catalog リソースと Amazon S3 Tables リソースの両方に対するアクセス許可が必要です。
次のリストには、Athena の S3 テーブルに対してサポートされている DDL または DML オペレーションを実行する上で必要なすべての
s3tablesアクセス許可が含まれています。s3tables:GetTableBuckets3tables:GetNamespaces3tables:GetTables3tables:GetTableDatas3tables:PutTableDatas3tables:ListNamespacess3tables:ListTabless3tables:DeleteNamespaces3tables:DeleteTables3tables:CreateNamespaces3tables:CreateTables3tables:UpdateTableMetadataLocation
これらのアクセス許可を特定の S3 テーブルバケットと S3 テーブルリソースに適用するか、
*をリソースとして使用して、アカウント内のすべてのテーブルバケットとテーブルへのアクセスを許可します。これらのアクセス許可をAmazonAthenaFullAccess管理ポリシーと組み合わせて、完全な機能を有効にできます。オプション 2: Lake Formation アクセス許可を使用する
または、きめ細かなアクセスコントロールを有効にするには、Lake Formation コンソールまたは AWS CLI を使用して、S3 Table カタログに対する Lake Formation アクセス許可を付与できます。これには、S3 テーブルバケットを Lake Formation データロケーションとして登録する必要があります。詳細については、「Lake Formation デベロッパーガイド」の「AWS Glue Data Catalog での Amazon S3 Tables カタログの作成」を参照してください。
S3 Tables のクエリを送信する
上記で付与されたユーザー/ロールを使用して、Athena から
CREATE DATABASEクエリを送信します。この例では、s3tablescatalogは統合から作成された親 Glue データカタログで、s3tablescatalog/は各 S3 テーブルバケット用に作成された子 Glue データカタログです。クエリを実行する方法は 2 つあります。amzn-s3-demo-bucket-
前のステップで作成したデータベースで、
CREATE TABLEを使用してテーブルを作成します。次の例では、s3tablescatalog/Glue カタログで以前に作成したamzn-s3-demo-bucketデータベースにテーブルを作成します。test_namespace -
前のステップで作成したテーブルにデータを挿入します。
-
テーブルにデータを挿入したら、クエリを実行できます。
Athena で S3 Tables を作成する
Athena では、既存の S3 テーブル名前空間でのテーブルの作成、または Athena で CREATE DATABASE ステートメントを使用して作成された名前空間の作成がサポートされています。Athena から S3 テーブルを作成するには、次の例に示すように、LOCATION を指定しない点を除いて、通常の Iceberg テーブルを作成する場合と同じ構文を使用します。
CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] [TBLPROPERTIES ([, property_name=property_value] )]
CREATE TABLE AS SELECT (CTAS) ステートメントを使用して S3 テーブルを作成することもできます。詳細については、「S3 テーブル向けの CTAS」を参照してください。
Athena データソースとして S3 テーブルバケットカタログを登録する
S3 テーブルバケットカタログを Athena コンソールに登録するには、次の手順を実行します。
-
https://console.aws.amazon.com/athena/
で Athena コンソールを開きます。 -
ナビゲーションペインで、[データソースとカタログ] を選択します。
-
[データソースとカタログ] ページで [データソースを作成] を選択します。
-
[データソースを選択] で、[Amazon S3 - AWS Glue Data Catalog] を選択します。
-
[AWS Glue Data Catalog] セクションの [データソースアカウント] で、[このアカウントの AWS Glue Data Catalog] を選択します。
-
[テーブルの作成またはカタログの登録] で、[新しい AWS Glue カタログを登録] を選択します。
-
[データソースの詳細] セクションの [データソース名] に、SQL クエリでデータソースを指定するために使用する名前を入力するか、生成されたデフォルト名を使用します。
-
[カタログ] で、[参照] を選択して、同じアカウントの AWS Glue カタログのリストを検索します。既存のカタログが表示されない場合は、AWS Glue コンソール
で作成します。 -
[AWS Glue カタログを参照] ダイアログボックスで、使用するカタログを選択し、[選択] を選択します。
-
(オプション) [タグ] では、データソースと関連付けるキーと値のペアがあれば入力します。
-
[次へ] を選択します。
-
[確認と作成] ページで、入力した情報が正しいことを確認し、[データソースを作成] を選択します。
S3 テーブル向けの CTAS
Amazon Athena で S3 テーブル向けの CREATE TABLE AS SELECT (CTAS) オペレーションが現在サポートされています。この機能を使用すると、SELECT クエリの結果に基づいて新しい S3 テーブルを作成できます。
S3 テーブルの CTAS クエリを作成する際には、標準の Athena テーブルと比べていくつかの重要な違いがあります。
-
S3 Tables は独自のストレージロケーションを自動的に管理するため、ロケーションプロパティを省略する必要があります。
-
table_typeプロパティはデフォルトでICEBERGになるため、クエリで明示的に指定する必要はありません。 -
形式を指定しない場合、システムは自動的にデータのデフォルト形式として
PARQUETを使用します。 -
他のすべてのプロパティは、通常の Iceberg テーブルと同じ構文に従います。
CTAS を使用して S3 Tables を作成する前に、IAM または AWS Lake Formation で必要なアクセス許可が設定されていることを確認してください。具体的には、S3 Tables カタログにテーブルを作成するためのアクセス許可が必要です。これらのアクセス許可がないと、CTAS オペレーションは失敗します。
注記
CTAS クエリが失敗した場合、クエリを再実行する前に S3 Tables API を使用してテーブルの削除が必要な場合があります。Athena DROP TABLE ステートメントを使用して、クエリによって部分的に作成されたテーブルを削除することはできません。
例
CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name" WITH ( format = 'PARQUET' ) AS SELECT * FROMsource_table;