2025年のTrinoへのコントリビューションまとめ

去年は仕事でTrinoのバージョンアップをやっていたこともありコントリビュートできるネタが色々あったのですが、今年はあまりTrino本体をいじることがなかったのでリリースノートのtypoや細かい改善ばかりでした。

自分で出したPRをマージしてもらったもの以外にフィードバックをして直してもらったものもありました。

  • Predicate pushdown through exclude_columns
    • Trinoにはexclude_columnsというSELECT * EXCEPT的なことをやるためのTable Functionがあるのですが、これを挟むとプッシュダウンが堰き止められてしまうため、Projectionにリライトすることでプッシュダウンが効くようにして欲しいという要望を出したもの。いったん自分でPRも出したのですが、Table Functionのお作法がよくわかっておらずコードは全部書き直してもらいましたw そもそもexclude_columnsあまり使われていないのでは疑惑がありますが…。

それから直接Trinoとは関係ないのですが、Trinoと組み合わせて使っているApache Rangerに問題があってRanger側にフィードバックしたものもありました。最新のTrinoにも反映されていると思います。

来年はまともなコントリビューションをもう少し増やていきたいところです…。

レジリエントマネジメント 荒波に立ち向かい、困難を乗り越えるチームの育て方

ララ・ホーガンさんの「Resilient Management」の日本語版が出版されたとのことで、翻訳者のお一人である浅野さんのご厚意でマイナビさんよりお送りいただきました。

マネジメントに関する書籍はエンジニアリングに特化したものも含めて数多く出ていますが、本書はピープルマネジメント、とりわけチームメンバーとのコミュニケーションに焦点を当てています。チームやメンバーの特性、状況に応じたコミュニケーションを行うためのテクニックや気をつけるべきことが、時には具体的な例を交えて説明されています。また、マネージャー自体が頼ることのできるリソースについてもアドバイスがあり、メンバーとのコミュニケーションに悩むマネージャーに寄り添うような内容になっています。

分量も150ページほどで気軽に読めますし、翻訳書ですが日本語もこなれていて読みやすいです(訳者あとがきによるとコミュニケーションの機敏が伝わるよう翻訳にはかなり気を使ったとのこと)。分量も150ページほどで気軽に読めますし、巻末にはさらにマネジメントについて学ぶための参考書籍のリストもあり、ここから深掘りしていくのも良さそうです。数あるマネジメント本の中でも入門書として最適なのではないかと感じました。

Apache Iceberg活用入門 オープンテーブルフォーマットによるデータレイク&データレイクハウス

なんと技評さんの実践Apache Icebergに続いて今年2冊目の日本語Iceberg本で、こちらはオライリーApache Iceberg: The Definitive Guideの翻訳とのことです。翻訳者の蛯原さんのご厚意でインプレスさんから見本誌をお送りいただいたので実践Apache Icebergとも比べながら読んでみました。

どちらもほぼ同じコンセプトのIceberg入門書ですので内容的に被る部分がかなり多いです。実践Apache Icebergは日本人著者による書き下ろしですが、Apache Iceberg活用入門も翻訳書ながらとても読みやすく、また原著には含まれていないTrinoやHiveでの利用方法、PythonやRustクライアントの利用方法、LINEヤフーさんでの利用事例などが収録されています。また、Apache Iceberg活用入門は原著の著者がDremioの方ということもありDremioが大きく取り上げられているという点も特徴として挙げられます。

結論としてはどちらもとても良いIceberg入門書なのでどちらを読んでも間違いないと思います。読者の立場からすると1冊で決定版となる本が出ていたら良かったなと思ってしまいますがw ほぼ同時期に日本語で2冊もIcebergの本が出るというのはそれだけ注目度が高い証でもあると思うのでこれをきっかけに今後日本でもIcebergの活用が進むとよいですね。

Trino 478リリースノート日本語訳

前回は4ヶ月近く間が空きましたが今回は約1ヶ月でのリリースとなりました。今回は細かいバグやパフォーマンス改善が中心のようなので比較的安全にアップグレードできそうです。分量的にもこのくらいだとリリースノートのキャッチアップも楽ですね。

原文はこちら: https://trino.io/docs/current/release/release-478.html

