Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon S3 Tablesことはじめ

rinda2001
February 20, 2025

Amazon S3 Tablesことはじめ

re:Invent2024で発表された次世代データレイクの本命?のAmazon S3 Tablesの最初の一歩資料です。
Spark環境を作ることが本題から逸れたハードルになっちゃうので、今回はSparkを使わずにAWS CLIとAthenaだけでS3 Tablesを操作してみました。

rinda2001

February 20, 2025
Tweet

More Decks by rinda2001

Other Decks in Technology

Transcript

  1. • 自己紹介 • Amazon S3 Tablesとは • S3 Tablesを試してみる •

    S3 Tablesの削除 • S3 Tablesの料金 • S3 Tablesその他の使い方 • まとめ 目次
  2. 自己紹介 Akihiro Takamura (rinda2001) @rinda2001 テックリード エス・ビー・エス株式会社(S.B.S. inc.) Amplify /

    ECS / Codeシリーズ React/Next.js/ReactNativeと戯れる日々 リングフィットアドベンチャー5年生(現在6周目突入) HOP!STEP!DANCEというswitchのダンスゲームで 6曲踊れるようになりました
  3. Apache Icebergとは • Open Table Formatという規格の1種です ‣ Apache Icerbergというソフトがあるわけではなく、規格です ‣

    Netflixが開発して現在はApacheに移譲 ‣ Netflixには2018年時点で60PBのデータレイクがあり、これをなんとか 効率よく扱う必要に迫られて開発したらしい ‣ 次世代データレイクの基盤になりうる技術で注目度アゲアゲ⬆ • 有名どこでは他にApache HudiとDelta Lakeというの があります ‣ Apache Icebergはこれらの中でも大きく成長して人気があります • データレイクが抱える様々な課題を解決するために作 られました
  4. Open Table Formatが出てきた理由 • データ分析のデータストアはParquet保存が標準 ‣ これでしばらくは良かったけど色々課題が出てきた ‣ アクセスするのが大変!(パスとかファイル形式とか指定が必要) ‣

    列の追加や削除をしたくなっちゃった!(スキーマの進化) ‣ レコードの追加・更新・削除が大変! ‣ でっかいParquetのうちの1レコードを更新するには?? ‣ 変更したとしても、過去のある時点の断面を復元できない ‣ 個人情報保護法対応で、一旦ストアしたデータについて、ユーザが明示的に保存 を拒否した場合、削除しないといけないとかなんとか ‣ 同時書き込み・読み込みの独立性が担保できない! ‣ ファイルが増えるとクエリが遅いし高コスト! ‣ パーティショニング(年・月・日でファイルを分ける等)とかのテクがあるけど、 これをやるとクエリするユーザもこのパーティション(物理構造)を意識して SQL書く必要が出てくる(できない) • 複雑なことが増えてきて管理が大変!なのを解決する ためにOpen Table Formatが出てきました。
  5. Apache Icebergを使うメリット • SQLでデータレイクを簡単に操作できる ‣ CRUD全部可能。Mergeもできる。 ‣ 物理ファイルを意識することなく、普通のRDBのようにデータレイクを扱える ‣ 変更はメタデータのみでデータファイル自体は影響なし

    • スキーマ変更ができる ‣ 列追加、ドロップ、列名変更、並べ替え ‣ 変更はメタデータのみでデータファイル自体は影響なし • タイムトラベルとロールバック ‣ 過去のある時点のデータでクエリ、過去のある時点までロールバックができる • 一貫したトランザクション ‣ ACIDを実現。commitされていない変更の影響を受けない • 高速なクエリ ‣ 高速スキャンプランニング、データファイルのフィルタリングなど高速化・効 率化を実現 • 色々なサービスとの連携 ‣ Icebergに準拠しているサービスと簡単に連携が可能
  6. Amazon S3 Tablesとは(再) • Apach Icebergにネイティブで対応する 新しいS3バケット ‣ クエリ速度最大3倍 ‣

    トランザクション処理最大10倍 ‣ レコードのCRUDに対応 ‣ スキーマの変更に対応 ‣ 一貫したトランザクションに対応 ‣ タイムトラベル・ロールバックに対応 • 表形式データを格納するために特別に設計 ‣ 自動コンパクションでデータを最適化 ‣ Namespaceで複数のテーブルをグルーピング ‣ IAMでアクセス制御
  7. S3はもともとIcebergにも対応できる • S3 TablesがなくてもS3でIcebergは対応できてい ました。 ‣ Athenaの Create Tableや、GlueクローラーでIcebergを指定 してテーブルを作成し、S3バケットに保存、利用することが

    できていました • S3 Tablesはコンパクションやパフォーマンス最適 化など、ネイティブでIcebergに対応した新しいバ ケットタイプという位置づけです • S3 Tablesはオブジェクトストレージというより、 ほんとにDatabaseのTableと捉えるほうがしっく りきます
  8. Table Bucketを作る • マネコンからバケット名を指定するだけ ‣ S3にTable bucketsというメニューが増えてる ‣ Table Bucketを作るとGlue

    Data Catalogがセットアップされ て自動的に統合される ‣ Table Bucketはアカウント/リージョン毎に1回だけでOK ‣ CLIやTFCDKでも作れます。
  9. Table Bucketを作る(補足) • AWSの分析サービスとの統合(Public Preview) ‣ Table Bucket作成時、統合をON/OFFする選択がある ‣ ONにするとAthenaやRedshiftからクエリできるようになる

    ‣ 内部的にはLakeFormationが使われる ‣ LakeFormationがS3Tablesにアクセスするための サービスロールが作られる ‣ S3tablescatalogというデータカタログが自動的に作られる
  10. Tableを作る • Tableを作るにはいくつか方法があります ‣ Spark sessionで接続してcreate table ‣ EMRから ‣

    Sparkシェルから ‣ GlueETLジョブから ‣ AWS CLIでcreate-table • 今回は簡単にAWS CLIで作っていきます ‣ 事前にaws-cliを最新化しておいてください ‣ 資料の手順はaws-cli/2.24.7で実施しています
  11. Tableを作る • 次にテーブルのスキーマをこんな感じでJSONファイルとして作ります \ lUBCMF#VDLFU"3/zzઌ΄Ͳ࡞੒ͨ͠5BCMF#VDLFUͷ"3/ lOBNFTQBDFzlઌ΄Ͳ࡞੒໊ͨ͠લ໊ۭؒ lOBNFzz೚ҙͷςʔϒϧ໊ GPSNBU*$&#&3( NFUBEBUB\ JDFCFSH\

    TDIFNB\ pFMET< \OBNFJE UZQFJOU SFRVJSFEUSVF^ \OBNFOBNF UZQFTUSJOH^ \OBNFWBMVF UZQFJOU^ > ^ ^ ^ ^
  12. データを入れる • S3 Tablesにデータを入れるには いくつか方法があります ‣ Spark sessionで接続してinsert table ‣

    EMRから ‣ Sparkシェルから ‣ GlueETLジョブから ‣ Athenaで接続して insert table ‣ Firehoseから入れる • 今回はAthenaで接続して操作します
  13. AthenaでS3 Tablesに接続する設定 • Principalsで権限を与える対象を設定 ‣ 通常は今マネコンにアクセスしているIAM User or IAM Role

    ‣ ↓の環境ではマネコンにAWS SSOから入っているのでSSOで割り 当てられるロールを指定してます
  14. AthenaでS3 Tablesに接続する設定 • アクセス可能にするリソースを指定 ‣ Named Data Catalog resoucesを選択 ‣

    Catalogsから 「AWSアカウントID:s3tablescatalog」を選択 ‣ これを選択しておくとS3 Tablesの全部のnamespace/tableが対象 になります。適宜対象を絞ってください。
  15. S3 Tables 削除方法 • ちょっとだけ注意点あり ‣ マネコンからはTableBucketを作れるが、削除できない ‣ 2025/2/19時点 ‣

    aws cliからの削除が必要 ‣ 削除順がある ‣ Table -> Namespace -> TableBucketの順に削除する ‣ 同一Bucket内にNamespaceが複数ある場合、マネコンでは 全部見れない(?)ようなので、その場合はCLIで参照する 必要あり
  16. 削除用コマンド • テーブルの削除 • NameSpaceの削除(Table全部削除後) • Table Bucketの削除 BXTTUBCMFTEFMFUFUBCMF= UBCMFCVDLFUBSOUBCMFCVDLFUͷ"3/=

    OBNFTQBDFର৅ͷ໊લۭؒ= OBNFςʔϒϧ໊ BXTTUBCMFTEFMFUFOBNFTQBDF= UBCMFCVDLFUBSOUBCMFCVDLFUͷ"3/= OBNFTQBDFର৅ͷ໊લۭؒ BXTTUBCMFTEFMFUFUBCMFCVDLFU= UBCMFCVDLFUBSOUBCMFCVDLFUͷ"3/
  17. 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標準にはこの課⾦はない
  18. その他の方法 • 紹介しきれなかったのでリンクでまとめます ‣ 構築系 ‣ 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発表内容の翻訳
  19. まとめ • S3 Tablesは新しいバケットタイプ ‣ データレイクに最適化されたテーブル(≠ファイル) ‣ CRUDする感じでSQLで利用 by Spark/Athena…

    ‣ コンパクション等、管理面はAWSがやってくれる • Apache Iceberg形式に対応 ‣ 様々なサービスからアクセス可能(AWS内/外) ‣ 既存のデータレイクの様々な課題を解消 ‣ 次世代データレイクの主軸となりそう