Slide 1

Slide 1 text

2025/6/2 Storage JAWS & BigData JAWS 共同開催 ~ S3×Icebergが切り拓く、OTF時代の分析基盤~ S3 Tables を図解でやさしくおさらい ~基本から QuickSight 連携まで

Slide 2

Slide 2 text

目次 2 ⚫ Iceberg を図解でやさしくおさらい ⚫ S3 Tables を図解でやさしくおさらい ⚫ QuickSight に連携して可視化してみる ⚫ まとめ

Slide 3

Slide 3 text

Iceberg を図解でやさしくおさらい 3 ⚫ Iceberg を図解でやさしくおさらい ⚫ S3 Tables を図解でやさしくおさらい ⚫ QuickSight に連携して可視化してみる ⚫ まとめ

Slide 4

Slide 4 text

Iceberg を図解でやさしくおさらい

Slide 5

Slide 5 text

Iceberg を図解でやさしくおさらい 5 ⚫ データレイク上で発生する様々な問題(大容量データを保存している故に…) ⚫ レコードレベルの小さなデータを高頻度で書き込み・更新・削除反映するのが大変 ⚫ 同時書き込み時の整合性担保 ⚫ 過去の状態の復元に手間と時間がかかる ⚫ 大量データのスキーマ変更の負担増 「特定の時間帯の処理だけ書き換えたい」 「特定の処理をやり直したい」 なども、データ量が多いと探すのが大変

Slide 6

Slide 6 text

Iceberg を図解でやさしくおさらい 6 ⚫ データレイク上で発生する様々な問題(大容量データを保存している故に…) ⚫ レコードレベルの小さなデータを高頻度で書き込み・更新・削除反映するのが大変 ⚫ 同時書き込み時の整合性担保 ⚫ 過去の状態の復元に手間と時間がかかる ⚫ 大量データのスキーマ変更の負担増 データベースであれば ロック機能で同時アクセスを制御したり トランザクションで整合性を保証したりするが…

Slide 7

Slide 7 text

Iceberg を図解でやさしくおさらい 7 ⚫ データレイク上で発生する様々な問題(大容量データを保存している故に…) ⚫ レコードレベルの小さなデータを高頻度で書き込み・更新・削除反映するのが大変 ⚫ 同時書き込み時の整合性担保 ⚫ 過去の状態の復元に手間と時間がかかる ⚫ 大量データのスキーマ変更の負担増 を再度参照したく なった! …どうする?

Slide 8

Slide 8 text

Iceberg を図解でやさしくおさらい 8 ⚫ データレイク上で発生する様々な問題(大容量データを保存している故に…) ⚫ レコードレベルの小さなデータを高頻度で書き込み・更新・削除反映するのが大変 ⚫ 同時書き込み時の整合性担保 ⚫ 過去の状態の復元に手間と時間がかかる ⚫ 大量データのスキーマ変更の負担増 全ファイルを読み込んで 新スキーマに変換して 全ファイルを書き直して…

Slide 9

Slide 9 text

Iceberg を図解でやさしくおさらい 9 ⚫ Open Table Format (OTF) レイヤー を挟むことで課題解消 ⚫ OTF:データレイク上のファイルに対して、 テーブル構造とメタデータ管理を提供する テーブルフォーマット ⚫ Apache Iceberg:OTF の一つ

Slide 10

Slide 10 text

Iceberg を図解でやさしくおさらい 10 ⚫ Iceberg カタログ ⚫ テーブルの入り口のようなもの ⚫ テーブル名 → 最新メタデータファイルへのポインター ⚫ メタデータファイル(スナップショット) ⚫ テーブルの「ある時点の状態」を記録 ⚫ スキーマ情報 ⚫ パーティション情報 ⚫ どのマニフェストリストを参照するか ⚫ タイムスタンプ ⚫ マニフェストリスト ⚫ マニフェストファイルの目次 ⚫ どのマニフェストファイルが存在するか ⚫ 各マニフェストファイルの統計情報 ⚫ パーティション範囲情報 ⚫ マニフェストファイル ⚫ データファイルの詳細リスト ⚫ 個々のデータファイルのパス ⚫ ファイルサイズ、行数 ⚫ 統計情報(最小値、最大値等) ⚫ ファイルの状態(追加/削除)

Slide 11

Slide 11 text

