Slide 1

Slide 1 text

Amazon S3 Tables ことはじめ rinda2001 2025/2

Slide 2

Slide 2 text

• 自己紹介 • Amazon S3 Tablesとは • S3 Tablesを試してみる • S3 Tablesの削除 • S3 Tablesの料金 • S3 Tablesその他の使い方 • まとめ 目次

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

自己紹介 Akihiro Takamura (rinda2001) @rinda2001 テックリード エス・ビー・エス株式会社(S.B.S. inc.) Amplify / ECS / Codeシリーズ React/Next.js/ReactNativeと戯れる日々 リングフィットアドベンチャー5年生(現在6周目突入) HOP!STEP!DANCEというswitchのダンスゲームで 6曲踊れるようになりました

Slide 5

Slide 5 text

Amazon S3 Tablesとは

Slide 6

Slide 6 text

Amazon S3 Tablesとは • re:Invent 2024で発表 • 普通のS3バケットに比べて、SQLでデータアクセ スするのに最適化されてる新しいバケット • Athena/EMR/Redshift/QuickSightなどと連携 • Apache Icebergにネイティブで対応

Slide 7

Slide 7 text

つまり、S3 Tablesとは

Slide 8

Slide 8 text

Apache Icebergに最適化された クラウドオブジェクトストアです 🤔

Slide 9

Slide 9 text

Apache Icebergとは • Open Table Formatという規格の1種です ‣ Apache Icerbergというソフトがあるわけではなく、規格です ‣ Netflixが開発して現在はApacheに移譲 ‣ Netflixには2018年時点で60PBのデータレイクがあり、これをなんとか 効率よく扱う必要に迫られて開発したらしい ‣ 次世代データレイクの基盤になりうる技術で注目度アゲアゲ⬆ • 有名どこでは他にApache HudiとDelta Lakeというの があります ‣ Apache Icebergはこれらの中でも大きく成長して人気があります • データレイクが抱える様々な課題を解決するために作 られました

Slide 10

Slide 10 text

Open Table Formatが出てきた理由 • データ分析のデータストアはParquet保存が標準 ‣ これでしばらくは良かったけど色々課題が出てきた ‣ アクセスするのが大変!(パスとかファイル形式とか指定が必要) ‣ 列の追加や削除をしたくなっちゃった!(スキーマの進化) ‣ レコードの追加・更新・削除が大変! ‣ でっかいParquetのうちの1レコードを更新するには?? ‣ 変更したとしても、過去のある時点の断面を復元できない ‣ 個人情報保護法対応で、一旦ストアしたデータについて、ユーザが明示的に保存 を拒否した場合、削除しないといけないとかなんとか ‣ 同時書き込み・読み込みの独立性が担保できない! ‣ ファイルが増えるとクエリが遅いし高コスト! ‣ パーティショニング(年・月・日でファイルを分ける等)とかのテクがあるけど、 これをやるとクエリするユーザもこのパーティション(物理構造)を意識して SQL書く必要が出てくる(できない) • 複雑なことが増えてきて管理が大変!なのを解決する ためにOpen Table Formatが出てきました。

Slide 11

Slide 11 text

Apache Icebergを使うと なにがうれしいのか

Slide 12

Slide 12 text

Apache Icebergを使うメリット • SQLでデータレイクを簡単に操作できる ‣ CRUD全部可能。Mergeもできる。 ‣ 物理ファイルを意識することなく、普通のRDBのようにデータレイクを扱える ‣ 変更はメタデータのみでデータファイル自体は影響なし • スキーマ変更ができる ‣ 列追加、ドロップ、列名変更、並べ替え ‣ 変更はメタデータのみでデータファイル自体は影響なし • タイムトラベルとロールバック ‣ 過去のある時点のデータでクエリ、過去のある時点までロールバックができる • 一貫したトランザクション ‣ ACIDを実現。commitされていない変更の影響を受けない • 高速なクエリ ‣ 高速スキャンプランニング、データファイルのフィルタリングなど高速化・効 率化を実現 • 色々なサービスとの連携 ‣ Icebergに準拠しているサービスと簡単に連携が可能

Slide 13

Slide 13 text

つまり、S3 Tablesとは(再)

Slide 14

Slide 14 text

Amazon S3 Tablesとは(再) • ざっくり言うと ‣ 参照だけじゃなくてレコードの更新もできちゃうGlue Data Catalogで管理されたデータレイクみたいな使い方ができま す

Slide 15

Slide 15 text

Amazon S3 Tablesとは(再) • Apach Icebergにネイティブで対応する 新しいS3バケット ‣ クエリ速度最大3倍 ‣ トランザクション処理最大10倍 ‣ レコードのCRUDに対応 ‣ スキーマの変更に対応 ‣ 一貫したトランザクションに対応 ‣ タイムトラベル・ロールバックに対応 • 表形式データを格納するために特別に設計 ‣ 自動コンパクションでデータを最適化 ‣ Namespaceで複数のテーブルをグルーピング ‣ IAMでアクセス制御

Slide 16

Slide 16 text

ちなみに

Slide 17

Slide 17 text

