Iceberg book review
『実践Apache Iceberg』を読んだ感想です。 ご恵贈いただきありがとうございます。
第1部では、なぜIcebergが誕生したのかについて、当時Hiveが抱えていた問題を踏まえながら分かりやすく解説されています。 Hiveを使ったり運用した経験のある方なら、Icebergが解決しようとしている課題をすぐに理解できると思います。 Hive Metastoreに保存されるパーティション情報が原因となる問題については、LINEヤフー社のブログや登壇資料でも紹介されており、ある程度大規模なHive環境を運用していると高い確率で直面する課題ですね。
Icebergのトランザクション分離レベルや同時実行制御についても触れられており、英語でも体系的にまとまった情報が少ない領域なので、とても参考になりました。
また、スキーマ定義をIDベースで管理することの利点についても分かりやすく説明されています。 名前ベースで管理すると、カラムをDROPした後に同じ名前でADDすると削除したはずのデータが復活してしまう、といった問題が発生する可能性があります。
さらに、V3スペックに関しても触れられており、最新のIcebergがどのような機能を実装しているかが見えてきます。
カタログに関する章でRESTカタログが単体で利用できずプロキシのような役割を果たす、というのは少し違うかな…?かなと感じました。 確かに公式の実装(apache/iceberg-rest-fixture)は内部的にはJDBCカタログに対するプロキシですが、 他のカタログが必須な訳ではなく、プロキシさせていない実装も存在します。
Sparkを例にカタログとFileIOの関係が説明されており、Icebergを利用する上で重要なポイントが押さえられています。 FileIOは環境を構築する上で重要ですが、説明が簡略化されていることも多いので、嬉しいですね。
第2部では、代表的なクエリエンジンの設定方法や利用方法がまとめられており、Icebergを始める際の参考になります。 PyIcebergについてはあまり詳しくなかったので、1章まるごと割いて丁寧に解説されているのは嬉しいポイントでした。 この章を読み始める前にOTF Talkの疋田さんのPyIceberg回を聴いたところだったので、理解がさらに深まりました。
ここで紹介されているクエリエンジンを実際に使う予定がなくても、基礎となる考え方を理解するのに役立ちます。
Hiveの章ではTRUNCATE文はSparkやTrinoでサポートされていないと書かれていますが、実際にはどちらのクエリエンジンもサポートしています。 また、Trinoの章で型の変更例でVARCHAR → VARCHAR(100)が紹介されていますが、IcebergはVARCHAR(n)をサポートしておらず、内部的にはVARCHAR → VARCHARと見なされるため、構文自体は合っていますが何も変更は入らず処理が終わります。
第3部はユースケースから始まり、運用を進める中で必ず直面するであろう課題にも触れられており、まさに実践的な内容になっています。 ユースケースの紹介は文章のみの場合もありますが、実際のコード例が掲載されているのはありがたいですね。
また、パーティション定義やソート方式の変更といったALTER TABLEによる操作が、基本的に既存のデータには影響を与えないという点は非常に重要ですね。 Icebergユーザーがこの挙動を理解していないために質問している場面をよく見かけます。
最適化の方法についても、基本的な手法から高度な手法まで幅広く紹介されています。 著者の田中さんがOTF Talkで話されていたように、まずはパーティション設計やファイルサイズ調整といった基本的な最適化から取り組むことが重要という点には強く共感します。 実際にさまざまなお客さまのIceberg関連の問題を見ていると、この段階で解決できるケースがかなり多い印象を受けます。
全体を通して、Icebergの基本的な概念から実践的な内容まで幅広くカバーされており、Icebergをこれから使い始める人や既に使っている人にとっても有益な情報が詰まっています。 Icebergに関する日本語の情報はまだまだ少ないので、貴重なリソースになると思います。