⚫ Iceberg カタログ ⚫ テーブルの入り口のようなもの ⚫ テーブル名 → 最新メタデータファイルへのポインタ ⚫ メタデータファイル(スナップショット) ⚫ テーブルの「ある時点の状態」を記録 ⚫ スキーマ情報 ⚫ パーティション情報 ⚫ どのマニフェストリストを参照するか ⚫ タイムスタンプ ⚫ マニフェストリスト ⚫ マニフェストファイルの目次 ⚫ どのマニフェストファイルが存在するか ⚫ 各マニフェストファイルの統計情報 ⚫ パーティション範囲情報 ⚫ マニフェストファイル ⚫ データファイルの詳細リスト ⚫ 個々のデータファイルのパス ⚫ ファイルサイズ、行数 ⚫ 統計情報(最小値、最大値等) ⚫ ファイルの状態(追加/削除) Iceberg を図解でやさしくおさらい 11 メタデータ層が挟まることで 大量データの中から 特定のデータの処理をするための 位置特定が早く効率的になる とてもざっくり

Slide 12

Slide 12 text

Iceberg を図解でやさしくおさらい 12 ⚫ CoW と MoR ⚫ CoW(Copy-on-Write) ⚫ データの更新や削除が発生すると、影響を受けるデータ ファイル全体が書き直される ⚫ 読み取り性能は優れるが、書き込み操作は時間とコンピ ューティングリソースが必要 ⚫ 日次バッチロードなど、同じテーブルパーティション内 で更新が集中する使用ケースに適している ⚫ MoR(Merge-on-Read) ⚫ データの更新や削除時に、既存のファイルは変更せず新 しいファイルのみ追加 ⚫ 書き込み増幅を回避し、更新操作が高速 ⚫ 読み取り時にデータのマージが必要となるため、読み取 り性能は若干低下する可能性あり ⚫ 頻繁な書き込みや更新が行われるテーブルに適している

Slide 13

Slide 13 text

⚫ CoW と MoR ⚫ CoW(Copy-on-Write) ⚫ データの更新や削除が発生すると、影響を受けるデータ ファイル全体が書き直される ⚫ 読み取り性能は優れるが、書き込み操作は時間とコンピ ューティングリソースが必要 ⚫ 日次バッチロードなど、同じテーブルパーティション内 で更新が集中する使用ケースに適している ⚫ MoR(Merge-on-Read) ⚫ データの更新や削除時に、既存のファイルは変更せず新 しいファイルのみ追加 ⚫ 書き込み増幅を回避し、更新操作が高速 ⚫ 読み取り時にデータのマージが必要となるため、読み取 り性能は若干低下する可能性あり ⚫ 頻繁な書き込みや更新が行われるテーブルに適している Iceberg を図解でやさしくおさらい 13 MoR の場合、 データファイルを直接参照して 行を削除するのではなく メタデータに 「このデータは削除したよ」 という情報を追記する (探して削除するより早い)

Slide 14

Slide 14 text

Iceberg を図解でやさしくおさらい 14 ⚫ タイムトラベルクエリ ⚫ すべての更新操作にはタイムスタンプが記録 されるため、過去の任意の時点のデータスナ ップショットに簡単にアクセスできる 「タイ ムトラベルクエリ」 が実行可能 ⚫ Serializable Isolation ⚫ 「複数のトランザクションが同時実行されて も、順番に実行したのと同じ結果になる」と いう最も厳しい分離レベルでのトランザクシ ョンをサポート

Slide 15

Slide 15 text

Iceberg を図解でやさしくおさらい 15 ⚫ Schema Evolution ⚫ 既存のデータスキーマを変更する機能 ⚫ 列の追加や削除、名前変更などがリアルタイ ムで可能であり、データの履歴を損なうこと なく適用可能 ⚫ Iceberg スキーマの更新はメタデータの変更 であるため、更新を実行するためにデータフ ァイルの書き換えは発生しない Evolution - Apache Iceberg

Slide 16

Slide 16 text

S3 Tables を図解でやさしくおさらい 16 ⚫ Iceberg を図解でやさしくおさらい ⚫ S3 Tables を図解でやさしくおさらい ⚫ QuickSight に連携して可視化してみる ⚫ まとめ

Slide 17

Slide 17 text

S3 Tables を図解でやさしくおさらい

Slide 18

Slide 18 text

