🐰

2024年のTrinoへのコントリビューション

に公開

2024年にTrinoにコントリビュートした記録をまとめてみました。バグの修正などは除外して、ユーザーに関わる機能にしぼっています。

Delta Lakeコネクタはdelta-kernelを利用せずにトランザクションログやチェックポイントのパースを始め、読み書きを自前で実装していることもあり、ここ2年は作業量が多かったのですが、Delta側がTable Featuresを導入してからはreaderとwriterのバージョンがあがらなくなり、落ち着いてきました。プロトコルRFCも以前ほど頻繁には変更されていない印象を受けます。

そういった背景もあり、Delta LakeのVariant型の対応がまだ進行中ですが、先月からは基本的にIcebergのみに完全に注力していくことになりました。現在はIcebergコネクタをWAP(Write-Audit- Publish)パターンを実現できるようにシンタックスの追加を進めています。あとはV3スペックについても対応中です。

Iceberg

  • add_files および add_files_from_table プロシージャの追加 #22751
    • Sparkのプロシージャと基本的には同じように動作しますが、1つ違いを挙げるとスキーマのバリデーションを追加しています。Sparkでは NOT NULLカラムに対しても NULLが入ったファイルを追加できるのですが、Trino側ではエラーを投げるようにしています。
  • $all_manifests メタデータテーブルの追加 #24330
  • $all_entries メタデータテーブルの追加 #24543
  • $entries メタデータテーブルの追加 #24172
  • ALTER COLUMN ... DROP NOT NULL ステートメントのサポート #20448

Delta Lake

  • Deletion Vectorの書き込みサポート #22102
  • タイムトラベルクエリのサポート #21052
  • メタデータをメタストアにバックグラウンドで保存 #21463
    • Delta LakeやIcebergでよく問題になるのが information_schema等からカラム情報をリストするのが遅いというものがあります。これは毎回ストレージに対するアクセスが発生するのが原因なのですが、それを回避するためにメタストアのプロパティにカラム情報と最新のトランザクションのバージョンを追加しています。
  • Type Widening が有効化されているテーブルの読み込みサポート #22142
  • Iceberg UniFormが有効になったテーブルの読み込みのサポート #22311
  • $transactions メタデータテーブルの追加 #24292
  • V2チェックポイントが有効化されているテーブルの読み込みのサポート #19345
  • ALTER COLUMN ... DROP NOT NULL ステートメントのサポート. #20448

その他

  • JDBC系のコネクタに execute プロシージャを追加 #22556
    • queryテーブル関数では主にSELECT系のクエリをサポートしていますが、DDLやDMLをデータソース側で実行できるように新しく executeプロシージャを追加しました。
  • Vector関連の機能追加
    • 類似性の検索機能に関するリクエストがお客さまから挙がっていたので、エンジンに関数を追加しつつPostgreSQLコネクタを改善していました。
      • PostgreSQLコネクタでvector型の読み込みをサポート #22630

      • euclidean_distancedot_productcosine_distance 関数をエンジンに追加 #22397

      • euclidean_distance-dot_productcosine_distance 関数をpgvectorへプッシュダウン #22618 #23015

        • pgvectorの表現に合わせて以下のようなルールで生成するSQLを内部的に書き換えながらプッシュダウンをしています。
        Trino pgvector
        euclidean_distance <->
        cosine_distance <=>
        -dot_product <#>

Discussion