6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3 MetadataとS3 Tables

Last updated at Posted at 2024-12-04

非構造化データのメタデータ管理を簡素化してくれそうなアップデートがあったので、試してみる。

何者か

S3 Metadataはオブジェクト単位のメタデータを自動的に吸い上げる仕組み。従来のインベントリ機能との違いは、システム定義のメタデータに加えてカスタムメタデータが付けられる点と、後述のS3 Tablesをターゲットとしてニアリアルタイムで更新してくれる点と思われる。

S3 TablesはマネージドIcebergテーブルとも呼ぶべきもので、テーブルバケットという新しいバケット上のIcebergテーブルで上記のメタデータを管理し、検索を可能にする仕組み。都度Glueテーブルを作る必要がなくなり、かつ自動的なメンテナンスで性能を維持してくれる模様。

と、今のところはざっくり理解しておくことにする。

ステップバイステップ

1. テーブルバケットを作成

S3コンソールが新しくなり、テーブルバケットなるものが作れるようになっているので、まずはここからアクセス。
なお、現時点では限られたリージョンでしか利用できない点に注意。今回はバージニア北部(us-east-1)で操作している。

初回は「統合を有効にする」をクリックして、専用のデータカタログ(s3tablescatalog)を作成し、Lake Formationに登録する作業が必要。

[2024/12/6追記] CLIでセットアップすることもできるようだが、2024年12月6日現在、公式ドキュメントにバグがあり、記載の手順では有効化できないため注意。

s3-meta-999.png

s3-meta-999.png

テーブルバケット名を入力して作成する。

s3-meta-1-1.png

テーブルバケットができた。
メタデータテーブル自体はまだ作成されていない。

s3-meta-1-2.png

テーブルを作成するにはEMRが云々とあるが、次のステップでマネジメントコンソールから作成できるのでいったん無視する。

2. メタデータ設定を作成

次に、通常のバケットを作成し、「メタデータ」プロパティからメタデータ設定を作成する。

s3-meta-2-1.png

送信先テーブルバケットにはテーブルバケット名、メタデータテーブル名は特に支障なければ生成された値(当該の汎用バケット名から自動生成される)を使用する。

s3-meta-2-2.png

できた。

s3-meta-2-4.png

テーブルバケットの方はこんな感じ。
他にもCLIやEMRなど複数の方法で作れるようだが、マネジメントコンソールから作れれば今回は充分。

s3-meta-2-3.png

3. メタデータを検索してみる

まず、適当なファイルをアップロードしておく。
今回は、昨日出たBedrock LLM as a judgeの検証用に作成した評価用ファイルをいくつか投げ込んでみる。

s3-meta-3.png

次にAWS CLIを最新化し、aws s3tablesコマンドでいろいろ試してみる。

> brew upgrade awscli
...
> aws --version
aws-cli/2.22.10 Python/3.12.7 Darwin/24.1.0 source/arm64
テーブルバケット情報
> aws s3tables get-table-bucket \
--table-bucket-arn arn:aws:s3tables:us-east-1:(省略):bucket/my-table-bucket-(省略)
{
    "arn": "arn:aws:s3tables:us-east-1:(省略):bucket/my-table-bucket-(省略)",
    "name": "my-table-bucket-(省略)",
    "ownerAccountId": "(省略)",
    "createdAt": "2024-12-04T01:23:26.102834+00:00"
}
テーブルバケットのメタデータ
> aws s3tables get-table-metadata-location \
--table-bucket-arn arn:aws:s3tables:us-east-1:(省略):bucket/my-table-bucket-(省略) \
--namespace aws_s3_metadata \
--name s3metadata_s3_metadata_test_(省略)
{
    "versionToken": "f711868a57d92610b21a",
    "metadataLocation": "s3://8669cd9f-71a3-4c60-m15(省略)tu8xkuse1b--table-s3/metadata/00001-da115e3f-0e54-492f-97fa-d6709847bf48.metadata.json",
    "warehouseLocation": "s3://8669cd9f-71a3-4c60-m15(省略)tu8xkuse1b--table-s3"
}

とりあえず何かあることはわかった。
ただ、aws s3tablesコマンドを見渡した限りでは、メタデータ自体をクエリーするコマンドはなさそうである。
公式を見てみると、自動でs3tablescatalogなるカタログが同一リージョンのGlueデータカタログ内に作成される、とあるので、そっちに飛んでみる。

s3-meta-3-2.png

まだ作成されてなかった。 しばらく待つしかなさそうだ。

ただ、Icebergテーブルと並んで、ここがS3テーブルバケット内のメタデータ分析の肝の一つと見られるので、今日のところは、カタログが自動作成されてS3テーブルがマッピングされるのを楽しみに待つこととしたい。

s3-meta-3-3.png
(出典:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)

[2024/12/6追記] 本来は、数十秒かからず完了するのが正しいらしい。自分のテーブルバケット設定には何らかの異常が発生しているらしく、ステータスが「不明」となっている(通常は「無効」または「有効」)ため作成されていない模様。
s3-meta-888.png
また、正常に作成された場合も、404エラーでAthena上ではまだクエリーできない。
s3-meta-777.png
まだプレビューということもあり、しばらく熟成を待った方が良さそうだ。

[2024/12/16追記] 最近になって(前回更新からの10日間の間に)カタログの表示が変わり、データベースの方も表示されるようになった。
スクリーンショット 2024-12-16 22.45.58.png
実はこの状態のままだとまだエラーになるのだが、Lake Formationで該当カタログとテーブルに権限をGrantすることで、ようやくAthenaクエリーが成功した。
スクリーンショット 2024-12-16 22.59.35.png

まとめ

S3 MetadataとS3 Tablesの挙動を(途中までだが)一通り触ってみた。
ディレクトリバケット、S3オブジェクトへのappendのサポートなど、最近のS3機能の拡張は、以前のような非機能面やコスト面の改善に留まらず、特定のユースケースを後押しするようなものが増えている気がする。

実際、非構造化データのメタデータを管理・検索・分析したい要件は一定程度ある。
今のところ一部機能はプレビューだが、いずれGAすれば、DataZoneあたりと連携してS3メタデータをデータアセットとして公開する、といった用途にも使えるのでは、という期待感がある。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?