S3 Tables を図解でやさしくおさらい 18 ⚫ S3 Tables ⚫ Apache Iceberg サポートが組み込まれたオブジェクトストレージ ⚫ 性能を維持するよう、自動でメンテナンスタスクを実行してくれる ⚫ コンパクション、圧縮、スナップショット管理、参照されていないファイルの削除、など ⚫ AWS 分析サービスとシームレスに統合 ⚫ S3 コンソールからテーブルバケットを AWS 分析サービスと自動的に統合 ⚫ テーブルが AWS Glue Data Catalog に追加されるため、統合後は Athena、Redshift、 QuickSight などの分析サービスからテーブル操作可能 S3 Tables Amazon S3 Tables とテーブルバケットの使用 - Amazon Simple Storage Service https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-tables.html

Slide 19

Slide 19 text

S3 Tables を図解でやさしくおさらい 19 ⚫ S3 Tables ⚫ Apache Iceberg サポートが組み込まれたオブジェクトストレージ ⚫ 性能を維持するよう、自動でメンテナンスタスクを実行してくれる ⚫ コンパクション、圧縮、スナップショット管理、参照されていないファイルの削除、など ⚫ AWS 分析サービスとシームレスに統合 ⚫ S3 コンソールからテーブルバケットを AWS 分析サービスと自動的に統合 ⚫ テーブルが AWS Glue Data Catalog に追加されるため、統合後は Athena、Redshift、 QuickSight などの分析サービスからテーブル操作可能 S3 Tables Amazon S3 Tables とテーブルバケットの使用 - Amazon Simple Storage Service https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-tables.html Iceberg テーブルでは書き込みが発生するたびにスナップショットが作成されどんどん肥大化する 多数の小さなデータファイルが生成され、クエリ性能が低下する 大量のマニフェストファイルを参照する必要が出てきて、メタデータ処理が重くなる 古いスナップショットや不要なファイルが残り続け、ストレージコストが増加する ↓ ↓ これらを解消するために定期的なメンテナンスが必要

Slide 20

Slide 20 text

S3 Tables を図解でやさしくおさらい 20

Slide 21

Slide 21 text

S3 Tables を図解でやさしくおさらい 21 S3 Tables というサービスの中に 以下 3 つのコンポーネントが存在する • テーブルバケット • 名前空間(namespace) • テーブル テーブルバケットの中に名前空間、 名前空間の中にテーブルがある、という階層構造

Slide 22

Slide 22 text

S3 Tables を図解でやさしくおさらい 22 カタログは Glue Data Catalog として管理されていて Glue とは図のように対応 作成したテーブルは Athena からクエリできる

Slide 23

Slide 23 text

QuickSight に連携して可視化してみる 23 ⚫ Iceberg を図解でやさしくおさらい ⚫ S3 Tables を図解でやさしくおさらい ⚫ QuickSight に連携して可視化してみる ⚫ まとめ

Slide 24

Slide 24 text

QuickSight に連携して可視化してみる

Slide 25

Slide 25 text

QuickSight に連携して可視化してみる 25 ⚫ Lake Formation の Resource link を作成 ⚫ QuickSight からアクセスする権限を設定する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加 ⚫ アクセスするテーブルに対する Lake Formation アクセス許可を付与 ⚫ Database(Resource link)の権限付与 ⚫ Database(Resource link)内のテーブル ⚫ QuickSight に連携して可視化してみる

Slide 26

Slide 26 text

QuickSight に連携して可視化してみる 26 ⚫ Lake Formation の Resource link を作成 ⚫ QuickSight からアクセスする権限を設定する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加 ⚫ アクセスするテーブルに対する Lake Formation アクセス許可を付与 ⚫ Database(Resource link)の権限付与 ⚫ Database(Resource link)内のテーブル ⚫ QuickSight に連携して可視化してみる

Slide 27

Slide 27 text

QuickSight に連携して可視化してみる 27 AWSアカウントID AWSアカウントID AWSアカウントID ⚫ Lake Formation の Resource link を作成 デフォルトの Catalog (AWS アカウント ID) と S3 テーブルバケットとして作成した Catalog があるので注意 デフォルトの Catalog (AWS アカウント ID) を選択

Slide 28

Slide 28 text

QuickSight に連携して可視化してみる 28 AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID デフォルトの Catalog (AWS アカウント ID) を選択 Shared database で出てこない 自分で namespace 名を入れる

Slide 29

Slide 29 text

