Amazon Redshift から Amazon S3 Tables をクエリする - Amazon Redshift

Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、ブログ記事を参照してください。

Amazon Redshift から Amazon S3 Tables をクエリする

Amazon Redshift は Amazon S3 テーブルバケットと統合されているため、Amazon Redshift を使用して S3 テーブルリソースにアクセスできます。Iceberg 環境を始めたばかりの場合でも、Iceberg 環境で何千ものテーブルを管理している場合でも、テーブルバケットはあらゆる規模のデータレイク管理を簡素化します。詳細については、「Table buckets」を参照してください。

このトピックでは、Amazon S3 Tables と Redshift の使用を開始し、Amazon Redshift を使用して S3 Tables オブジェクトにアクセスする方法について説明します。

前提条件

Amazon Redshift から S3 Tables をクエリする前に、S3 Tables を AWS Glue Data Catalog と統合する必要があります。手順については、「Amazon S3 Tables と AWS Glue Data Catalog の統合」を参照してください。

S3 Tables を AWS Glue Data Catalog と統合すると、S3 Tables および AWS Glue への必要な IAM アクセス許可を持つ IAM プリンシパルは、AWS Glue Data Catalog を通じて S3 Tables を検出できます。

注記

方法 3 (自動マウントされた awsdatacatalog) には、追加の前提条件があります。詳細については、「方法 3: 自動マウントされた awsdatacatalog」を参照してください。

Amazon Redshift から S3 Tables をクエリする

S3 Tables のクエリを開始するには、以下のステップに従います。

  • ステップ 1: Amazon Redshift 用の IAM ロールを作成する

  • ステップ 2: IAM ロールを Amazon Redshift クラスターにアタッチする

  • ステップ 3: Amazon Redshift から S3 Tables をクエリする

ステップ 1: Amazon Redshift 用の IAM ロールを作成する

クラスターは、AWS Glue の外部 S3 Tables カタログにアクセスするために承認を必要とします。この承認を提供するために、Amazon Redshift は、クラスターにアタッチされた IAM ロールを使用します。以下のポリシー許可を持つ IAM ロールを作成します。

注記

以下のポリシーと例では、us-west-2 を AWS リージョンに、111122223333 を AWS アカウント ID に置き換えてください。