S3はもともとIcebergにも対応できる • S3 TablesがなくてもS3でIcebergは対応できてい ました。 ‣ Athenaの Create Tableや、GlueクローラーでIcebergを指定 してテーブルを作成し、S3バケットに保存、利用することが できていました • S3 Tablesはコンパクションやパフォーマンス最適 化など、ネイティブでIcebergに対応した新しいバ ケットタイプという位置づけです • S3 Tablesはオブジェクトストレージというより、 ほんとにDatabaseのTableと捉えるほうがしっく りきます

Slide 18

Slide 18 text

S3 Tablesを試してみる

Slide 19

Slide 19 text

S3 Tablesの使い方 • S3 Tablesは以下の感じで使っていきます • まずはとにかくTable Bucketを作ります Table Bucketを作る Tableを作る データを入れる クエリする

Slide 20

Slide 20 text

Table Bucketを作る • マネコンからバケット名を指定するだけ ‣ S3にTable bucketsというメニューが増えてる ‣ Table Bucketを作るとGlue Data Catalogがセットアップされ て自動的に統合される ‣ Table Bucketはアカウント/リージョン毎に1回だけでOK ‣ CLIやTFCDKでも作れます。

Slide 21

Slide 21 text

Table Bucketを作る(補足) • AWSの分析サービスとの統合(Public Preview) ‣ Table Bucket作成時、統合をON/OFFする選択がある ‣ ONにするとAthenaやRedshiftからクエリできるようになる ‣ 内部的にはLakeFormationが使われる ‣ LakeFormationがS3Tablesにアクセスするための サービスロールが作られる ‣ S3tablescatalogというデータカタログが自動的に作られる

Slide 22

Slide 22 text

S3 Tablesの使い方 Table Bucketを作る Tableを作る データを入れる クエリする

Slide 23

Slide 23 text

Tableを作る • Tableを作るにはいくつか方法があります ‣ Spark sessionで接続してcreate table ‣ EMRから ‣ Sparkシェルから ‣ GlueETLジョブから ‣ AWS CLIでcreate-table • 今回は簡単にAWS CLIで作っていきます ‣ 事前にaws-cliを最新化しておいてください ‣ 資料の手順はaws-cli/2.24.7で実施しています

Slide 24

Slide 24 text

Tableを作る • まずNamespaceを作ります ‣ 2025/2時点 マネコンから作れないのでCLIで作ります BXTTUBCMFTDSFBUFOBNFTQBDF UBCMFCVDLFUBSOઌ΄Ͳ࡞੒ͨ͠5BCMF#VDLFUͷ"3/ OBNFTQBDF೚ҙͷ໊લ໊ۭؒ

Slide 25

Slide 25 text

Tableを作る • 次にテーブルのスキーマをこんな感じでJSONファイルとして作ります \ lUBCMF#VDLFU"3/zzઌ΄Ͳ࡞੒ͨ͠5BCMF#VDLFUͷ"3/ lOBNFTQBDFzlઌ΄Ͳ࡞੒໊ͨ͠લ໊ۭؒ lOBNFzz೚ҙͷςʔϒϧ໊ GPSNBU*$&3( NFUBEBUB\ JDFCFSH\ TDIFNB\ pFMET< \OBNFJE UZQFJOU SFRVJSFEUSVF^ \OBNFOBNF UZQFTUSJOH^ \OBNFWBMVF UZQFJOU^ > ^ ^ ^ ^

Slide 26

Slide 26 text

Tableを作る • CLIからテーブルを作ります • うまくいっていればマネコン->S3からTable BucketにTableがつくられていることを確認できま す BXTTUBCMFTDSFBUFUBCMFDMJJOQVUKTPOpMFTUBCMFTEFNPKTPO

Slide 27

Slide 27 text

S3 Tablesの使い方 Table Bucketを作る Tableを作る データを入れる クエリする

Slide 28

Slide 28 text

データを入れる • S3 Tablesにデータを入れるには いくつか方法があります ‣ Spark sessionで接続してinsert table ‣ EMRから ‣ Sparkシェルから ‣ GlueETLジョブから ‣ Athenaで接続して insert table ‣ Firehoseから入れる • 今回はAthenaで接続して操作します

Slide 29

Slide 29 text

AthenaでS3 Tablesに接続する設定 • S3 TablesはLakeFormationでアクセス権を制御し ているので、まずLakeFormationの設定をします ‣ LakeFormation -> Data permissions -> Grant

Slide 30

Slide 30 text

AthenaでS3 Tablesに接続する設定 • Principalsで権限を与える対象を設定 ‣ 通常は今マネコンにアクセスしているIAM User or IAM Role ‣ ↓の環境ではマネコンにAWS SSOから入っているのでSSOで割り 当てられるロールを指定してます

Slide 31

Slide 31 text

AthenaでS3 Tablesに接続する設定 • アクセス可能にするリソースを指定 ‣ Named Data Catalog resoucesを選択 ‣ Catalogsから 「AWSアカウントID:s3tablescatalog」を選択 ‣ これを選択しておくとS3 Tablesの全部のnamespace/tableが対象 になります。適宜対象を絞ってください。