QuickSight に連携して可視化してみる 29 Catalog ID をコピー AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID

Slide 30

Slide 30 text

QuickSight に連携して可視化してみる 30 AWSアカウントID AWSアカウントID Catalog ID で出てこない 自分で Catalog ID を入れる

Slide 31

Slide 31 text

QuickSight に連携して可視化してみる 31 AWSアカウントID AWSアカウントID AWSアカウントID ⚫ Lake Formation の Resource link が作成できた

Slide 32

Slide 32 text

QuickSight に連携して可視化してみる 32 ⚫ Lake Formation の Resource link を作成 ⚫ QuickSight からアクセスする権限を設定する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加 ⚫ アクセスするテーブルに対する Lake Formation アクセス許可を付与 ⚫ Database(Resource link)の権限付与 ⚫ Database(Resource link)内のテーブル ⚫ QuickSight に連携して可視化してみる

Slide 33

Slide 33 text

QuickSight に連携して可視化してみる 33 Glue Catalog に権限を付与したいので、 カスタムの IAM ロールを使用する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加

Slide 34

Slide 34 text

QuickSight に連携して可視化してみる 34 AWSアカウントID

Slide 35

Slide 35 text

QuickSight に連携して可視化してみる 35 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "glue:GetCatalog", "Resource": "*" } ] } ポリシー名の例:allow-glue-catalog ⚫ 付与する IAM ポリシー (Sid は任意)

Slide 36

Slide 36 text

QuickSight に連携して可視化してみる 36 ⚫ Lake Formation の Resource link を作成 ⚫ QuickSight からアクセスする権限を設定する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加 ⚫ アクセスするテーブルに対する Lake Formation アクセス許可を付与 ⚫ Database(Resource link)の権限付与 ⚫ Database(Resource link)内のテーブル ⚫ QuickSight に連携して可視化してみる

Slide 37

Slide 37 text

QuickSight に連携して可視化してみる 37 [cloudshell-user@ip-10-132-70-51 ~]$ aws quicksight list-users --aws-account-id 123456789012 --namespace default --region ap-northeast-1 { "UserList": [ { "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/xx.emi/xx.emi", "UserName": "xx.emi/xx.emi", "Email": "[email protected]", "Role": "ADMIN", "IdentityType": "IAM", "Active": true, "PrincipalId": "federated/iam/AROA45YZHQXPSRRI6IZHG:xx.emi" } ], "Status": 200, "RequestId": "df22ccc7-7211-40fb-a1d5-b194db64836f" } [cloudshell-user@ip-10-132-70-51 ~]$ ⚫ AWS CLI list-users コマンドを実行して QuickSight 管理者ユーザーの ARN をコピーし ておく list-users — AWS CLI 2.27.26 Command Reference https://awscli.amazonaws.com/v2/documentation/api/latest/reference/quicksight/list-users.html

Slide 38

Slide 38 text

QuickSight に連携して可視化してみる 38 ⚫ Lake Formation の Resource link を作成 ⚫ QuickSight からアクセスする権限を設定する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加 ⚫ アクセスするテーブルに対する Lake Formation アクセス許可を付与 ⚫ Database(Resource link)の権限付与 ⚫ Database(Resource link)内のテーブル ⚫ QuickSight に連携して可視化してみる

Slide 39

Slide 39 text

QuickSight に連携して可視化してみる 39 AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID ⚫ Database(Resource link)の権限付与

Slide 40

Slide 40 text

QuickSight に連携して可視化してみる 40 AWSアカウントID AWSアカウントID AWSアカウントID QuickSight ユーザーの ARN

Slide 41

Slide 41 text

QuickSight に連携して可視化してみる 41

Slide 42

Slide 42 text

QuickSight に連携して可視化してみる 42 AWSアカウントID AWSアカウントID

Slide 43

Slide 43 text

QuickSight に連携して可視化してみる 43 ⚫ Lake Formation の Resource link を作成 ⚫ QuickSight からアクセスする権限を設定する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加 ⚫ アクセスするテーブルに対する Lake Formation アクセス許可を付与 ⚫ Database(Resource link)の権限付与 ⚫ Database(Resource link)内のテーブル ⚫ QuickSight に連携して可視化してみる

Slide 44

Slide 44 text

QuickSight に連携して可視化してみる 44 AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID AWSアカウントID Grant on target

Slide 45

