チュートリアル: S3 Tables の開始方法 - Amazon Simple Storage Service

チュートリアル: S3 Tables の開始方法

このチュートリアルでは、テーブルバケットを作成し、リージョンのテーブルバケットを AWS 分析サービスと統合します。次に、AWS CLI を使用して、テーブルバケットに最初の名前空間とテーブルを作成します。次に、AWS Lake Formation を使用してテーブルに対するアクセス許可を付与し、Athena でテーブルのクエリを開始できるようにします。

ヒント

汎用バケットからテーブルバケットに表形式データを移行する場合のために、AWS Solutions Library にはガイド付きソリューションが用意されています。このソリューションは、AWS Step Functions と Amazon EMR を Apache Spark で使用して、AWS Glue Data Catalog に登録され汎用バケットに保存されている Apache Iceberg および Apache Hive テーブルをテーブルバケットに自動的に移動します。詳細については、AWS Solutions Library で「Amazon S3 から S3 Tables への表形式データの移行に関するガイダンス」を参照してください。

ステップ 1: テーブルバケットを作成し、AWS 分析サービスと統合する

このステップでは、Amazon S3 コンソールを使用して最初のテーブルバケットを作成します。テーブルバケットを作成するその他の方法については、「テーブルバケットの作成」を参照してください。

注記

デフォルトでは、Amazon S3 コンソールはテーブルバケットを Amazon SageMaker Lakehouse と自動的に統合します。これにより、AWS 分析サービスが S3 Tables データを自動的に検出してアクセスできるようになります。AWS Command Line Interface (AWS CLI)、AWS SDK、または REST API を使用して最初のテーブルバケットをプログラムで作成する場合は、AWS 分析サービスの統合を手動で完了する必要があります。詳細については、「Amazon S3 Tables と AWS 分析サービスの統合」を参照してください。

  1. AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/ を開きます。

  2. ページ上部にあるナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、テーブルバケットを作成するリージョンを選択します。

  3. 左側のナビゲーションペインで、[テーブルバケット] を選択します。

  4. [テーブルバケットを作成] を選択します。

  5. [全般設定] で、テーブルバケットの名前を入力します。

    テーブルバケット名には次の条件があります。

    • 現在のリージョンの AWS アカウント内で一意であること。

    • 3~63 文字で指定する。

    • 小文字、数字、ハイフン (-) のみで構成されていること。

    • 文字や数字で始まり、文字や数字で終わります。

    テーブルバケットを作成した後、その名前を変更することはできません。テーブルバケットを作成した AWS アカウント がその所有者になります。テーブルバケットの命名の詳細については、「テーブルバケットの命名規則」を参照してください。

  6. [AWS 分析サービスとの統合] セクションで、[統合を有効にする] チェックボックスがオンになっていることを確認してください。

    コンソールを使用して最初のテーブルバケットを作成するときに [統合を有効にする] が選択されていると、Amazon S3 はテーブルバケットを AWS 分析サービスと統合しようとします。この統合により、AWS 分析サービスを使用して、現在のリージョン内のすべてのテーブルにアクセスできます。詳細については、「Amazon S3 Tables と AWS 分析サービスの統合」を参照してください。

  7. [バケットを作成] を選択します。

ステップ 2: テーブル名前空間とテーブルを作成する

このステップでは、テーブルバケットに名前空間を作成し、その名前空間の下に新しいテーブルを作成します。テーブル名前空間とテーブルはコンソールまたは AWS CLI を使用して作成できます。

重要

テーブルを作成するときは、テーブル名とテーブル定義にすべて小文字を使用してください。例えば、列名がすべて小文字であることを確認します。テーブル名またはテーブル定義に大文字が含まれている場合、テーブルは AWS Lake Formation または AWS Glue Data Catalog ではサポートされていません。この場合、テーブルバケットが AWS 分析サービスと統合されていても、テーブルは Amazon Athena などの AWS 分析サービスに表示されません。

テーブル定義に大文字が含まれている場合、Athena で SELECT クエリを実行すると、次のエラーメッセージが表示されます。「GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.」