Slide 32

Slide 32 text

AthenaでS3 Tablesに接続する設定 • アクセス権を設定 ‣ 今回はSuper userを選択していますが適宜(略)

Slide 33

Slide 33 text

データを入れる • Athenaを開き、以下を選択 ‣ Catalog: TableBucket名 ‣ Database: NameSpace名 • これで接続できるのでINSERT文を実行すればOK

Slide 34

Slide 34 text

S3 Tablesの使い方 Table Bucketを作る Tableを作る データを入れる クエリする

Slide 35

Slide 35 text

クエリする • AthenaからSELECTしてみる ‣ もちろんEMRやRedshift Spectrum、QuickSightとかでもク エリできます

Slide 36

Slide 36 text

クエリする • AthenaからUPDATEしてみる

Slide 37

Slide 37 text

クエリする • AthenaからTimeTravel Queryしてみる ‣ タイムトラベルクエリは以下のように特定時刻を指定してク エリするとその時点での断面データで結果を返します 4&-&$5'30.FYBNQMF@UBCMF '035*.&45".1"40'5*.&45".165$`

Slide 38

Slide 38 text

S3 Tables 削除

Slide 39

Slide 39 text

S3 Tables 削除方法 • ちょっとだけ注意点あり ‣ マネコンからはTableBucketを作れるが、削除できない ‣ 2025/2/19時点 ‣ aws cliからの削除が必要 ‣ 削除順がある ‣ Table -> Namespace -> TableBucketの順に削除する ‣ 同一Bucket内にNamespaceが複数ある場合、マネコンでは 全部見れない(?)ようなので、その場合はCLIで参照する 必要あり

Slide 40

Slide 40 text

削除用コマンド • テーブルの削除 • NameSpaceの削除(Table全部削除後) • Table Bucketの削除 BXTTUBCMFTEFMFUFUBCMF= UBCMFCVDLFUBSOUBCMFCVDLFUͷ"3/= OBNFTQBDFର৅ͷ໊લۭؒ= OBNFςʔϒϧ໊ BXTTUBCMFTEFMFUFOBNFTQBDF= UBCMFCVDLFUBSOUBCMFCVDLFUͷ"3/= OBNFTQBDFର৅ͷ໊લۭؒ BXTTUBCMFTEFMFUFUBCMFCVDLFU= UBCMFCVDLFUBSOUBCMFCVDLFUͷ"3/

Slide 41

Slide 41 text

S3 Tables の料金

Slide 42

Slide 42 text

S3 Tablesの料金 • ざっくり説明:S3の料金+αがかかる ‣ 1000オブジェクト毎のオブジェクト数課金 ‣ メンテナンス(コンパクション)課金 ‣ ストレージ保管サイズ課金も(少しだけ)高い 種類 概要 料⾦ S3標準との⽐較 ストレージ料⾦ オブジェクト数 $0.025/⽉/1000オブジェクト毎 S3標準にはこの課⾦はない サイズ $0.0288/⽉/GB S3標準は$0.025/GBなのでS3 Tablesは少しだけ⾼い リクエスト料⾦ PUT/COPY/POST/LIST $0.0047/1000リクエスト毎 S3標準と同等 GET/SELECT/その他 $0.00037/1000リクエスト毎 S3標準と同等 メンテナンス料⾦ オブジェクト数 $0.004/1000オブジェクト毎 S3標準にはこの課⾦はない サイズ $0.05/1GB毎 S3標準にはこの課⾦はない

Slide 43

Slide 43 text

S3 Tablesその他の使い方

Slide 44

Slide 44 text

その他の方法 • 紹介しきれなかったのでリンクでまとめます ‣ 構築系 ‣ CDK for Terraformを使ってS3 Tablesをデプロイ ‣ データ投入・操作系 ‣ Glueジョブを使ってS3のファイルをS3Tablesに投入 ‣ Glueジョブを使ってS3のファイルをS3TablesにUPSERT ‣ Firehoseを使ってS3Tablesに投入 ‣ Sparkシェルで接続してS3 TablesにCRUD ‣ AWSCLIでS3Tablesのスキーマ定義ができるように ‣ パフォーマンス比較 ‣ S3TablesとIcebergTablesOnS3のパフォーマンス比較 ‣ その他 ‣ re:Invent2024でのS3Tables発表内容の翻訳

Slide 45

Slide 45 text

まとめ

Slide 46

Slide 46 text

まとめ • S3 Tablesは新しいバケットタイプ ‣ データレイクに最適化されたテーブル(≠ファイル) ‣ CRUDする感じでSQLで利用 by Spark/Athena… ‣ コンパクション等、管理面はAWSがやってくれる • Apache Iceberg形式に対応 ‣ 様々なサービスからアクセス可能(AWS内/外) ‣ 既存のデータレイクの様々な課題を解消 ‣ 次世代データレイクの主軸となりそう

Slide 47

Slide 47 text

参考文献 • データレイクの新しいカタチ:Open Table Formatの紹介 • Apache Icebergtテーブルの概要と活用メリット • re:Invent2024AWSがS3Tablesを発表–大規模表形式データ管理の新機能