AWS CLIで、S3 Tablesのテーブル作成時にスキーマ定義できるようになりました
データ事業本部の笠原です。
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分析サービスとの統合」も有効化済です。
また、テーブルバケットも事前に準備しておきます。
今回は、せっかくなので、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」として強めの権限与えてます。実際のご利用の際は適宜権限を設定してください。
設定後、Athanaでテーブルが一覧で表示されていればOKです。
AthenaからInsert文を実行して、データを投入してみます。
INSERT INTO cli_sample_table (column_a, column_b) VALUES ('A', 1);
投入したら、Select文で確認してみましょう。
SELECT column_a, column_b
FROM cli_sample_table
;
無事確認できました。
Updateも試しました。
UPDATE cli_sample_table SET column_a = 'B', column_b = 2 where column_a = 'A';
変更内容をSelect文で確認してみましょう。
SELECT column_a, column_b
FROM cli_sample_table
;
無事変更も確認できました。
まとめ
いかがでしたでしょうか?
今回のアップデートで、テーブル作成までAWS CLIで実施し、その後はAthena等Icebergを扱うことができるサービスでデータ投入・更新・確認あたりができるようになりました。
今までは、AWS CLIではテーブル作成できたものの、スキーマ定義ができなかったためカラム定義されてないテーブルだけが作成できていました。
AthenaではCreate Table文が2025年1月現在サポートされていませんので、テーブル作成だけはSpark Shellを使う等ハードルが少し上がっていました。
今回のアップデートで、Spark Shellを使わずにAWS CLIとAthenaである程度S3 Tablesを扱うことができるので、利用するハードルが少し下がったと思います。
ご参考いただければ、幸いです。