Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ApacheIcebergTheDefinitiveGuide輪読会 Chapter14
Search
bering
November 25, 2024
0
48
ApacheIcebergTheDefinitiveGuide輪読会 Chapter14
Apache Iceberg: The Definitive Guide 輪読会の資料です。
14章 "Real-World Use Cases of Apache Iceberg"を担当しました。
bering
November 25, 2024
Tweet
Share
More Decks by bering
See All by bering
Apache Iceberg The Definitive Guide 輪読会 - 2章 The Architecture of Apache Iceberg
bering
3
590
Apache Iceberg Catalog選択のポイント
bering
6
2.5k
Featured
See All Featured
A better future with KSS
kneath
238
17k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Speed Design
sergeychernyshev
25
670
YesSQL, Process and Tooling at Scale
rocio
169
14k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
How to Ace a Technical Interview
jacobian
276
23k
Statistics for Hackers
jakevdp
796
220k
Transcript
Chapter 14. Real-World Use Cases of Apache Iceberg べりんぐ 2024/11/25
Apache Iceberg: The Definitive Guide 輪読会
べりんぐ • Data Engineering Hobbyist • Twitter: @_Bassari • 技術ブログ書いてます
https://bering.hatenadiary.com/ • 趣味の傍ら、Sotaro Hikitaとして Amazon Web Servicesで働いています 本発表は個人の見解であり、 所属企業を代表するものではありません
Chapter 14. Real-World Use Cases of Apache Iceberg Iceberg の実践的な活用パターンを紹介する章
• Write-Audit-Publish (WAP) によるデータ品質管理 • Dremio SQL Query Engine を活用した BI レポートの最適化 • Iceberg による Change Data Capture (CDC) 時間が余れば「みんなのReal-World Use Cases of Apache Iceberg」を話し合いましょう
Write-Audit-Publish (WAP) によるデータ品質管理 • データを効率的かつ安全に公開するためのデータパイプラインの 設計手法 • データ品質の問題がエンドユーザーに影響を与えないようにする • ソースデータを
3 つのステップで公開する Write: 新しいデータを Staging 環境に書き込み Audit: 書き込まれたデータに対して、品質チェックや整合性の検証を実施 Publish: 検査を合格したデータを他のシステムやエンドユーザーが利用で きるように公開 • Netflix が 「WHOOPS, THE NUMBERS ARE WRONG! SCALING DATA QUALITY @ NETFLIX」で紹介
Iceberg の Branching による WAP パターンの実装 基本的な流れ 1. staging branch
を作成 2. staging branch に新規データを書き込み 3. audit user / process が新規データを検査 4. 検査を合格したデータを main branch へパブリッシュ • Branching の概要は Chapter 10 で解説 • 具体的なハンズオン手順は本文に掲載
WAP パターンのディスカッションポイント • データの鮮度をどう考えるか? • 書き込み処理内で品質を検査するパイプラインとの違いは何か? • 検査に合格しなかったデータをどのように処理するか? • Staging
Branch と、そのデータのライフサイクルは? • Branch は main と staging だけで成立する? • 書き込まれ続けるデータにどう対処する? • Spark 以外で WAP パターンを回す方法は? WAP は分かりやすいコンセプトだが、実運用上の考慮点は多い
Dremio SQL Query Engine を活用した BI レポートの最適化 大規模な BI ダッシュボードは、OLAP
キューブを扱う必要がある OLAPキューブ:複数の次元と指標にわたって事前計算された 集計から作成される独立したデータ構造 BI ツールから大規模なデータを参照する上で… • 最新データを反映させるために、定期的な手作業での再作成が必須 • データセットが大きい場合にメモリ不足の問題を引き起こす • 履歴の蓄積は、ストレージコストの増大と運用の複雑化を招く • ダッシュボードは元のテーブルではなく、 BI抽出/OLAP キューブを基に動作させなければならない • ユーザーがダッシュボードの処理を高速化するための構造作成を データエンジニアに依頼する必要があり、 セルフサービスを損なう
Dremio SQL Query Engine を活用した BI レポートの最適化 Dremio SQLクエリエンジンはアグリゲートリフレクション (ユーザーのデータレイク上にApache
Icebergテーブルとして保存され る事前計算された集計)によって BI の課題を解決する • データ構造の更新は Dremio により自動化 • Dremio のクエリエンジンは OOM を回避するために リフレクションを適切に処理 • ダッシュボードは元のテーブルに基づいて構築でき、 BIツールが集計クエリを送信する際に Dremio が自動的に アグリゲートリフレクションに切り替える • SQLクエリで有効化でき、セルフサービスでの高速化が可能 • 基となるテーブルがApache Icebergテーブルの場合、 アグリゲートリフレクションは増分更新され、 データ更新をほぼリアルタイムで反映 • Dremio は自動的に履歴コピーを削除し、ストレージの肥大化を防ぐ
Dremio SQL Query Engine を活用した BI レポートの最適化 Dremio SQLクエリエンジンは virtual
data mart をサポート データマートに対して Iceberg ベースの論理的なビューを作成できる
Dremio SQL Query Engine を活用した BI レポートの最適化 aggregate reflection の作成
ALTER TABLE arctic.logistics.oh_shipments CREATE AGGREGATE REFLECTION oh_shipments_agg USING DIMENSIONS (shipper_id, destination_city, shipping_method) MEASURES (shipment_id (COUNT), total_cost (SUM), delivery_time (AVG)) LOCALSORT BY (shipper_id, destination_city); • Dremioはoh_shipmentsに対して同じディメンションと指標での 集計クエリを受け取るたびに、 自動的にoh_shipments_aggに切り替える • ソーステーブルがApache Icebergテーブルであるため、 リフレクションは増分適用が可能であり、 ほぼリアルタイムでの鮮度を維持
Iceberg による Change Data Capture (CDC) リアルタイムな CDC の実現 1.
Source System が Inventory 情報を Inventory テーブルに格納 2. Inventory テーブルの Change log View を作成 3. Change log View を元に、 変更差分を Inventory_summary テーブルに 定期的に MERGE INTO → Inventory_summary テーブルに Inventory の変更を元にした 最新状態が反映される 具体的なハンズオン手順は本文に掲載
create_changelog_view プロシージャ • compute_updates = true かつ、identifier_columns を与えることで、 特定のカラムをキーとしてレコードが更新されたことを評価できる •
create_changelog_view は MoR / Delete File 非対応である点に注意 CALL spark_catalog.system.create_changelog_view( table => 'db.tbl', options => map('start-snapshot-id','1','end-snapshot-id', '2') ); Iceberg テーブルのスナップショット/タイムスタンプ間の 変更ログを記録したビューを作成 https://iceberg.apache.org/docs/nightly/spark-procedures/#examples_13 Change log view 以外も含めて、IcebergのCDC は以下に詳しい https://www.dremio.com/blog/cdc-with-apache-iceberg/
Kafka Iceberg Sink Connecter https://iceberg.apache.org/docs/latest/kafka-connect/ https://developers.microad.co.jp/entry/2024/04/05/180000 • Kafka の メッセージを
Iceberg Connect 実装 • Tabular 製の Iceberg Sync Connecter が本家 Apache Iceberg へマージ • 現在は Iceberg プロジェクトの一部として提供されている
Slack 社の CDC パイプライン https://current.confluent.io/2024-sessions/change-data-capture-kafka-how-slack- transitioned-to-cdc-with-debezium-kafka-connect https://bering.hatenadiary.com/entry/2024/09/29/125835
Conclusion • 本章では、Apache Iceberg を使った分析ユースケースを説明した • With that, we have
reached the end of our exploration of the Apache Iceberg table format, and you can now build effective data platforms. • ディスカッション: みんなの Real-World Use Cases of Apache Iceberg