Slide 1

Slide 1 text

Iceberg で Amazon Athena を データウェアハウスぽく使おう クラメソおおさか IT 勉強会 Midosuji Tech #1 「クラメソエンジニアが語る AWS 使いこなしテク」 niino 1

Slide 2

Slide 2 text

⾃⼰紹介 niino(@kniino1234) ● データアナリティクス事業本部 インテグレーション部 機械学習チーム ○ 2023 Japan AWS Top Engineer(Analytics) ● 最近の⾼い買い物︓ベース ● 奈良県出⾝ ⼤阪オフィス所属 この辺の出身

Slide 3

Slide 3 text

3 今日話すこと • Icebergとは • データレイクとデータウェアハウス • テーブルフォーマットとは • Athenaで使うIceberg • スキーマ(Schema Evolution) • パーティション

Slide 4

Slide 4 text

4 Icebergとは

Slide 5

Slide 5 text

Icebergとは データウェアハウスのように使える データレイクのテーブルフォーマット

Slide 6

Slide 6 text

6 データレイクとデータウェアハウス

Slide 7

Slide 7 text

DB ログ IoT Stream データレイク 収集 (Extract) 整形・ロード (Transform/Load) 参照・出⼒・推論 (Output) 可視化 分析 機械学習 データウェアハウス データレイクとデータウェアハウス 7

Slide 8

Slide 8 text

DB ログ IoT Stream データレイク 収集 (Extract) 整形・ロード (Transform/Load) 参照・出⼒・推論 (Output) 可視化 分析 機械学習 データウェアハウス ・ ・ ・ ・ ・ ・ データレイクとデータウェアハウス 8 Amazon Redshift Amazon Athena Amazon S3

Slide 9

Slide 9 text

9 テーブルフォーマットとは

Slide 10

Slide 10 text

10 テーブルフォーマット データ投⼊ データ取得・処理 CSV/JSON… ユーザー コンピュート CSVやJSONといったファイルを処理する →コンピュートからのデータアクセスの効率がよくない

Slide 11

Slide 11 text

11 テーブルフォーマット データ投⼊ データ取得/処理 Parquet/ORC/Avro Avro, Parquet, ORCなど、処理効率がいいファイル形式が 登場 ⾏1 2024-06-12 Tシャツ 5980 ⾏2 2024-06-13 スカート 10000 Date 2024-06-12 2024-06-13 Product Tシャツ スカート Price 5980 10000 ⾏指向 列指向

Slide 12

Slide 12 text

12 テーブルフォーマット データ投⼊ データ取得/処理 Parquet/ORC/Avro ファイルを管理する仕組み、テーブルフォーマットが登場 テーブルフォーマットを介してデータにアクセスする Iceberg/Delta Lake/Hudi…

Slide 13

Slide 13 text

Icebergとは データウェアハウスのように使える データレイクのテーブルフォーマット 従来のテーブルフォーマット Iceberg データファイルを編集できない UPDATE/DELETE/MERGEによる データの編集・削除が可能 トランザクションがサポート されておらずデータの⼀貫性を保てない ACIDトランザクションによる 同時アクセス時の整合性を担保 過去のデータの状態を復元できない テーブルのタイムトラベル機能 ファイルの物理的な構造を元に パーティション構造を参照 メタデータを元にパーティション構造 を把握する、より精度の⾼い パーティショニング

Slide 14

Slide 14 text

Icebergとは データウェアハウスのように使える データレイクのテーブルフォーマット 従来のテーブルフォーマット Iceberg データファイルを編集できない UPDATE/DELETE/MERGEによる データの編集・削除が可能 トランザクションがサポート されておらずデータの⼀貫性を保てない ACIDトランザクションによる 同時アクセス時の整合性を担保 過去のデータの状態を復元できない テーブルのタイムトラベル機能 ファイルの物理的な構造を元に パーティション構造を参照 メタデータを元にパーティション構造 を把握する、より精度の⾼い パーティショニング データファイルに 紐づくメタデータを 持つことで柔軟な データアクセスが可 能に

Slide 15

Slide 15 text

Athenaで使うIceberg Athena + Iceberg + Step Functions ● データ変換をAthena上のSQLで実施 ● データの投⼊(UPDATE・MERGE)実⾏ ● SQL実⾏や通知などをすべてStep Functions でワークフロー化 ● CDKを利⽤したコード管理 ポイント ● 可読性の⾼いSQLを使った変換処理で 属⼈化を防ぐ ● GUIベースでワークフローを簡単に 作れてコード管理もできる ● Athenaを利⽤することで⽐較的コストを抑え られる

Slide 16

Slide 16 text

