Apache Iceberg v3テーブルの仕様:オープンソースコミュニティの共有の成功を祝う

Apache Iceberg™プロジェクトは、オープンソース精神を体現しており、コミュニティが1つの共通の目標、つまりテクノロジーを推進することで何が実現されるかを示します。大規模なアナリティクスに信頼性、性能、オープン性をもたらすというミッションのもと、Icebergプロジェクトは進化を続けており、貢献者の多様な声と努力により多くのメリットを提供しています。
Icebergの最新のマイルストーンであるv3テーブル仕様の批准は、単なる技術的なアップデートではありません。これは、熟慮された設計、何十もの組織と何百もの個人による綿密なディスカッションとコラボレーションの結果です。v3テーブルの仕様には、オープンデータアーキテクチャの未来に向けた共有投資と、Icebergが真にベンダーニュートラルで、柔軟性があり、コミュニティ主導であることへのコミットメントが反映されています。
この記事では、v3テーブル仕様の主な機能に焦点を当て、このリリースに命を吹き込んだ共同作業に光を当てます。
コミュニティ主導の開発
この2年間で、Icebergはオープンテーブルフォーマットのリーディングスタンダードとして台頭し、ユーザーとベンダーの双方がデータの構造について合意できるようになり、それによって得られる相互運用性のメリットを享受できるようになりました。コミュニティ全体の貢献があって初めて、Icebergプロジェクトは真に繁栄し、オープン性、ベンダーの中立性、相互運用性といったすべてのメリットを提供できるようになります。
オープンソースでは、誰でも新しい機能を提案し、自分で構築し、他のコントリビューターと協力してプロジェクトに取り込むことができます。最新のIcebergテーブル仕様に組み込まれた機能は、ベンダーや個人などとの幾多の話し合いの結果であり、ベンダーや個人は、このテクノロジーを引き続き使用または採用するためにIcebergに何が必要かを話し合いました。たとえば、独自のテーブルフォーマットを持つベンダーは、一貫性を保つため特定の機能をIcebergに追加するよう提案できますが、その機能は、Icebergコミュニティ全体がそのプロジェクトにとって有益であることに同意した場合にのみ組み込まれます。これはオープンソースです。
Snowflakeは、Apache Icebergに貢献し、v3テーブル仕様の策定に携われることを誇りに思います。Icebergコミュニティとの協業、そしてSnowflake内でv3をネイティブサポートするという私たちのコミットメントは、「ベンダーがオープンに協力し合う時、誰もが恩恵を受ける」という中核的な信念を反映したものです。このような共同での取り組みこそが、組織が自社のデータとAIの可能性を最大限に引き出すことを真に後押しします。私たちは、ユーザーの皆様にv3サポートを提供できること、そしてv4やオープンなレイクハウスのさらなる未来を見据え、Icebergコミュニティとの協力を継続していくことに、大きな期待を寄せています。
Chris Child
多数のユーザー、コントリビューター、ベンダーがIcebergをサポートするということは、提案された機能や改善案が多様な視点を提供し、結果として実装がより堅牢になることを意味し、これがv3テーブルの仕様となります。
v3テーブルの仕様の概要
v3テーブル仕様は、このテクノロジーにとって大きなマイルストーンであり、数多くの驚異的な新機能をもたらし、ユーザーにとって数え切れないほどのユースケースを実現します。
デフォルト値
機能:デフォルト値では、Icebergユーザーはv3テーブル内のnullや欠損値を処理できます。
仕組み:デフォルト値は、2つの新しいテーブル構成の追加により可能です。write-default
を設定することにより、ユーザーはライターがフィールドの欠損値をどのように処理するかを制御できます。柔軟性のため、いつでも変更できます。一方、テーブルに一度設定される initial-default
は、既存の null を指定された値で置き換えるメカニズムを提供します。
誰がそれを可能にしたか:
Shenoda Guirguis氏、オリジナルの仕様提案
Limian(Raymond)Zhang、最終仕様
実施
Ryan Blue、Iceberg PMCチェア
Walaa Eldin Moustafa氏
削除ベクトル
機能:削除ベクトルは、Icebergで位置の削除を処理するための新しいデフォルトメカニズムです。ユーザーは、例えば小さなファイルの数を減らす(パーティションレベルの粒度を有効にする)か、読み取りを効率化する(ファイルレベルの粒度を有効にする)かを選択して、ポジション削除の構成で一般的に生じるトレードオフを行う必要がなくなりました。
メカニズム:実装後は、位置削除の代わりに削除ベクトルが使用されます。この設計では、複数の削除ベクトルがパフィンファイル(Icebergプロジェクトですでに使用されている高性能なファイルタイプ)に吼えるビットマップとして保存され、インデックスを介して効率的にアクセスできます。興味深いことに、「v2 Icebergには[削除ベクトル]という概念がありましたが、それはメモリ内で使用されました」と、DatabricksのIcebergプロジェクト管理委員会(PMC)メンバー兼シニアスタッフソフトウェアエンジニアのAnton Okolnychyi氏は述べています。「ディスクにはParquetファイル、メモリにはビットマップがありました。v3の設計に着手したら、変換のオーバーヘッドを回避するために何ができるか試したいと考えました。」
既存のParquet実装よりもPuffinファイルを使用するというコミュニティの決定は、ユーザーにパフォーマンスの向上をもたらし、低レイテンシーのユースケースではより良いものになる可能性があります。最終的に、削除ベクトルはユーザーに以下の両方のメリットを提供します。ポジションの削除は、より効率的な読み取りのためにファイルレベルの粒度で表示されますが、小さなファイルの数を減らすために、統合されたPuffinファイルに物理的に保存されます。
誰がそれを可能にしたか:
仕様の変更
Renjie Liu、Iceberg PMCメンバー、原案
Anton Okolnychyi、最終変更
実施
Amogh Jahagirdar氏 Iceberg PMCメンバー
Eduard Tudenhoefner、Iceberg PMCメンバー
地理空間データ型
機能:Icebergは、ジオメトリと地理という2つの新しい地理空間タイプをサポートするようになりました。これにより、他のプロジェクトとの連携が強化され、ユーザーはマッピングと位置データに関する優れた機能を利用できるようになります。
Apache Sedona PMCの会長であり、Wherobotsの共同設立者であるJia Yu氏によると、最終的な機能は膨大なコミュニティ調査の結果です。「Sedona、Databricks、Snowflake、BigQuery、pandas」など、地理空間サポート付きの多くのプロジェクトやテクノロジーを見直しました。「これらのプロジェクトやテクノロジーでは、地理空間データの定義や種類、動作がまったく異なります。」
仕組み:この仕様変更では、地理空間タイプをIceberg内でアクセス可能にするだけでなく、地理空間フィールドのパーティショニングとフィルタリングをどのように処理するか、これらのタイプの列レベルのメトリックはどうあるべきかといった複雑な問題に対処します。述語プッシュダウンと通常の列レベルのメトリックは、地理空間ポイントが最大値と最小値として機能する境界ボックスのある地理空間タイプでも引き続き使用できます。
誰がそれを可能にしたか:
仕様の変更
Iceberg PMCメンバー、Szehon Ho
Gang Wu
Kristin Cowalcijk、実装
Wherobotsチーム全体が、Icebergコミュニティに専門知識を提供し、リーダーシップを発揮し、Icebergプロジェクトの機能を実装する前に、Icebergの独自のフォークで地理空間サポートを実装したことへの特別な言及です。
複数引数の変換
機能:複数引数の変換では、Icebergでパーティション分割やソートを行うために、複数のフィールドに対して変換を実行できます。v3テーブル仕様以前は 単一のフィールドのみを変換できました
誰がそれを可能にしたか:
叶先进, spec changes
実施
Fokko Driesprong氏、Iceberg PMCメンバー
JB Onofré、ASF取締役
行リネージ
機能:行リネージにより、ユーザーはIcebergテーブル内の行がどのように変化したかを簡単に追跡できるようになり、変更データキャプチャ(CDC)ワークフローの改善、監査の容易化、マテリアライズドビューのメンテナンスの改善など、さまざまなユースケースを利用できるようになります。SnowflakeのPMCメンバー兼主任ソフトウェアエンジニアであるラッセル・スピッツァー氏は、最終的に行系統をIcebergに追加することは、「Icebergユーザーが自分のテーブル内のどの行の履歴も正確に判断できることを意味します」と述べています。「以前はユーザー定義のID列に基づいて推測するしかできませんでしたが、今ではフォーマットに組み込まれています。」
仕組み:Icebergテーブルの各行には、_row_id
と_last_updated_sequence_number
の2つの追加フィールドが含まれます。Icebergコミュニティは、すべての行がこれらのフィールドに明示的に値を保存する必要がないように、これを実装できました。代わりに、スペースを節約するために、列の値が読み取りクエリで実体化され、メタデータレイヤー(Metadata.json → スナップショット → マニフェスト → データファイル → 行)を通じてのみ反映されます。
誰がそれを可能にしたか:
仕様の変更
Russell Spitzer氏
Nileema Shingte
Attila-Péter Tóth
実施
Russell Spitzer氏、コア
Ryan Blue、コア
Amogh Jahagirdar、Spark
テーブル暗号化
機能:テーブル暗号化に関する最新のアップデートにより、Icebergテーブルのクライアント側暗号化が解放され、ユーザーはすべてのデータとメタデータを暗号化できるようになります。単一のキーでテーブル全体を暗号化することも、スナップショットレベルでアクセス制御することもできます。
仕組み:Icebergでクライアント側テーブルの暗号化を可能にするために、ユーザーは個々のテーブルのスナップショットをサードパーティのキーストアに保存されている暗号化キーに関連付けることができます。特定のスナップショット内のデータにアクセスするには、クライアントがそのキーストアと暗号化キーにアクセスし、スナップショットのマニフェストリストを復号化してアクセスする必要があります。マニフェストリストには クライアントがマニフェストファイルを復号化するための 同様のメカニズムがあり 最後に クライアントがデータファイルにアクセスするための データファイル暗号化キーがあります
誰がそれを可能にしたか:
仕様の変更と実装
Gidon Gershinsky
Russell Spitzer氏
Ryan Blue
Variantデータ型
機能:Variant型は、特定のフィールドが断続的に使用される、あまり規則的な半構造化データセットを扱うことを可能にします。たとえば、センサーデータです。すべてのセンサーが位置とタイムスタンプを報告する場合がありますが、一部のセンサーは温度、その他のセンサーは湿度などを報告します。SnowflakeのシニアソフトウェアエンジニアであるAihua Xu氏は、次のように述べています。「Iceberg v3の仕様に[バリアント]を追加することは、現在のデータの現実に対応することでした。ネイティブな(バリアント)サポートにより、Icebergはこの種のデータを効率的に表現して処理し、構造を損なうことなく性能と柔軟性を引き出すことができます。」
仕組み:Variantデータ型を使用すると、変数の型とフィールドをApache Iceberg™テーブルに格納できます。ここで、フィールド名とそれらの型はメタデータと値フィールドに抽出され、バイナリとして保存されます。データの読み込みには デシリアライズが含まれます効率性を高めるため、「シュレッディング」という追加機能により、前述の例の場所やタイムスタンプなどの一貫したフィールドと、それらのタイプを抽出してParquetに格納できます。残りのフィールドは、前述のようにメタデータと値フィールドに格納されます。
誰がそれを可能にしたか:
仕様の変更
Tyler Akidau、原案
Aihua Xu、最終変更
実施
Aihua Xu、コア実装
Ryan Blue、コア
David Cashman, shredding
Gene Peng、エンコーディング、Apache SparkでのVARIANTデータ型に対する影響力のある取り組み
Neil Chao、Apache Arrow
オープンスタンダードは、相互運用可能なレイクハウスエコシステムの基盤であり、全ての人の利益のために、コミュニティの共同の取り組みを通じて構築されるものです。Apache Iceberg v3仕様の批准は、強力な新しいデータ型と強化されたスキーマエボリューションを導入し、より効率的で、多様性に富み、接続されたデータの未来に向けた大きな飛躍を示すものです。Dremioでは、このマイルストーンに貢献し、Apache Icebergの採用を推進できることを誇りに思います。それにより、お客様にとって最も重要なこと、すなわち、あらゆる規模のデータに対する高いパフォーマンスと直接的なアクセスを提供してまいります。
James Rowland-Jones
現状と今後
前述の機能はいずれも、Icebergコミュニティ全体の努力と継続的なコラボレーションなしには実現できなかったでしょう。すべての人がこの最新の仕様に尽力したことは、個人、ベンダー、ユーザーが一体となってテクノロジー全体を前進させる方法を示す、まさにオープンソース精神の証です。
Icebergに貢献し、v3テーブルの仕様を実現してくれた関係者、前述の関係者、そして他のすべての人に心から感謝します。
現状では、個人や企業をまたいだIcebergプロジェクトの多様性は、コミュニティとエコシステムの健康を物語っています。同社の継続的な成功は、v3テーブル仕様の広範な採用と既存および新しいテクノロジーとの広範な統合にかかっています。幸いなことに、Icebergをサポートするテクノロジー、企業、ベンダーは日ごとに増え続けており、
Iceberg v3は、Icebergコミュニティとオープンデータエコシステムにとって、重要なマイルストーンとなります。Microsoftでは、オープンスタンダードと強力なコミュニティとの連携が、データ資産全体にわたる統一された分析とガバナンスを構築するために不可欠であると信じています。私たちは、v3をMicrosoft OneLakeに統合し、v4および将来の仕様に向けてコミュニティとの協力を継続していくことに、大きな期待を寄せています。これらの取り組みは、オープンでAIに対応したデータインフラストラクチャという私たちのビジョンの基礎となるものであり、Microsoft FabricにおけるOneLake設計の中核をなすものです。
Dipti Borkar
最新の追加機能の利用を開始したい方は、現在実装が進んでおり、まもなくリリースされるバージョン1.10でほとんどの変更がリリースされる見込みです。
それまでの間、Apache Iceberg開発メーリングリストは、Icebergプロジェクトに関する最新情報とディスカッションを得るための最適な場所です。コミュニティや業界のユースケースに関する開発情報については、今年のIceberg Summitの分科会セッションの録画をご覧ください。