AWS CLIで、S3 Tablesのテーブル作成時にスキーマ定義できるようになりました

AWS CLIで、S3 Tablesのテーブル作成時にスキーマ定義できるようになりました

AWS CLI で S3 Tables のテーブル作成時に、スキーマ定義できるようになりましたので、試してみました。
Clock Icon2025.01.31

データ事業本部の笠原です。

AWS CLI で S3 Tables のテーブル作成時に、スキーマ定義できるようになりました。

早速試してみました。

最初にまとめ

  • aws s3tables create-table--metadata オプションにてスキーマ定義
  • --metadata オプションではJSON形式で指定
  • データは、AthenaからINSERTクエリで投入・SELECTクエリで確認できるので、Spark Shell不要で試せます

準備

AWS CLIを最新化しておきます。

私が試した環境は以下の通りです。

aws --version
aws-cli/2.23.10 Python/3.12.6 Darwin/24.2.0 exe/x86_64

試したAWSリージョンはオレゴン (us-west-2) です。
Lake Formationや「AWS分析サービスとの統合」も有効化済です。

analytics_integration-s3tables-kas

また、テーブルバケットも事前に準備しておきます。
今回は、せっかくなので、AWS CLIで作成します。

aws s3tables create-table-bucket \
    --name cli-s3-table

テーブルバケットのARNが返ります。

{
    "arn": "arn:aws:s3tables:us-west-2:390402544358:bucket/cli-s3-table"
}

次に、ネームスペースを作成します。
ネームスペースはデータベースに相当するものです。

aws s3tables create-namespace \
    --table-bucket-arn "arn:aws:s3tables:us-west-2:390402544358:bucket/cli-s3-table" \
    --namespace cli_s3_namespace

以下のように応答が返ればOKです。

{
    "tableBucketARN": "arn:aws:s3tables:us-west-2:390402544358:bucket/cli-s3-table",
    "namespace": [
        "cli_s3_namespace"
    ]
}

実行

では、テーブルを作成しましょう。

テーブルのスキーマは以下のようにJSON形式で指定します。

{
  "iceberg": {
    "schema": {
      "fields": [
        {
          "name": "string",
          "type": "string",
          "required": true|false
        }
        ...
      ]
    }
  }
}

これを、 --metadata オプションで渡してあげます。

例えば、以下のように実行します。

aws s3tables create-table \
    --table-bucket-arn "arn:aws:s3tables:us-west-2:390402544358:bucket/cli-s3-table" \
    --namespace cli_s3_namespace \
    --name cli_sample_table \
    --format 'ICEBERG' \
    --metadata '{"iceberg": {"schema": {"fields": [{"name": "column_a", "type": "string", "required": true},{"name": "column_b", "type": "int", "required": false}]}}}'

実行後、以下のように応答が返ればOKです。

{
    "tableARN": "arn:aws:s3tables:us-west-2:390402544358:bucket/cli-s3-table/table/941f35bf-43b0-4d82-9977-1e97f079e384",
    "versionToken": "f7a3ded74452632807ff"
}

確認

Athenaで確認したいと思います。

まずは、Lake Formationで権限を付与します。

AWSマネジメントコンソールのLake Formationの画面から、
「Data permissions」から「Grant」ボタンをクリックし、以下のように設定すれば権限付与できます。

今回は、「IAM users and roles」は利用ユーザまたは利用ロールを選択し、
「Named Data Catalog resources」で s3tablescatalog を指定し、
「Super user」として強めの権限与えてます。実際のご利用の際は適宜権限を設定してください。

lakeformation-grant-s3tables-kas

設定後、Athanaでテーブルが一覧で表示されていればOKです。

athena-list-s3tables-kas

AthenaからInsert文を実行して、データを投入してみます。

INSERT INTO cli_sample_table (column_a, column_b) VALUES ('A', 1);

athena_insert-kas

投入したら、Select文で確認してみましょう。

SELECT column_a, column_b
FROM cli_sample_table
;

athena_select-kas

無事確認できました。

Updateも試しました。

UPDATE cli_sample_table SET column_a = 'B', column_b = 2 where column_a = 'A';

athena_update-kas

変更内容をSelect文で確認してみましょう。

SELECT column_a, column_b
FROM cli_sample_table
;

athena_select2-kas

無事変更も確認できました。

まとめ

いかがでしたでしょうか?

今回のアップデートで、テーブル作成までAWS CLIで実施し、その後はAthena等Icebergを扱うことができるサービスでデータ投入・更新・確認あたりができるようになりました。

今までは、AWS CLIではテーブル作成できたものの、スキーマ定義ができなかったためカラム定義されてないテーブルだけが作成できていました。
AthenaではCreate Table文が2025年1月現在サポートされていませんので、テーブル作成だけはSpark Shellを使う等ハードルが少し上がっていました。

今回のアップデートで、Spark Shellを使わずにAWS CLIとAthenaである程度S3 Tablesを扱うことができるので、利用するハードルが少し下がったと思います。

ご参考いただければ、幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.