

# チュートリアル: S3 Tables の開始方法
<a name="s3-tables-getting-started"></a>

このチュートリアルでは、テーブルバケットを作成し、リージョンのテーブルバケットを AWS 分析サービスと統合します。次に、AWS CLI またはコンソールを使用して、テーブルバケットに最初の名前空間とテーブルを作成します。その後、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 への表形式データの移行に関するガイダンス](https://aws.amazon.com/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/)」を参照してください。

**Topics**
+ [ステップ 1: テーブルバケットを作成し、AWS 分析サービスと統合する](#s1-tables-tutorial-create-bucket)
+ [ステップ 2: テーブル名前空間とテーブルを作成する](#s2-tables-tutorial-create-namespace-and-table)
+ [ステップ 3: Athena で SQL を使用してデータをクエリする](#s4-query-tables)

## ステップ 1: テーブルバケットを作成し、AWS 分析サービスと統合する
<a name="s1-tables-tutorial-create-bucket"></a>

このステップでは、Amazon S3 コンソールを使用して最初のテーブルバケットを作成します。テーブルバケットを作成するその他の方法については、[「テーブルバケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)」を参照してください。

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

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

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

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

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

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

   テーブルバケット名には次の条件があります。
   + 現在のリージョンの AWS アカウント内で一意であること。
   + 3～63 文字で指定する。
   + 小文字、数字、ハイフン (`-`) のみで構成されていること。
   + 文字や数字で始まり、文字や数字で終わります。

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

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

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

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

## ステップ 2: テーブル名前空間とテーブルを作成する
<a name="s2-tables-tutorial-create-namespace-and-table"></a>

このステップでは、テーブルバケットに名前空間を作成し、その名前空間の下に新しいテーブルを作成します。テーブル名前空間とテーブルはコンソールまたは 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.」

### S3 コンソールと Amazon Athena の使用
<a name="s3-tables-tutorial-create-table-console"></a>

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

**テーブル名前空間とテーブルを作成するには**

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

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

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

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

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

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

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

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

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

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

### の使用AWS CLI
<a name="s3-tables-tutorial-create-table-CLI"></a>

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

**前提条件**
+ [https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html) ポリシーを IAM ID にアタッチします。
+ AWS CLI バージョン 2.23.10 以上をインストールします。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLI の最新バージョンのインストールまたは更新](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

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}}
     ```

1. 次のコマンドを実行して、テーブルスキーマを定義した新しいテーブルを作成します。

   ```
   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: Athena で SQL を使用してデータをクエリする
<a name="s4-query-tables"></a>

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

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

### S3 コンソールと Amazon Athena の使用
<a name="s4-query-tables-query-table-s3-console"></a>

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

**テーブルに対してクエリを実行するには**

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

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

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

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

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

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

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

### Amazon Athena コンソールの使用
<a name="s4-query-tables-query-table-athena-console"></a>

**テーブルに対してクエリを実行するには**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

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

   ```
   SELECT * FROM "s3tablescatalog/{{amzn-s3-demo-table-bucket}}"."{{my_namespace}}"."{{my_table}}" LIMIT 10
   ```

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