以下の手順では、Amazon S3 コンソールを使用して、Amazon Athena で名前空間とテーブルを作成します。

テーブル名前空間とテーブルを作成するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/ を開きます。

  2. 左側のナビゲーションペインで、[テーブルバケット] を選択します。

  3. [テーブルバケット] ページで、テーブルを作成するテーブルバケットを選択します。

  4. テーブルバケットの詳細ページで、[Athena でテーブルを作成] を選択します。

  5. [Athena でテーブルを作成] ダイアログボックスで、[名前空間を作成] を選択し、[名前空間名] フィールドに名前を入力します。名前空間名は 1~255 文字で、テーブルバケット内で一意であることが必要です。有効な文字は a〜z、0〜9、アンダースコア (_) です。名前空間名の先頭にアンダースコアを使用することはできません。

  6. [名前空間の作成] を選択します。

  7. [Athena でテーブルを作成] を選択します。

  8. Amazon Athena コンソールが開き、Athena クエリエディタが表示されます。クエリエディタには、テーブルの作成に使用できるサンプルクエリが入力されます。クエリを変更して、テーブル名とテーブルに必要な列を指定します。

  9. クエリの変更が完了したら、[実行] を選択してテーブルを作成します。

テーブルが作成されると、新しいテーブルの名前が Athena のテーブルのリストに表示されます。Amazon S3 コンソールに戻り、テーブルバケットの詳細ページの [テーブル] リストを更新すると、新しいテーブルが表示されます。

テーブルバケットに名前空間を作成し、その名前空間の下にスキーマを定義した新しいテーブルを作成するには、次の AWS CLI コマンド例で user input placeholder の値を実際の値に置き換えます。

前提条件
  1. 次のコマンドを実行して、テーブルバケットに新しい名前空間を作成します。

    aws s3tables create-namespace \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --namespace my_namespace
    1. 次のコマンドを実行して、名前空間が正常に作成されたことを確認します。

      aws s3tables list-namespaces \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket
  2. 次のコマンドを実行して、テーブルスキーマを定義した新しいテーブルを作成します。

    aws s3tables create-table --cli-input-json file://mytabledefinition.json

    mytabledefinition.json ファイルには、次のテーブル定義の例を使用します。

    { "tableBucketARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket", "namespace": "my_namespace", "name": "my_table", "format": "ICEBERG", "metadata": { "iceberg": { "schema": { "fields": [ {"name": "id", "type": "int","required": true}, {"name": "name", "type": "string"}, {"name": "value", "type": "int"} ] } } } }

(オプション) ステップ 3: テーブルに対する Lake Formation 許可を付与する