ポリシーを作成するには:

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、ポリシー を選択してください。

  3. [Create policy] (ポリシーを作成) を選択します。

  4. JSON タブを選択します。

  5. 次の JSON ポリシードキュメントを貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "GlueDataCatalogPermissions", "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetDatabase", "glue:GetTable", "glue:GetTables", "glue:UpdateTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog", "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog/*", "arn:aws:glue:us-west-2:111122223333:database/s3tablescatalog/*/*", "arn:aws:glue:us-west-2:111122223333:table/s3tablescatalog/*/*/*", "arn:aws:glue:us-west-2:111122223333:database/*", "arn:aws:glue:us-west-2:111122223333:table/*/*" ] }, { "Sid": "S3TablesDataAccessPermissions", "Effect": "Allow", "Action": [ "s3tables:GetTableBucket", "s3tables:GetNamespace", "s3tables:GetTable", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData", "s3tables:ListTableBuckets", "s3tables:CreateTable", "s3tables:PutTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:ListNamespaces", "s3tables:ListTables", "s3tables:DeleteTable" ], "Resource": [ "arn:aws:s3tables:us-west-2:111122223333:bucket/*", "arn:aws:s3tables:us-west-2:111122223333:bucket/*/table/*" ] } ] }
  6. [ポリシーの確認] を選択します。

  7. [ポリシーを確認] ページで [名前] に「GlueCatalogS3Tables_Policy」と入力します。必要に応じて説明を入力します。ポリシーの概要を確認して、[ポリシーを作成] を選択します。

Amazon Redshift 用の IAM ロールを作成するには:

  1. IAM コンソールを開きます。

  2. ナビゲーションペインで [ロール] を選択します。

  3. [ロールの作成] を選択してください。

  4. [AWS のサービス] を信頼されたエンティティとして選択し、次に [Redshift] をユースケースとして選択します。

  5. [他の AWS サービスのユースケース] で、[Redshift - カスタマイズ可能][次へ] の順に選択します。

  6. [アクセス許可を追加] ページで、上で作成した GlueCatalogS3Tables_Policy ポリシーをアタッチします。[次へ] を選択します。

  7. [ロール名] に、RedshiftS3TablesRoleなどのロール名を入力します。

  8. 情報を確認し、[ロールを作成] を選択します。

  9. ナビゲーションペインで Roles (ロール) を選択してください。新しいロールの名前を選択して概要を確認し、次にロール ARN をクリップボードにコピーします。この ARN は、S3 Tables 名前空間の外部スキーマを作成するときに使用します。

注記

特定のリソースに絞り込むには、ワイルドカードを正確な Amazon リソースネーム (ARN) に置き換えます。

ステップ 2: IAM ロールを Amazon Redshift クラスターにアタッチする

ステップ 1 で設定した IAM ロールを Amazon Redshift クラスターに関連付けます。

AWS マネジメントコンソールの使用:

  1. AWS マネジメントコンソールにサインインして Amazon Redshift コンソール (https://console.aws.amazon.com/redshiftv2/) を開きます。

  2. ナビゲーションメニューで [Clusters] (クラスター) を選択し、更新するクラスターを選択します。

  3. [アクション][IAM ロールを管理] を選択し、クラスターに現在関連付けられている IAM ロールのリストを表示します。

  4. [IAM ロールを管理] ページで、追加する IAMロールを選択し、[IAM ロールを追加] を選択します。

  5. [完了] を選択して変更を保存します。

AWS CLI の使用:

次のコマンドを実行して、IAM ロールを既存のクラスターまたは名前空間に関連付けます。my-redshift-cluster または my-redshift-namespace をクラスター識別子または名前空間に置き換え、111122223333 を AWS アカウント ID に置き換えます。

aws redshift modify-cluster-iam-roles \ --cluster-identifier my-redshift-cluster \ --add-iam-roles arn:aws:iam::111122223333:role/RedshiftS3TablesRole -- for serverless aws redshift-serverless update-namespace \ --namespace-name my-redshift-namespace \ --iam-roles "arn:aws:iam::111122223333:role/RedshiftS3TablesRole"

詳細については、「Amazon Redshift 管理ガイド」の「IAM ロールをクラスターと関連付ける」を参照してください。

ステップ 3: Amazon Redshift から S3 Tables をクエリする

S3 Tables を AWS Glue Data Catalog と統合すると、サービスは S3 Tables リソースを AWS Glue カタログオブジェクトにマッピングするフェデレーションカタログ構造を作成します。

  • S3 テーブルバケットは、AWS Glue Data Catalog のカタログになります。

  • S3 名前空間は AWS Glue データベースになります。

  • S3 テーブルは AWS Glue テーブルオブジェクトになります。

統合により、次の階層が作成されます。

  • フェデレーションカタログ: s3tablescatalog (自動作成)

  • 子カタログ: 各 S3 テーブルバケットは、s3tablescatalog の子カタログになります。

  • データベース: テーブルバケット内の各 S3 名前空間はデータベースになります。

  • テーブル: 名前空間内の各 S3 テーブルはテーブルになります。

例えば、テーブル transactions を含む名前空間 sales を持つ analytics-bucket という名前の S3 テーブルバケットがある場合、AWS Glue Data Catalog のフルパスは s3tablescatalog/analytics-bucket/sales/transactions になります。

リソースリンクを作成する

以下の 3 つのクエリ方法のいずれかを使用する前に、AWS Glue Data Catalog でリソースリンクを作成する必要があります。リソースリンクを使用すると、Amazon Redshift は標準カタログを通じて S3 Tables データベースを参照できます。

AWS Glue コンソールの使用:

  1. https://console.aws.amazon.com/glue/ で AWS Glue コンソール を開きます。

  2. ナビゲーションペインで、[Databases] (データベース) を選択します。

  3. [作成][リソースリンク] の順に選択します。

  4. [リソースリンクの作成] ページで、以下の情報を入力します。

    • リソースリンク名: リソースリンクの名前を入力します (例: sales_resource_link)。

    • 共有データベース: S3 Tables データベースパス (s3tablescatalog/analytics-bucket/sales など) を入力します。

    • 共有データベース所有者: AWS アカウント ID を入力します。

    • 共有データベースのカタログ ID: カタログ ID を <account-id>:s3tablescatalog/<bucket-name> 形式で入力します。

  5. [作成] を選択します。

AWS CLI の使用:

aws glue create-database \ --region us-west-2 \ --cli-input-json '{ "CatalogId": "111122223333", "DatabaseInput": { "Name": "sales_resource_link", "TargetDatabase": { "CatalogId": "111122223333:s3tablescatalog/analytics-bucket", "DatabaseName": "sales" } } }'

このコマンドは、S3 テーブルバケット analytics-bucketsales データベースを指す sales_resource_link という名前のリソースリンクを、デフォルトの AWS Glue データカタログに作成します。

リソースリンクを作成すると、Amazon Redshift は S3 Tables をクエリする 3 つの方法を提供します。ユースケースに最適な方法を選択してください。

注記

データベースレベルでリソースリンクを作成するには、デフォルトのカタログと作成対象のデータベースに対する AWS Glue:CreateDatabase アクセス許可が Redshift 管理者に必要です。

方法 1: CREATE EXTERNAL SCHEMA (外部スキーマを作成する)

CREATE EXTERNAL SCHEMA を使用して、S3 Tables データベースを参照する外部スキーマを作成します。この方法では、スキーマの命名と設定を明示的に制御します。

構文の詳細については、「Amazon Redshift データベースデベロッパーガイド」の「CREATE EXTERNAL SCHEMA」を参照してください。

ステップ 3 のデータベース名とカタログ ID を使用します。111122223333 を AWS アカウント ID に置き換えます。

CREATE EXTERNAL SCHEMA s3tables_schema FROM DATA CATALOG DATABASE 'sales_resource_link' IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole' REGION 'us-west-2' CATALOG_ID '111122223333'; SELECT * FROM s3tables_schema.transactions;

方法 2: CREATE DATABASE FROM ARN (ARN からデータベースを作成する)

CREATE DATABASEFROM ARN 句とともに使用して、AWS Glue リソースリンクを直接参照するフェデレーションデータベースを作成します。この方法では、AWS Glue データベースを Redshift データベースに自動的にマッピングします。

構文の詳細については、「Amazon Redshift データベースデベロッパーガイド」の「CREATE DATABASE」を参照してください。

111122223333 を AWS アカウント ID に置き換えます。

CREATE DATABASE s3tables_db FROM ARN 'arn:aws:glue:us-west-2:111122223333:database/sales_resource_link' WITH DATA CATALOG SCHEMA analytics_schema IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole'; SELECT * FROM s3tables_db.analytics_schema.transactions;

方法 3: 自動マウントされた awsdatacatalog

Amazon Redshift は、awsdatacatalog データベースを介して、S3 Tables リソースリンクを含む AWS Glue Data Catalog データベースを自動的にマウントできます。この方法では、Spectrum (FAS) へのフェデレーションアクセスをクラスターで有効にする必要があります。

前提条件

自動マウントされた awsdatacatalog データベースを使用するには、Spectrum へのフェデレーションアクセスを有効にする必要があります。これにより、Amazon Redshift はフェデレーション ID 認証情報を使用して AWS Glue Data Catalog および外部データソースにアクセスできます。

Spectrum へのフェデレーションアクセスを有効にするには:

  1. 以下のアクセス許可を持つ IAM ID を使用して Redshift クラスターに接続します。

    • redshift:GetClusterCredentialsWithIAM (プロビジョニングされたクラスターの場合) または redshift-serverless:GetCredentials (サーバーレスの場合)

    • AmazonS3ReadOnlyAccess

    • AWSGlueConsoleFullAccess

    • S3 Tables のアクセス許可 (ステップ 1 で定義)

  2. IAM ID を使用して接続すると、Amazon Redshift は IAM: (ユーザーの場合) または IAMR: (ロールの場合) というプレフィックスが付いたデータベースユーザーを自動的に作成します。

  3. クラスター管理者として、外部スキーマにアクセスするためのアクセス許可をフェデレーションユーザーに付与します。my_user を IAM ロール名またはユーザー名に置き換えます。

    GRANT ALL ON SCHEMA awsdatacatalog TO "IAMR:my_user";

フェデレーションアクセスを設定する詳細な手順については、「Amazon Redshift 管理ガイド」の「フェデレーション ID を使用して、ローカルリソースと Amazon Redshift Spectrum の外部テーブルへの Amazon Redshift アクセスを管理する」を参照してください。

S3 Tables をクエリする

フェデレーションアクセスを設定したら、マウントされたスキーマを確認し、S3 Tables をクエリします。

マウントされたスキーマを確認します。

SHOW SCHEMAS FROM DATABASE awsdatacatalog;

ステップ 3 のリソースリンク名を使用して S3 Tables をクエリします。

SELECT * FROM awsdatacatalog.sales_resource_link.transactions;