🐰
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側ではエラーを投げるようにしています。
- Sparkのプロシージャと基本的には同じように動作しますが、1つ違いを挙げるとスキーマのバリデーションを追加しています。Sparkでは
-
$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等からカラム情報をリストするのが遅いというものがあります。これは毎回ストレージに対するアクセスが発生するのが原因なのですが、それを回避するためにメタストアのプロパティにカラム情報と最新のトランザクションのバージョンを追加しています。
- Delta LakeやIcebergでよく問題になるのが
- 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_distance、dot_product、cosine_distance関数をエンジンに追加 #22397 -
euclidean_distance、-dot_product、cosine_distance関数をpgvectorへプッシュダウン #22618 #23015- pgvectorの表現に合わせて以下のようなルールで生成するSQLを内部的に書き換えながらプッシュダウンをしています。
Trino pgvector euclidean_distance <-> cosine_distance <=> -dot_product <#>
-
- 類似性の検索機能に関するリクエストがお客さまから挙がっていたので、エンジンに関数を追加しつつPostgreSQLコネクタを改善していました。
Discussion