このステップでは、新しいテーブルに対する Lake Formation 許可を他の IAM プリンシパルに付与します。これらのアクセス許可により、自分以外のプリンシパルが Athena やその他の AWS 分析サービスを使用してテーブルバケットリソースにアクセスできるようになります。詳細については、「テーブルまたはデータベースに対する Lake Formation アクセス許可の付与」を参照してください。テーブルにアクセスするユーザーが自分だけの場合は、このステップをスキップできます。

  1. https://console.aws.amazon.com/lakeformation/ で AWS Lake Formation コンソールを開き、データレイク管理者としてサインインします。データレイク管理者の作成方法の詳細については、「データレイク管理者を作成する」を参照してください。

  2. ナビゲーションペインで、[データアクセス許可][付与] の順に選択します。

  3. [アクセス許可を付与] ページの [プリンシパル] で、[IAM ユーザーとロール] を選択し、テーブルに対するクエリの実行を許可する IAM ユーザーまたはロールを選択します。

  4. [LF タグまたはカタログリソース] で、[名前付きのデータカタログリソース] を選択します。

  5. アカウント内のすべてのテーブルへのアクセスを許可するか、作成したテーブルバケット内のリソースのみへのアクセスを許可するかに応じて、次のいずれかを実行します。

    • [カタログ] では、テーブルバケットを統合したときに作成したアカウントレベルのカタログを選択します。例えば、111122223333:s3tablescatalog

    • [カタログ] で、テーブルバケットのサブカタログを選択します。例えば、111122223333:s3tablescatalog/amzn-s3-demo-table-bucket

  6. (オプション) テーブルバケットのサブカタログを選択した場合は、次のいずれかまたは両方を実行します。

    • [データベース] で、作成したテーブルバケットの名前空間を選択します。

    • [テーブル] で、テーブルバケットに作成したテーブルを選択するか、[すべてのテーブル] を選択します。

  7. カタログまたはサブカタログのどちらを選択したか、データベースまたはテーブルのどちらを選択したかに応じて、カタログ、データベース、またはテーブルレベルでアクセス許可を設定できます。Lake Formation 許可の詳細については、「AWS Lake Formation デベロッパーガイド」の「Lake Formation 許可の管理」を参照してください。

    次のいずれかを行います:

    • [カタログのアクセス許可] で、[Super] を選択してカタログに対するすべてのアクセス許可を他のプリンシパルに付与するか、[Describe] などのよりきめ細かなアクセス許可を選択します。

    • [データベースのアクセス許可] では、[Super] を選択してデータベースに対するすべてのアクセス許可を他のプリンシパルに付与することはできません。代わりに、[Describe] などのよりきめ細かなアクセス許可を選択します。

    • [テーブルのアクセス許可] で、[Super] を選択してテーブルに対するすべてのアクセス許可を他のプリンシパルに付与するか、[Select][Describe] などのよりきめ細かなアクセス許可を選択します。

      注記

      データカタログリソースに対する Lake Formation のアクセス許可を外部アカウントに付与するか、または別のアカウントの IAM プリンシパルに直接付与する場合、Lake Formation は AWS Resource Access Manager (AWS RAM) サービスを使用してリソースを共有します。付与対象アカウントが付与する側のアカウントと同じ組織内にある場合、付与対象アカウントはその共有リソースをただちに使用できるようになります。付与対象アカウントが同じ組織内にない場合は、AWS RAM が付与対象アカウントに対して、リソース付与を受け入れる、または拒否するための招待を送信します。その後、共有リソースを利用可能にするために、付与対象アカウントのデータレイク管理者が AWS RAM コンソールまたは AWS CLI を使用して招待を承諾する必要があります。クロスアカウントデータ共有の詳細については、「AWS Lake Formation デベロッパーガイド」の「Lake Formation でのクロスアカウントデータ共有」を参照してください。

  8. [Grant] (付与) を選択します。

ステップ 4: Athena で SQL を使用してデータをクエリする

Athena で SQL を使用してテーブルをクエリできます。Athena は S3 Tables に対するデータ定義言語 (DDL)、データ操作言語 (DML)、データクエリ言語 (DQL) クエリをサポートしています。

Athena クエリには、Amazon S3 コンソールまたは Amazon Athena コンソールからアクセスできます。

以下の手順では、Amazon S3 コンソールを使用して Athena クエリエディタにアクセスし、Amazon Athena でテーブルに対してクエリを実行できるようにします。

テーブルに対してクエリを実行するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/ を開きます。

  2. 左側のナビゲーションペインで、[テーブルバケット] を選択します。

  3. [テーブルバケット] ページで、クエリを実行するテーブルを含むテーブルバケットを選択します。

  4. テーブルバケットの詳細ページで、クエリを実行するテーブルの名前の横にあるオプションボタンを選択します。

  5. [Athena でテーブルに対してクエリを実行] を選択します。

  6. Amazon Athena コンソールが開き、サンプル SELECT クエリがロードされた状態で Athena クエリエディタが表示されます。必要に応じて、このクエリをユースケースに合わせて変更します。

  7. クエリを実行するには、[Run] (実行) を選択します。

テーブルに対してクエリを実行するには
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. テーブルに対してクエリを実行します。以下は、変更できるサンプルクエリです。user input placeholders をユーザー自身の情報に必ず置き換えます。

    SELECT * FROM "s3tablescatalog/amzn-s3-demo-table-bucket"."my_namespace"."my_table" LIMIT 10
  3. クエリを実行するには、[Run] (実行) を選択します。