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

Iceberg The Definitive Guide 輪読会第一回

Avatar for Kentaro Maeda Kentaro Maeda
September 11, 2024

Iceberg The Definitive Guide 輪読会第一回

Avatar for Kentaro Maeda

Kentaro Maeda

September 11, 2024
Tweet

Other Decks in Programming

Transcript

  1. データレイクハウスに⾄るまでの系譜 3 ©RAKUDEJI Inc, 2024. PostgreSQL 取り込みにコストが かかる クラウド データウェアハウス

    データレイク データレイク ハウス オンプレ データウェアハウス リレーショナル データベース Teradata MySQL Snowflake Apache Hive Apache Iceberg ⾼い・スケールしない 集計が遅い 集計が早い 無限にスケールする 取り込みが簡単 データの不整合が発⽣しない スキーマオンライト パフォーマンスの問題を改善 カタログとエンジンの互換性 ファイル数が巨⼤になると遅い スキーマオンリード
  2. データレイクとデータレイクハウス 4 ©RAKUDEJI Inc, 2024. Hive: 代表的なデータレイクのテーブルフォーマット db1.table1というテーブルは/db1/table1というディレクトリに格納されるシンプルな構成 ⾼速化のためにクラスタリングをサポート `where

    k1=A`の時は/db/table1/k1=A以下だけを⾒れば良い 問題点 フォルダ=テーブルという構成はわかりやすいが効率が悪かった 遅い 例えばk1=Aに該当するファイルが数千万個になった場合に S3のファイルスキャンが遅い(最⼤5500 ファイル/s) 整合性の問題 ファイルの削除順の問題 k1=Aに該当するファイルを削除中に読み取りが⾏われた 場合に不完全な結果を返す場合がある
  3. データレイクとデータレイクハウス 5 ©RAKUDEJI Inc, 2024. Iceberg: Hiveの問題点を解決するためのテーブルフォーマット。 ファイルとフォルダではなく、メタデータファイルで具体的なデータファイルを指定 クエリエンジンがIcebergテーブルにクエリを⾏うまで 1.

    Icebergカタログから、メタデータファイルの場所(s3)を取得 2. クエリエンジンがメタデータファイルからスキーマ、パーティション情報、 最新のスナップショットを読み込む 3. クエリエンジンが最新のスナップショットのマニフェストリストの場所を取 得 4. クエリエンジンがマニフェストリストからマニフェストファイル⼀覧を取得。 マニフェストファイルにはデータファイルの場所、列の最⼤値・最⼩値など の情報が含まれている。 5. クエリエンジンが、SQLの条件から読み込むべきファイルを絞り込む(プルー ニング) 6. クエリエンジンがデータレイヤーにアクセスして、データを取り出す 7. クエリエンジンがマシンリソースで処理して結果を返す
  4. クエリエンジンとは︖ 7 ©RAKUDEJI Inc, 2024. どんなコンピューターで処理するか︖どうやってデータを取得するか︖などを管理する Snowflake Snowflakeの管理するウェアハウスで処理 Spark AWS

    SageMakerなどからSparkクラスタを⽤意して利⽤ Trino AWS EC2などで セルフホストできる分散クエリエンジン Icebergだけでなく、S3やRDBなどに直接 クエリできる
  5. Icebergを利⽤するのはどんなときか︖ 8 ©RAKUDEJI Inc, 2024. 1. 数⼗TB~規模の巨⼤なデータを格納する場合 COPY INTOを実⾏するコストをカットできる 例:

    携帯キャリアの通信履歴、Netflixの視聴履歴 2. SparkやTrinoからも同じテーブルにアクセスしたい場合 Snowflake以外からもクエリできる 例: 沢⼭の⼦会社などがあり、Snowflakeを強制することが出来ない場合 Icebergテーブルを作るようにすれば、データの移動なく様々なクライアントからアクセスできる
  6. SnowflakeのIcebergテーブルでサポートされていない機能 9 ©RAKUDEJI Inc, 2024. * クローン * ⼀部のドライバー: *

    ODBCドライバー * .NETドライバー * Go Snowflakeドライバー * Snowflake⽤PHP PDOドライバー * Node.jsドライバー * ダイナミックテーブル * フェイルセーフ * ハイブリッドテーブル * クエリ⾼速化サービス * Icebergテーブル、外部ボリューム、カタログ統合のレプ リケーション * 検索最適化サービス * Snowflake暗号化 * Snowflake Nativeアプリフレームワーク * Snowflakeスキーマ進化 * Snowpipeストリーミング: * SnowpipeストリーミングでのSnowflake Connector for Kafkaコネクタ * Snowflake Ingest SDK * Snowpipeストリーミング API * ⼀時テーブルと⼀時的テーブル 外部カタログを使⽤するIcebergテーブル: * クラスタリング * 標準ストリーム