General

  • UNNESTで使用されているカラムもリネージ情報に含むように (#16946)
  • retry-policy.allowedオプションで利用可能なリトライポリシーを制限可能に (#26628)
  • プラグインを複数のディレクトリからロード可能に (#26855)
  • 正常にロードできなかったカタログもDROP可能に (#26918)
  • varcharおよびvarbinary型を使ったORDER BYを含むクエリのパフォーマンスを改善 (#26725)
  • NOT MATCHEDケースを持つMERGEステートメントのパフォーマンスを改善 (#26759)
  • JOINでディスクへのスピルが発生する場合のパフォーマンスを改善 (#26076)
  • row型を使ったクエリで誤った結果が返る可能性がある問題を修正 (#26806)
  • ロードに失敗したカタログもmetadata.catalogsテーブルに含まれるように (#26918)
  • EXPLAIN ANALYZE時に実際にクエリが実行される際のプランと異なるプランが使われる問題を修正 (#26938)
  • MATCH_RECOGNIZEFIRSTを使った場合に誤った結果が返る問題を修正 (#26981)

Security

Docker image

  • JDK 25.0.0 (build 36)にアップグレード (#26693)

Delta Lake connector

  • map(..., json)カラムを読み取る際、値がNULLだった場合にエラーが発生する問題を修正 (#26700)
  • gcs.use-access-tokenコンフィグレーションプロパティを非推奨に。代わりにgcs.auth-typeを使用すること (#26681)

Google Sheets connector

  • gsheets.delegated-user-emailコンフィグレーションプロパティを使用している場合に発生する可能性のあるエラーを修正 (#26501)

Hive connector

  • 暗号化されたParquetファイルの読み取りをサポート (#24517, #9383)
  • gcs.use-access-tokenコンフィグレーションプロパティを非推奨に。代わりにgcs.auth-typeを使用すること (#26681)
  • $pathカラムに複雑な条件を使用するクエリのパフォーマンスを改善 (#27000)
  • ORCファイルの書き込みを修正し、Trinoで書き込んだ1582-10-15以前の日付をApache Hiveで正しく読み取れるようにした (#26507)
  • metastore impersonationが有効な場合にflush_metadata_cacheプロシージャが失敗する問題を修正 (#27059)

Hudi connector

  • gcs.use-access-tokenコンフィグレーションプロパティを非推奨に。代わりにgcs.auth-typeを使用すること (#26681)

Iceberg connector

  • Sorted table書き込み時かつiceberg.sorted-writing.local-staging-pathがセットされている場合のパフォーマンスを改善 (#24376)
  • Bucket transform partitioningが有効なテーブルに対するALTER TABLE EXECUTE OPTIMIZEのパフォーマンスを改善 (#27104)
  • remove_orphan_filesコマンドが実行メトリクス(処理結果)を返すように (#26661)
  • gcs.use-access-tokenコンフィグレーションプロパティを非推奨に。代わりにgcs.auth-typeを使用すること (#26681)
  • REPLACE TABLE時にカラムの統計情報(NDV)が収集されないことがある問題を修正 (#26983)
  • add_files_from_tableプロシージャ実行時にカラムカウントのミスマッチで発生するエラーを修正 (#26774)
  • optimize_manifestsをスナップショットのないテーブルに対して実行した場合に発生するエラーを修正 (#26970)
  • HiveからマイグレートしたAvroファイルを読み取る際に誤った結果が返る問題を修正 (#26863)
  • REST、、Glue、Nessieカタログでサポートされていないプロパティを持つスキーマに対してSHOW CREATE SCHEMAを実行すると発生するエラーを修正 (#24744)
  • EXPLAINEXPLAIN ANALYZEOPTIMIZEコマンド実行時のエラーを修正

Kafka connector

  • タイムスタンプオフセットでパーテーションをフィルタする際に発生するエラーを修正 (#26787)

SPI

  • Connector.shutdown()のデフォルト実装を削除 (#26718)
  • 非推奨のConnectorSplit.getSplitInfoメソッドを削除 (#27063)
  • io.trino.spi.type.Type#appendToを非推奨に (#26922)

プレミアリーグ全史 3

巻を追うごとにどんどん厚くなっていくベン・メイブリーさんのプレミアリーグ全史、ついに完結となる第3巻が発売されました。

買ってきた。厚い!

Naoki Takezoe (@takezoe.bsky.social) 2025-10-18T05:15:36.499Z
bsky.app

もうここまで来ると近代プレミアリーグ振り返りという感じで、ミラクルレスターやシティによるプレミアリーグの支配、クロップによるリバプールの復活とビッグ6の時代と最近のプレミアファンにも記憶に新しいところかと思います。また、これまで同様英国の社会や政治との関連や現在進行形でプレミアリーグが抱える問題点についても触れられており、これまでの巻以上に考えさせられる内容でした。

もちろんプレミアリーグはこれからも続いていきますし、ベンさんのあとがきによるとこれでも割愛した内容がたくさんあるとのことなので、是非第4巻にも期待したいところですw

Amateras Modeler 2.3.0をリリースしました

EclipseUMLやER図を作成するためのプラグインAmateras Molderに久しぶりに新機能を追加しました。

github.com

ER図へのユーザさんからの要望でTIME/TIMESTAMP WITH TIME ZONE型をサポートしたのとER図生成ウィザードやテーブル編集ダイアログの細かい挙動の修正など。あわせて主なデータベースのDialectを更新したり、メンテが辛いDialectを非推奨にしたりなど。

以下の更新サイトからインストールできます。

http://takezoe.github.io/amateras-update-site

Java 16以降だとダイアグラムの保存に使っているXstreamというライブラリの都合でeclipse.iniに以下のオプションを追加する必要がある点にご注意ください。

--add-opens=java.desktop/java.beans=ALL-UNNAMED

GitHubだと更新サイトをGitで管理しつつGitHub Pagesで公開もできるので楽でいいですね。以前TychoでCIを自動化したのも役に立っています。

takezoe.hatenablog.com

ただ、手を入れるのはいいんですが、Eclipseのキーボードショートカットなどを完全にわすれているので作業効率がかなり悪いですね…。

ER図作成用のEclipseプラグインだとCrayやER Masterなども有名でしたがどちらも現在はメンテされなくなってしまっているようです(ER Masterは有志によるフォーク版がメンテされているらしいです)。最近は世の中的にもEclipseを使う機会が減ってきていると思うので仕方ないところもあるかもしれないですが、ちょっと寂しい気もしますね。

Trino 477リリースノート日本語訳

以前は1〜2週間おきにリリースされていたTrinoですが、今回はなんと約4ヶ月ぶりのリリースでした。間が空いただけあって修正内容も多いのですが、コネクタの修正はLakehouseコネクタが追加された以外はIcebergやDelta Lakeコネクタ中心でそれほどでもなさそう。書き込みデータ量を制限できるようになっているのはユースケースによっては便利そうです。

原文はこちら: https://trino.io/docs/current/release/release-477.html

General

  • Hive、Iceberg、Delta Lake、Hudiテーブルを統一的に扱うことができるLakehouseコネクタを追加 (#25347)
  • ALTER MATERIALIZED VIEW ... SET AUTHORIZATIONをサポート (#25910)
  • テーブル作成時およびカラム追加時にカラムのデフォルト値の指定をサポート (#25679)
  • ALTER VIEW ... REFRESHをサポート (#25906)
  • テーブルブランチの管理とクエリをサポート (#25751, #26300, #26136)
  • スパースベクター用のcosine_distance()関数を追加 (#24027)
  • 破壊的変更: 10進数値の算術演算における精度とスケールの推論を改善。deprecated.legacy-arithmetic-decimal-operatorsコンフィグレーションプロパティをtrueに設定することで従来の動作に戻すことも可能 (#26422)
  • 破壊的変更: HTTP server event listenerプラグインをサーババイナリ配布およびDockerコンテナから削除 (#25967)
  • 破壊的変更: クラスタ内のすべてのノードに同じカタログがデプロイされていることが必須になった (#26063)
  • クエリによって書き込まれるデータ量の制限を設定できるquery.max-write-physical-sizeコンフィグレーションプロパティとquery_max_write_physical_sizeセッションプロパティを追加 (#25955)
  • 認可に関する情報を提供するsystem.metadata.tables_authorization, system.metadata.schemas_authorization, system.metadata.functions_authorizationテーブルを追加 (#25907)
  • リソースグループに物理データスキャンのトラッキングを追加 (#25003)
  • system.runtime.tasksテーブルにinternal_network_input_bytesカラムを追加 (#26524)
  • to_geojson_geometry関数でGeometry型をサポート (#26451)
  • system.runtime.tasksテーブルからraw_input_bytesraw_input_rowsカラムを削除 (#26524)
  • 読み込みに失敗したカタログをsystem.metadata.catalogsに含めないように変更 (#26493)
  • discovery.typeコンフィグレーションプロパティを追加。announcednsairlift-discoveryを指定可能で、KubernetesのようなすべてのworkerにDNS名を提供する環境ではdnsを指定することでノード検出の設定を簡素化できる (#26119)
  • row_number, rank, dense_rankORDER BY ... LIMITを含む特定のクエリのメモリ使用量を改善 (#25946)
  • GROUP BYを含むクエリのメモリ使用量を改善 (#25879)
  • DISTINCTまたはORDER BY句を持つ集約を含むクエリに必要なメモリを削減 (#26276)
  • ノード数の少ないクラスタでのシンプルなクエリのパフォーマンスを改善 (#26525)
  • 低速なデータソースをクエリし、クエリが早期にターミネートまたはキャンセルされた場合のクラスタの安定性を改善 (#26602)
  • スピル時の結合と集約の信頼性を改善 (#25892, #25976)
  • GROUP BYを含むクエリのスピルファイルのクリーンアップを確実に実行されるよう修正 (#26141)
  • 結合を含むクエリのout-of-memoryエラーを削減 (#26142)
  • スピルが有効な場合のGROUP BYを含むクエリの不正な結果を修正 (#25892)
  • GROUP BY AUTOで他の式に集約が存在する場合のエラーを修正 (#25987)
  • ST_Contains, ST_Intersects, ST_Distance関数を使用した結合を含むクエリの不正な結果を修正 (#26021)
  • クライアントスプーリングプロトコルが有効な場合のout-of-memoryエラーを修正 (#25999)
  • ORDER BY句を含む集約を持つGROUP BYクエリを実行時のJVM out-of-memoryエラーによるワーカーのクラッシュを修正 (#26276)
  • SET SESSION AUTHORIZATIONでユーザを指定した際の認可に元のユーザのグループが使用される問題を修正 (#26344)
  • geometry_to_bing_tilesがジオメトリ領域全体をカバーせず、タイルが完全にカバーされない問題を修正 (#26459)
  • ARRAY型内にネストされたROW値で集約する際のメモリ使用量が過剰にカウントされる問題を修正 (#26405)
  • EXPLAIN ANALYZEでの物理入力メトリクスのアカウンティングを改善 (#26637)

Web UI

CLI

  • クエリ履歴でAlt+↑またはAlt+↓によるキーボードナビゲーションをサポート (#26138)

Delta Lake connector

  • 認証情報なしでのGCSの使用をサポート (#25810)
  • s3.socket-read-timeoutコンフィグレーションプロパティをs3.socket-timeoutにリネーム (#26263)
  • EXPLAIN ANALYZE VERBOSE出力にファイルシステムキャッシュから読み取られたデータのメトリクスを追加 (#26342)
  • Alluxio使用時のリソース使用率を改善 (#26121)
  • ネイティブファイルシステムリソースを可能な限り早期に解放することでリソース使用率を改善 (#26085)
  • azure.multipart-write-enabledコンフィグレーションオプションがtrueに設定されている場合のAzureでの書き込み集約クエリのスループットを改善 (#26225)
  • S3スロットリングによるクエリの失敗を低減 (#26407)
  • 異常に大きなParquetフッタをデコードする際のout-of-memoryエラーによるworkerのクラッシュを回避 (#25973)
  • 古いバージョンのPyArrowで生成されたParquetファイルを読み取る際の不正な結果を修正 (#26058)
  • Deletion vectorが有効な場合の不正なチェックポイントファイルの書き込みを修正 (#26145)
  • variantカラムにnull値を含むテーブルを読み取る際のエラーを修正 (#26016, #26184)
  • Parquetファイルからdecimal数値を読み取る際、宣言された精度がParquetメタデータで記述された精度と異なる場合の不正な結果を修正 (#26203)
  • テーブルがDeletion vectorを使用し、そのパーティションパスに特殊文字が含まれている場合の不正な結果を修正 (#26299)

Exasol connector

  • Exasolのhashtype型をサポート (#26512)
  • LIMITを含むクエリのパフォーマンスを改善 (#26592)

Hive connector

  • 認証情報なしでのGCSの使用をサポート (#25810)
  • Esri JSON形式を使用したテーブルの読み取りをサポート (#25241)
  • テキストファイル形式でextended_boolean_literalをサポート (#21156)
  • EXPLAIN ANALYZE VERBOSEの出力にファイルシステムキャッシュから読み取られたデータのメトリクスを追加 (#26342)
  • Twitter Elephant Bird Protobufデシリアライゼーションをサポート (#26305)
  • s3.socket-read-timeoutコンフィグレーションプロパティをs3.socket-timeoutにリネーム (#26263)
  • azure.multipart-write-enabledコンフィグレーションオプションがtrueの場合のAzureでの書き込み集約クエリのスループットを改善 (#26225)
  • S3スロットリングによるクエリの失敗を低減 (#26407)
  • 異常に大きなParquetフッタをデコードする際のout-of-memoryエラーによるworkerのクラッシュを回避 (#25973)
  • Alluxio使用時のリソース使用率を改善 (#26121)
  • 古いバージョンのPyArrowで生成されたParquetファイルを読み取る際の不正な結果を修正 (#26058)
  • 日付パーティションプロジェクションでpartition_projection_formatカラムプロパティで指定したフォーマットが使われない問題を修正 (#25642)
  • Parquetファイルからdecimal数値を読み取る際、宣言された精度がParquetメタデータで記述された精度と異なる場合の不正な結果を修正 (#26203)
  • テキストファイルを含むテーブルのphysical input read timeのメトリクスを修正 (#26612)
  • クォートとエスケープが無効になっているHive OpenCSVテーブルの読み取りをサポート (#26619)

HTTP Event Listener

  • http-event-listener.connect-http-methodコンフィグレーションプロパティを通じて使用するHTTPメソッドの設定をサポート (#26181)

Hudi connector

  • parquet.max-read-block-row-countコンフィグレーションプロパティまたはparquet_max_read_block_row_countセッションプロパティを使用してParquetファイル読み取りのバッチサイズを設定可能に (#25981)
  • 認証情報なしでのGCSの使用をサポート (#25810)
  • s3.socket-read-timeoutコンフィグレーションプロパティをs3.socket-timeoutにリネーム (#26263)
  • Alluxio使用時のリソース使用率を改善 (#26121)
  • azure.multipart-write-enabledコンフィグレーションオプションがtrueの場合のAzureでの書き込み集約クエリのスループットを改善 (#26225)
  • S3スロットリングによるクエリの失敗を低減 (#26407)
  • 異常に大きなParquetフッタをデコードする際のout-of-memoryエラーによるworkerのクラッシュを回避 (#25973)
  • 古いバージョンのPyArrowで生成されたParquetファイルを読み取る際の不正な結果を修正 (#26058)
  • Parquetファイルからdecimal数値を読み取る際、宣言された精度がParquetメタデータで記述された精度と異なる場合の不正な結果を修正 (#26203)

Iceberg connector

  • SIGV4を独立した認証スキームとしてサポート。iceberg.rest-catalog.securityコンフィグレーションプロパティをSIGV4に設定することで有効化可能。iceberg.rest-catalog.sigv4-enabledコンフィグレーションプロパティは廃止 (#26218)
  • 認証情報なしでのGCSの使用をサポート (#25810)
  • compression_codecテーブルプロパティを通じてテーブル読み取り用の圧縮コーデックを設定可能に。compression_codecセッションプロパティは廃止 (#25755)
  • EXPLAIN ANALYZE VERBOSEの出力にファイルシステムキャッシュから読み取られたデータのメトリクスを追加 (#26342)
  • s3.socket-read-timeoutコンフィグレーションプロパティをs3.socket-timeoutにリネーム (#26263)
  • expire_snapshotsプロシージャのパフォーマンスを改善 (#26230)
  • remove_orphan_filesプロシージャのパフォーマンスを改善 (#26326, #26438)
  • $filesメタデータテーブルでのクエリのパフォーマンスを改善 (#25677)
  • タスクリトライが有効な場合のIcebergテーブルへの書き込みのパフォーマンスを改善 (#26620)
  • remove_orphan_filesプロシージャのメモリ使用量を削減 (#25847)
  • azure.multipart-write-enabledコンフィグレーションオプションがtrueの場合のAzureでの書き込み集約クエリのスループットを改善 (#26225)
  • S3スロットリングによるクエリの失敗を低減 (#26407)
  • 異常に大きなParquetフッタをデコードする際のout-of-memoryエラーによるworkerのクラッシュを回避 (#25973)
  • Alluxio使用時のリソース使用率を改善 (#26121)
  • Icebergテーブルへの書き込みで生成されるメタデータ量を削減 (#15439)
  • REFRESH MATERIALIZED VIEWのパフォーマンスリグレッションとクエリが失敗する可能性のある潜在的な問題を修正 (#26051)
  • 古いバージョンのPyArrowで生成されたParquetファイルを読み取る際の不正な結果を修正 (#26058)
  • トップレベパーティションカラムにnull値が含まれている場合のoptimize_manifestsプロシージャのエラーを修正 (#26185)
  • Parquetファイルからdecimal数値を読み取る際、宣言された精度がParquetメタデータで記述された精度と異なる場合の不正な結果を修正 (#26203)
  • パーティション化テーブルでOPTIMIZE_MANIFESTSを実行する際のcoordinatorのout-of-memoryエラーを修正 (#26323)

Kafka Event Listener

  • kafka-event-listener.max-request-sizeコンフィグレーションプロパティでの最大リクエストサイズの設定をサポート (#26129)
  • kafka-event-listener.batch-sizeコンフィグレーションプロパティでのバッチサイズの設定をサポート (#26129)

Memory connector

  • カラムのデフォルト値をサポート (#25679)
  • ALTER VIEW ... REFRESHをサポート (#25906)

MongoDB connector

  • 異なる要素型を持つ配列型を読み取る際のエラーを修正 (#26585)

MySQL Event Listener

  • mysql-event-listener.terminate-on-initialization-failureが無効な場合、Trino起動時のエラーを無視 (#26252)

OpenLineage Event Listener

  • trino_query_contextファセットにユーザーを識別するためのフィールドを追加 (#26074)
  • trino_metadataファセットにquery_idフィールドを追加 (#26074)
  • openlineage-event-listener.job.name-formatコンフィグレーションプロパティでジョブファセット名をカスタマイズ可能に (#25535)

PostgreSQL connector

  • PostGISpublic以外のスキーマにインストールされている場合でもgeometry型をサポート (#25972)

SPI

  • Type.getObjectValueからConnectorSessionを削除 (#25945)
  • 未使用のNodeManager.getEnvironmentメソッドを削除 (#26096)
  • @Experimentalアノテーションを削除 (#26200)
  • 非推奨のConnectorPageSource.getNextPageメソッドを削除 (#26222)
  • EventListener#splitCompletedのサポートを削除 (#26436)
  • ConnectorMetadata.refreshMaterializedViewを削除 (#26455)
  • 未使用のCatalogHandleクラスを削除 (#26520)
  • ConnectorMetadata.beginRefreshMaterializedViewConnectorMetadata.finishRefreshMaterializedViewシグネチャを変更。他のカタログのテーブルハンドルはこれらのメソッドに渡されなくなった (#26454)
  • ConnectorContext.getCurrentNodeを追加し、NodeManager.getCurrentNodeを非推奨に (#26096)
  • ConnectorMetadata.delegateMaterializedViewRefreshToConnectorを非推奨に (#26455)
  • io.trino.spi.eventlistener.QueryStatisticsからtotalBytestotalRowsを削除 (#26524)