Slide 45 text

QuickSight に連携して可視化してみる 45 AWSアカウントID AWSアカウントID AWSアカウントID これまでと Catalogs が違うことに注意 S3 テーブルバケットのカタログを選択

Slide 46

Slide 46 text

QuickSight に連携して可視化してみる 46 AWSアカウントID

Slide 47

Slide 47 text

QuickSight に連携して可視化してみる 47 AWSアカウントID AWSアカウントID AWSアカウントID

Slide 48

Slide 48 text

QuickSight に連携して可視化してみる 48 ⚫ Lake Formation の Resource link を作成 ⚫ QuickSight からアクセスする権限を設定する ⚫ QuickSight の IAM ロールに IAM ポリシーを追加 ⚫ アクセスするテーブルに対する Lake Formation アクセス許可を付与 ⚫ Database(Resource link)の権限付与 ⚫ Database(Resource link)内のテーブル ⚫ QuickSight に連携して可視化してみる

Slide 49

Slide 49 text

QuickSight に連携して可視化してみる 49 QuickSight データセットの作成 Resource Link が 出てくるので選択

Slide 50

Slide 50 text

QuickSight に連携して可視化してみる 50

Slide 51

Slide 51 text

QuickSight に連携して可視化してみる 51

Slide 52

Slide 52 text

まとめ 52 ⚫ Iceberg を図解でやさしくおさらい ⚫ S3 Tables を図解でやさしくおさらい ⚫ QuickSight に連携して可視化してみる ⚫ まとめ

Slide 53

Slide 53 text

まとめ

Slide 54

Slide 54 text

まとめ 54 ⚫ S3 Tables = Apache Iceberg サポート内蔵のオブジェクトストレージ ⚫ データレイクの課題を解決 ⚫ 行レベルの更新・削除、同時書き込み整合性、タイムトラベルクエリ、スキーマ変更を サポート ⚫ 自動メンテナンス ⚫ コンパクション、圧縮、スナップショット管理などを自動実行 ⚫ AWS分析サービスとシームレス統合 ⚫ Glue Data Catalog に自動追加され、Athena、QuickSight などから直接アクセス可能 ⚫ QuickSight 連携には権限設定が必要 ⚫ Lake Formation Resource link 作成 + IAM ポリシー追加 + アクセス許可設定

Slide 55

Slide 55 text

参考 55 ⚫ Apache Iceberg と Amazon S3 Tables - Speaker Deck https://speakerdeck.com/pro ⚫ S3 Tables 向けの Iceberg REST Catalog API が追加されたので、PyIcebergからアクセスしてみた。 | DevelopersIO https://dev.classmethod.jp/articles/add-s3-tables-iceberg-rest-catalog-api/ ⚫ AWS Glue Iceberg REST エンドポイントを使用したデータカタログへの接続方法 - AWS Glue https://docs.aws.amazon.com/ja_jp/glue/latest/dg/connect-glu-iceberg-rest.html ⚫ AWS入門ブログリレー2024〜 Amazon Athena 編〜 | DevelopersIO https://dev.classmethod.jp/articles/introduction-2024-amazon-athena/ ⚫ Apache Iceberg の CoW と MoR 〜 データの読み取りと書き込みのパフォーマンスのバランスを取るための2つの戦略 | DevelopersIO https://dev.classmethod.jp/articles/apache-iceberg-mor-cow-storategy/ ⚫ [調査報告] Amazon Athena Icebergテーブルスキーマの変更を検証してみました! | DevelopersIO https://dev.classmethod.jp/articles/20241021-amazon-athena-iceberg-schema-evolution/ ⚫ Evolution - Apache Iceberg https://iceberg.apache.org/docs/latest/evolution/ ⚫ 統合カタログの Iceberg Open Table Format (プレビュー) のデータ品質 | Microsoft Learn https://learn.microsoft.com/ja-jp/purview/unified- catalog-data-quality-iceberg ⚫ Apache Icebergの解説とAWSでの運用 - Speaker Deck https://speakerdeck.com/shuyasawa/apache-icebergnojie-shuo-toawsdenoyun-yong ⚫ Amazon S3 Tables の Iceberg テーブルを Amazon QuickSight で可視化する #AWSreInvent | DevelopersIO https://dev.classmethod.jp/articles/amazon-s3-tables-quicksight-reinvent/

Slide 56

Slide 56 text

No content