Athenaで使うIceberg Athena + Iceberg + Step Functions ● データ変換をAthena上のSQLで実施 ● データの投⼊(UPDATE・MERGE)実⾏ ● SQL実⾏や通知などをすべてStep Functions でワークフロー化 ● CDKを利⽤したコード管理 ポイント ● 可読性の⾼いSQLを使った変換処理で 属⼈化を防ぐ ● GUIベースでワークフローを簡単に 作れてコード管理もできる ● Athenaを利⽤することで⽐較的コストを抑え られる スキーマ変更・パーティション管理が 便利

Slide 17

Slide 17 text

スキーマ

Slide 18

Slide 18 text

Schema Evolution 時間の経過や要件の変化によりスキーマが変更される →既存データを保持し、古いスキーマとの互換性を 維持しつつ、スキーマを変更を実現する Productテーブル ID Name Price(JPY) 1 Tシャツ 7980 2 スカート 10000 Productテーブル ID Name Price(JPY) Inventory 1 Tシャツ 7980 100 2 スカート 10000 50

Slide 19

Slide 19 text

Schema Evolution Icebergでのスキーマ変更はメタデータファイルの変更のみ テーブル再作成、データ再ロードの必要なし • Add(新しい列追加) • Drop(既存の列削除) • Rename(列名変更) • Update(データ型を拡張) • Reorder(列の順序変更) ALTER TABLE iceberg_table ADD COLUMNS (new_column string) ALTER TABLE iceberg_table DROP COLUMN price ALTER TABLE iceberg_table CHANGE COLUMN old_column new_column string FIRST

Slide 20

Slide 20 text

パーティション

Slide 21

Slide 21 text

Partition Evolution クエリパターンの傾向の変化により、パーティション 変更が必要になるケース ⽉ごとに 分析すれば⼗分 ⽇ごとの傾向の 変化が⾒たい…

Slide 22

Slide 22 text

Partition Evolution 既存データの変更なしで パーティション⽅式の 変更が可能 →2024/6現在、Athenaで はパーティション関連の DDL⽂はサポートされてい ない

Slide 23

Slide 23 text

Hidden Partition カラムの値を関数で変換し、パーティション値を⽣成可能 CREATE TABLE iceberg_table (id bigint, data string, category string) PARTITIONED BY (day(date_stamp), bucket(5, id)) LOCATION 's3://DOC-EXAMPLE-BUCKET/your- folder/' TBLPROPERTIES ( 'table_type' = 'ICEBERG' ) date_stamp=2024-04-10 10:00:00 date_stamp=2024-04-10 11:00:00 date_stamp=2024-04-12 10:00:00 date_stamp_day=2024-04-10 date_stamp_day=2024-04-12 データ パーティション 004d7e64/ id=0001 id=0002 パーティション 1c795a1a/ 224702fd/ 24052aa/ 37893aw/ id=0003 id=0004 … day(date_stamp) bucket(5,id) データ

Slide 24

Slide 24 text

Athenaで利⽤可能なHidden Partitionの関数 関数 機能 例 year(timestamp) 年部分でパーティション化 2024 month(timestamp) ⽉部分でパーティション化 2024-06 day(timestamp) ⽇付部分でパーティション化 2024-06-12 hours(timestamp) 時間部分でパーティション化 2024-06-12-19 bucket(n, カラム) 指定した(n)数のバケットに パーティションを分割 buket(5,id)では、idの値ごと に5つのバケットに分散 truncate(n, カラム) 指定した(n)⽂字⽬の値で パーティション化 truncate(1,id)では、idの1⽂字 ⽬でパーティション化

Slide 25

Slide 25 text

まとめ

Slide 26

Slide 26 text

Icebergとは データウェアハウスのように使える データレイクのテーブルフォーマット 従来のテーブルフォーマット Iceberg データファイルを編集できない UPDATE/DELETE/MERGEによる データの編集・削除が可能 トランザクションがサポート されておらずデータの⼀貫性を保てない ACIDトランザクションによる 同時アクセス時の整合性を担保 過去のデータの状態を復元できない テーブルのタイムトラベル機能 ファイルの物理的な構造を元に パーティション構造を参照 メタデータを元にパーティション構造 を把握する、より精度の⾼い パーティショニング

Slide 27

Slide 27 text

まとめ l Icebergを使ってデータウェアハウスでも提供され ている操作をデータレイクにも実⾏できる l スキーマ変更のクエリが使える l Hidden Partitionで新たにカラムを作成すること なくパーティション値を⽣成できる

Slide 28

Slide 28 text

参考 l Evolution - Apache Iceberg l What is Schema Evolution? | Dremio l ALTER TABLE ADD PARTITION - Amazon Athena l AWSにおける Hudi/Iceberg/Delta Lake の 使 いどころと違いについて

Slide 29

Slide 29 text

29