たけぞう瀕死ブログ

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

DuckDBコネクタとLokiコネクタ(Grafanaのストレージらしい)が追加されています。また、Kinesisコネクタが削除されました。

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

General

  • DuckDBコネクタを追加 (#18031)
  • Lokiコネクタを追加 (#23053)
  • SELECTクエリでクエリ毎のセッションプロパティを指定するためのWITH SESSION句をサポート (#24889)
  • Fault-tolerantエクスチェンジストレージのS3互換オブジェクトストレージとの互換性を改善 (#24822)
  • exchange.hdfs.skip-directory-scheme-validationプロパティでFault-tolerantエクスチェンジストレージのHDFS互換ファイルシステムとの互換性改善のためディレクトリスキームバリデーションをスキップ可能に (#24627)
  • JMXメトリクスにblockedQueriesを追加 (#24907)
  • 破壊的変更: optimize_hash_generationセッションプロパティおよびoptimizer.optimize-hash-generationコンフィグレーションオプションを削除 (#24792)
  • SQLユーザ定義関数で大文字の変数名を使用した際に発生するエラーを修正 (#24460)
  • array_histogram関数の入力がnullを含む場合のエラーを修正 (#24765)

JDBC driver

  • 破壊的変更: 必須の最小JavaランタイムバージョンをJava 11にアップグレード (#23639)

CLI

  • 破壊的変更: 必須の最小JavaランタイムバージョンをJava 11にアップグレード (#23639)

Delta Lake connector

Faker connector

Hive connector

Hudi connector

Iceberg connector

JMX connector

  • ダイナミックカタログ使用時にMBeanがコーディネーターとワーカーで一致しない場合にメトリクスが消失してしまう問題を修正 (#24908)

Kinesis connector

MySQL connector

PostgreSQL connector

  • 最小のサポートバージョンをPostgreSQL 12にアップグレード (#24836)

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

年末年始を挟んだこともあってか前回のリリースから1ヶ月以上期間が空いたためかなりの量の修正があります。Trino 468で報告されていたOOMが直っているのが大きいですかね。Delta Lakeコネクタは以前からDeletion vector絡みの問題が目立ちます。

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

General

  • ALTER TABLE ... ADD COLUMNFIRSTAFTERおよびLASTをサポート (#20091)
  • ST_GeomFromKML関数を追加 (#24297)
  • スプーリングクライアントプロトコルの動作をセッションパラメータで設定可能に (#24655, #24757)
  • 高負荷時の安定性を改善(JettyでHTTP/1のヘッダのバッファ管理に変更があったようでTrino 468でOOMが発生してしまうという問題があったよう) (#24572)
  • UPDATEDELETEの条件にサブクエリを使用した場合に発生するプランニング時のエラーを修正 (#24447)
  • 負の 16 進数、8 進数、および 2 進数の数値リテラルの解析を修正 (#24601)
  • S3ExpressでFault-tolerant execution利用の障害となる再帰的な削除処理で発生するエラーを修正 (#24763)

Web UI

  • クライアントタグでのクエリのフィルタリングをサポート (#24494)

JDBC driver

  • io.trino.jdbc.QueryStatsplanningTimeMillisanalysisTimeMillisfinishingTimeMillisphysicalInputBytesphysicalWrittenBytesinternalNetworkInputBytesphysicalInputTimeMillisを追加 (#24571, #24604)
  • Connection.isValid(int)をコネクションとクレデンシャルをバリデーションするよう修正、validateConnectionコネクションプロパティを追加 (#24127, #22684)
  • 独自のCertificateチェーンを使用しているクラスタでスプーリングプロトコル利用時に発生するエラーを修正 (#24595)
  • SetDigestBingTileColor型のデシリアライゼーションエラーを修正 (#24612)

CLI

  • 独自のCertificateチェーンを使用しているクラスタでスプーリングプロトコル利用時に発生するエラーを修正 (#24595)
  • SetDigestBingTileColor型のデシリアライゼーションエラーを修正 (#24612)

BigQuery connector

  • BigQueryとのgRPC通信用のチャネルプールの設定が可能に (#24638)

ClickHouse connector

  • 破壊的変更: 対応バージョンの最低要件をClickHouse 24.3およびAltinity 22.3にバージョンアップ (#24515)
  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

Delta Lake connector

  • S3セキュリティマッピングでSSE-Cのサポートを追加 (#24566)
  • Google Storageファイルシステムのエンドポイントをgcs.endpointプロパティで設定可能に (#24626)
  • Delta Lakeテーブルに新規に書き込まれたデータについてはデフォルトでSNAPPYの代わりにZSTDで圧縮することで読み込み時のパフォーマンスを改善 (#17426)
  • 巨大なトランザクションログJSONファイルを持つテーブルに対するクエリのパフォーマンスを改善 (#24491)
  • 多数の行グループを持つParquetファイルの読み込みパフォーマンスを改善 (#24618)
  • 並列実行を有効にすることでOPTIMIZEステートメントのパフォーマンスを改善 (#16985)
  • S3から大きなファイルを読み込む際のパフォーマンスを改善 (#24521)
  • 複数のカタログでファイルシステムキャッシュ利用時のJMXメトリクスのカタログ情報を修正 (#24510)
  • Alluxioファイルシステム利用時のテーブル読み込みエラーを修正 (#23815)
  • Deletion vectorが有効になっているテーブルに対する更新が誤った結果になる問題を修正 (#24648)
  • Deletion vectorが有効になっているテーブルからの読み込みが誤った結果を返す問題を修正 (#22972)

Elasticsearch connector

  • Elasticsearchドキュメントのネステッドフィールドを参照するクエリのパフォーマンスを改善 (#23069)

Faker connector

  • ビューをサポート (#24242)
  • シーケンスの生成をサポート (#24590)
  • 破壊的変更: WHERE句での制約の指定をminmaxoptionsカラムプロパティで行うよう変更 (#24147)

Hive connector

  • S3セキュリティマッピングでSSE-Cのサポートを追加 (#24566)
  • Google Storageファイルシステムのエンドポイントをgcs.endpointプロパティで設定可能に (#24626)
  • AWS SDKクライアントのリトライ数のメトリクスをクライアントレベルのリトライとHTTPクライアントリトライに分離 (#24606)
  • 多数の行グループを持つParquetファイルの読み込みパフォーマンスを改善 (#24618)
  • S3から大きなファイルを読み込む際のパフォーマンスを改善 (#24521)
  • 複数のカタログでファイルシステムキャッシュ利用時のJMXメトリクスのカタログ情報を修正 (#24510)
  • Alluxioファイルシステム利用時のテーブル読み込みエラーを修正 (#23815)
  • JSONフォーマットのテーブルにNaN、Infinity、-Infinityを書き込むと無効なデータが書き込まれてしまう問題を修正(書き込み時にエラーを投げるようになったよう) (#24558)

Hudi connector

  • S3セキュリティマッピングでSSE-Cのサポートを追加 (#24566)
  • Google Storageファイルシステムのエンドポイントをgcs.endpointプロパティで設定可能に (#24626)
  • 多数の行グループを持つParquetファイルの読み込みパフォーマンスを改善 (#24618)
  • S3から大きなファイルを読み込む際のパフォーマンスを改善 (#24521)

Iceberg connector

  • ALTER TABLE ... ADD COLUMNFIRSTAFTERおよびLASTをサポート (#20091)
  • S3セキュリティマッピングでSSE-Cのサポートを追加 (#24566)
  • Google Storageファイルシステムのエンドポイントをgcs.endpointプロパティで設定可能に (#24626)
  • $entriesメタデータテーブルを追加 (#24172)
  • $all_entriesメタデータテーブルを追加 (#24543)
  • parquet_bloom_filter_columnsテーブルプロパティを設定可能に (#24573)
  • orc_bloom_filter_columnsテーブルプロパティを設定可能に (#24584)
  • rollback_to_snapshotテーブルプロシージャを追加し、既存のsystem.rollback_to_snapshotプロシージャを非推奨に (#24580)
  • カラム一覧取得時のパフォーマンスを改善 (#23909)
  • 多数の行グループを持つParquetファイルの読み込みパフォーマンスを改善 (#24618)
  • S3から大きなファイルを読み込む際のパフォーマンスを改善 (#24521)
  • write.metadata.delete-after-commit.enabledtrueに設定されている場合に最も古いバージョンのメタデータファイルを削除するように (#19582)
  • 複数のカタログでファイルシステムキャッシュ利用時のJMXメトリクスのカタログ情報を修正 (#24510)
  • Alluxioファイルシステム利用時のテーブル読み込みエラーを修正 (#23815)
  • table_changesテーブルファンクションから不完全な結果が返される問題を修正 (#24709)
  • 複数のネストしたパーテーションカラムが存在するテーブルにアクセスするクエリがエラーになる問題を修正 (#24629)

Ignite connector

Kudu connector

  • パーテーション化されていないテーブルのサポートを追加 (#24661)

MariaDB connector

  • ALTER TABLE ... ADD COLUMNFIRSTAFTERおよびLASTをサポート (#24735)
  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

MySQL connector

  • ALTER TABLE ... ADD COLUMNFIRSTAFTERおよびLASTをサポート (#24735)
  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

Oracle connector

  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

Phoenix connector

  • スキャンページのタイムアウトphoenix.server-scan-page-timeoutコンフィグレーションプロパティで設定可能に (#24689)
  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

PostgreSQL connector

  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

Redshift connector

  • Redshiftテーブルからの読み込みパフォーマンスを改善 (#24117)
  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

SingleStore connector

  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

Snowflake connector

  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

SQL Server connector

  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

Vertica connector

  • カラムの値をNULLに更新しようとするとエラーになる問題を修正 (#24204)

SPI

  • コネクタレベルのイベントリスナのサポートおよびConnector.getEventListeners()メソッドを削除 (#24609)

マネジメントは嫌いですけど

書かれている通りマネジメントといっても対象も状況も千差万別なのであくまで一例と理解しつつ、著者の方の貴重な体験談として読ませていただきました。

実体験に基づいて書かれているだけあり、現実と向き合うような生々しさがある一方、実際のところはわかりませんが、かなり淡々と書かれていることもあり、ここまで冷静に割り切れるのは凄いなぁと思いました。仮説検証を繰り返していくのはエンジニアリングと共通する部分があるというのはそうかもしれないですが、人や組織をシステムと同じと考えられるかどうかですね。まあそのくらいのメンタリティがないとマネジメントなんてやってられないということかも知れないですが、マネージャーというのは大変な仕事だなぁということを再認識しました。

冒頭に「技術職出身のマネージャーが増えるといいと願っている」と書かれているのですが、自分はこの本を読んでやっぱりマネージャーやりたくないなぁとの思いを新たにしましたw

2024年の振り返り

仕事関係

引き続きPresto/Trinoメインでやっていましたが、今年は自分で何かやるというより他のプロジェクトを手伝ったり後方支援的なことをひたすらやり続けていました。激務というわけではなかったですが、諸々気を使うことが多かったり、あれやこれやと落ち着かなかったです。ただ、チームとしては自分がずっと手伝っていたPrestoからTrinoへの移行が大きなトラブルなく(ほぼ)完了できましたし、Snowflake連携など大きな新機能も出たのはよかったです。

api-docs.treasuredata.com

www.treasuredata.com

また、今年も海外の同僚が日本に来るのにあわせて何度かオフィスに出社しました。初めて顔を合わせるチームメンバーもいたり直接会話できたのは良かったのですが、一度目の出社後に体調を崩してしまい(検査してないのですが恐らくCOVIDと思われる)その後しばらく色々と大変でした。自分も油断していた感が否めないですが、防御にも限界があるので困りますね…。

OSS関係

今年もTrinoに細かいコントリビュートをしていました。

takezoe.hatenablog.com

Trinoは結構破壊的変更やデグレも多いので仕事ではそんなに頻繁にバージョンアップできず少し古いバージョンを使い続けることになりがちなのですが、毎回アップグレード時に溜まりに溜まった変更点を把握するのも大変だし、クリティカルなバグ修正や改善のバックポートなども考えると最新の変更はちゃんと把握していないといかんということでリリースノートの翻訳を始めてみました。

takezoe.hatenablog.com

単に翻訳するだけでなく、リリースノートからだと具体的な変更内容がわからないものについてはPRの内容を確認して補足したりしています。Trinoはリリース頻度が高くなかなか大変ですが、可能な限り続けていきたいと思います。

それから数年ぶりにAmaterasのEclipseプラグインをメンテしたり、ついでにGitHub ActionsとTychoでCIを導入したりなどもしていました。

takezoe.hatenablog.com

GitBucketは今年も2回だけのリリースで内容も細かい改善が中心でした。年末休みに色々手を入れられたのはよかったです。

takezoe.hatenablog.com

takezoe.hatenablog.com

趣味関係

仕事やプログラミング以外に趣味を作るというのが長年の課題の1つで本を読んだりゲームをしたりと色々試してみてはみたものの挫折し続けていたのですが、今年は一年通してNintendo Switchで色んなゲームを遊んでいました。ユニコーンオーバーロードが楽しくて他のゲームも遊んでみようとなったのが大きいです。

takezoe.hatenablog.com

仕事が時間的というよりメンタル的に結構しんどい状況だったのでよい気分転換にもなっていました。ただ、派手派手な3Dアクションゲームは目もしょぼしょぼするし肩も凝るしで余計疲れますね…。コマンド式のRPGSLGをマターリ遊ぶのが良さそうということがわかってきました。まだ気になるゲームもありますし、来年はSwitchの後継機も発売されるようなので楽しみです。

一方で今年は本はあまり読まなかったかも。今の家に引っ越してから本棚の容量が半分になってしまい、本を捨てないと新しい本が収納できないという状態になってしまったので最近は紙で残しておきたいと思うもの以外はできるだけ電子書籍で買うようにしているのですが、やはり物理的にスペースが限られていると本を買う意欲も削がれてしまうし、そもそも書店にもあまり足が向かなくなってしまいますね。

あと永野護展良かったです。図録と一緒に購入したASH DECORATIONはまだ開封すらしていませんがw(そういえばIMSの1/144レッドミラージュも積んだままなのであった…)

すごい。

Naoki Takezoe (@takezoe.bsky.social) 2024-03-15T05:35:10.414Z
bsky.app

アーセナル

23-24シーズンも最終節まで粘ったものの結局優勝できず、これでダメなら最早プレミアリーグは無理ゲーなのでは感も若干ありますが、2シーズンと続けてプレミアリーグの優勝争いを演じたことで完全に強豪として復活した感はあります。日本でもサッカー雑誌でアーセナル特集が組まれることが増えましたし、そのトーンも数年前までとはまったく変わりネタ枠ではなく強豪の扱いで隔世の感があります。アルテタ本の邦訳も出ました。

takezoe.hatenablog.com

今シーズンはカラフィオーリ、メリーノとさらに選手層を厚くして三度目の正直に挑んでいますが、序盤戦は特にウーデゴーの負傷離脱が響き取りこぼしが多く、シティの調子も悪くリバプールの独走を許しています。ヌワネリやスケリーの台頭など明るい話題もあるものの、主力の勤続疲労(ウーデゴーが戻ってきたと思ったらサカまで長期離脱…)やエドゥの退団など1つのサイクルの終焉を感じなくもないです。

冨安早く戻ってきてくれ!

Naoki Takezoe (@takezoe.bsky.social) 2024-11-30T17:15:34.270Z
bsky.app

まあまだ長いシーズンどうなるかわからないのでシーズン後半も期待しすぎず応援しようと思います。

その他

最近は肩や腰だけでなく膝まで痛くなってきたり、視力も衰えてきたり(老眼?)と体のあらゆる機能の低下をひしひしと実感しており、ソフトウェアエンジニアをいつまで続けられるのかなぁなんてことも考えるようになってきました。まだ社会人人生がこれまでの倍くらいあると考えるとちょっと絶望的な気持ちになったりもしますが、今後のキャリアについても方向性を考えていかないといけないなぁと思うなどした一年でした。

ともあれ毎年言ってる気がしますが運動不足はどうにか解消したいところです。どうしても仕事の波で習慣化するのが難しいのですが、今年こそ運動を継続するのを第一の目標にしようと思います。

GitBucket 4.42.0をリリースしました

Scalaで実装されたオープンソースのGitサーバ、GitBucket 4.42.0をリリースしました。

https://github.com/takezoe/gitbucket/releases/tag/4.42.0

今回は内部の改善が中心です。

ブランチ名の最大長を100文字から255文字に拡張

Git自体は長いブランチ名が使えるのですが、GitBucket上でプルリクエストを作成したり、ブランチプロテクションの設定を行う際にブランチ名を格納するカラムサイズの都合で100文字までという制限がありました。このバージョンでは255文字までのブランチが使えるようになっています。また、プルリクエスト作成画面にちゃんとエラーメッセージを表示するようにしました。

GitHub非互換だったWeb APIを修正

list-repository-tags APIとWebフックのペイロード等に含まれているssh_urlがGitHubと非互換だったので修正しました。

ユーザ定義CSSプラグインによる上書きを防止

いくつかのプラグインJavaScriptを使用して動的にCSSを追加するようなのですが、このCSSによってGitBucket側で定義されたユーザ定義CSSが上書きされてしまうという問題があったため、ユーザ定義CSSプラグインJavaScript実行後に適用するように修正しました。

コミットログ一覧取得のパフォーマンスを改善

GitBucketの内部実装を修正してコミットログ一覧取得のパフォーマンスを改善しました。ブランチをpushする際などもGitBucketは新規コミットを識別するために内部的に既存のコミットの一覧を取得するのですが、こういった処理のパフォーマンスも改善しているはずです。

Java 17が必須に

これまではJava 11以降で動作していましたが、新しいバージョンのJettyをサポートするためJava 17以降が必須になりました。

今回のバージョンではこの他にもバグ修正、細かい改善、内部ライブラリの更新などを行っています。詳細についてはIssueの一覧をご覧ください。

[作って学ぶ]ブラウザのしくみ──HTTP、HTML、CSS、JavaScriptの裏側

Rustで実際にブラウザを実装してみるというお題からして面白そうな本で発売を楽しみにしていたのですが、独自OS上のアプリケーションとして実装するというもので、ライブラリもRustの標準ライブラリや既存のライブラリは使わずに独自OSのライブラリを使用します。コードはRustですが、平易なコードですし、要所で解説も入るのでRustを知らなくても雰囲気で読めると思います。

内容の方はURLパーサ、HTMLパーサ、CSSパーサにJavaScriptパーサと、ひたすらパーサを実装し続ける感じですが、その中で各種仕様や挙動の解説などコンパクトにまとめられています。ただ、独自OSのライブラリを使うため(特にGUIは)冗長というか、潰しの効かないところがあります。この本のコンセプト的に仕方ないとは思うのですが、手元の環境でビルドして動かせるものだとより試しやすくて良かったのではないかと思いました。

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

まだ実験的サポートとのことですが、Pythonユーザ定義関数は(ユーザとしては)夢が膨らみますね。また、ノードの状態としてDRAININGDRAINが導入されたことで動的にクラスタをスケールアウト・スケールインする際、今まではスケールインでにGraceful Shutdown中に再度スケールアウトしようとすると新たにノードを追加する必要があり無駄が大きかったのですが、この無駄を減らすことができそうです。

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

General

  • Pythonユーザ定義関数の実験的サポート(ChicoryというJVMで動作するWebAssemblyランタイムで動作するらしい) (#24378)
  • Preview Web UIクラスターのオーバービューを追加 (#23600)
  • ノードの状態としてDRAININGDRAINEDを追加(DRAININGはGraceful Shutdownとほぼ同じだがすべてのタスクが完了するとシャットダウンせずDRAINEDに移行し、DRAINED状態のノードにterminateを送信することでシャットダウンできる。DRAININGおよびDRAINED状態のノードはACTIVE状態に復帰できる) (#24444)

BigQuery connector

  • 外部BigLakeテーブルを読み込む際のパフォーマンスを改善 (#21016)

Delta Lake connector

  • 破壊的変更: DeltaテーブルメタデータキャッシュによるコーディネーターのOOMを避けるため、コンフィグレーションプロパティdelta.metadata.cache-size(キャッシュエントリ数制限)の代わりにdelta.metadata.cache-max-retained-size(キャッシュサイズ、デフォルトは64MB)を導入。またdelta.metadata.cache-ttlのデフォルト値を30mに延長 (#24432)

Hive connector

  • Mismatched bucket execution最適化をデフォルトで有効化。これはhive.optimize-mismatched-bucket-countコンフィグレーションプロパティもしくはoptimize_mismatched_bucket_countセッションプロパティで無効化可能 (#23432)
  • 不要な場合はBucketed executionを無効化することでパフォーマンスを改善 (#23432)

Iceberg connector

  • バケット化されたテーブルのジョインやアグリゲーションでBucketed executionをサポート。iceberg.bucket-executionコンフィグレーションプロパティもしくはbucket_execution_enabledセッションプロパティで無効化可能 (#23432)
  • iceberg.materialized-views.storage-schemaコンフィグレーションプロパティを非推奨に (#24398)
  • 破壊的変更: $manifestsシステムテーブルのpartitionsカラムをpartition_summariesにリネーム (#24103)
  • Icebergシステムテーブルをスキャンする際のコーディネーターの過負荷を回避 (#24396)

PostgreSQL connector

  • MERGEステートメント(ただし非トランザクショナル)をサポート(merge.non-transactional-merge.enabledコンフィグレーションプロパティもしくはnon_transactional_merge_enabledセッションプロパティで有効化できるが、出力先テーブルのデータを直接変更するため障害時にデータが壊れる可能性がある点に注意) (#23034)

SPI

  • パーテーショニングのプッシュダウンをサポート。コネクタ側で追加のパーテーショニンングを有効化したり、複数のパーテーショニング戦略から最適なものを選択できるようになった (#23432)