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

今回も約1ヶ月半でのリリースでした。新しい構文のサポートが追加されていたり、多くのバグ修正が入っています。今回は自分がプレビューUIに入れた細かい修正もリリースノートに載せていただきました。プレビューUIをデフォルトにしようという動きがあるのですが、ちょっとまだ実用には厳しそうなのでデフォルトになる前にできるだけ直した方がよいのではと思い、慣れないReactやTypeScriptと格闘しながら直しています。

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

General

  • name => value構文を使用した関数呼び出しでの名前付き引数をサポート (#29530)
  • char値から数値型、booleanvarbinary、時間型へのキャストをサポート (#29374)
  • MATCHをサポート (#29810)
  • UNIQUEををサポート (#29811)
  • BETWEENSYMMETRICおよびASYMMETRICキーワードをサポート (#29981)
  • 単純CASE式のWHEN句で<BETWEENIS NULLなどの述語をサポート (#29446)
  • IS [NOT] TRUEIS [NOT] FALSEIS [NOT] UNKNOWNをサポート (#29998)
  • SQL/JSONパス式でlike_regexをサポート (#29592)
  • ends_with()関数を追加 (#29847)
  • OVERLAY文字列関数をサポート (#30026)
  • row値のフィールド名を返すROW::fields関数を追加 (#29425)
  • varcharおよびchar値に対してメソッドとして文字列関数の呼び出しをサポート(例: value.length()varchar::chr(65)) (#29978)
  • INSERTUPDATEMERGEで、値が列の型に代入可能な場合にネストされた文字型を含むarraymaprow列への値の代入を許可 (#29953)
  • null要素を含むrowおよびarray値の比較とソートを許可(例: ORDER BYDISTINCTmin()max()、範囲比較) (#29891)
  • 破壊的変更: Fault-tolerant executionにおけるAlluxioバックエンドの交換ストレージのサポートを削除 (#29596)
  • 破壊的変更: charvarchar間の暗黙的な型変換を逆転: char値は末尾のスペースを除去してvarcharに変換され、charvarcharの比較はブランクパディングなしのvarcharセマンティクスに従うため、末尾のスペースが有意になる。以前の動作はdeprecated.legacy-varchar-to-char-coercionコンフィグレーションプロパティをtrueに設定することで復元可能 (#29939)
  • JSON_QUERYで返される型がjsonの場合にOMIT QUOTESを禁止 (#29587)
  • 集約を使用する多数のクエリを実行する長時間稼働クラスタで時間とともに蓄積されるメモリ使用量を削減 (#29523#29524)
  • starts_with()フィルタを使用したクエリのパフォーマンスを改善(プッシュダウンが効くようになった) (#29712)
  • NaN値を含むnumber列に対するクエリが誤った結果を返す問題を修正 (#29497)
  • 精度が19未満のdecimal値をdoubleにキャストする際に誤った結果になってしまう問題を修正 (#29831)
  • DISTINCTおよびGROUP BYnumber列の2つのNaN値を異なる値として扱う問題を修正 (#29920)
  • サポートされる精度を超える大きさのnumber値に対するDISTINCTGROUP BY=比較が誤った結果を返す問題を修正 (#29962)
  • 64フィールドを超えるrow値の順序付け、グループ化、集約が正しくない問題を修正 (#30013)
  • 列エイリアスを持つ再帰CTE式の列リネージが正しくない問題を修正 (#29304)
  • ラムダ式内でnullのrow値のフィールドを参照する際にクエリが失敗する問題を修正 (#29504)
  • 配列などの構造的なデフォルト値を持つ変数を宣言するSQL UDFの実行時の失敗を修正 (#29533)
  • テーブル関数が大きなパススルー列を返す際に失敗する問題を修正 (#29561)
  • /v1/queryエンドポイントおよびWeb UIを通じて報告されるクエリ進捗が正しくない問題を修正 (#29793)
  • Fault-tolerant executionでクエリ進捗がNaNとして報告される問題を修正 (#29791)
  • スプーリングプロトコルでコネクタが提供するカスタムデータ型のシリアライズ時に失敗する問題を修正 (#29711)
  • アンダーフローを引き起こす小数桁数に丸める場合にround()doubleおよびreal値でNaNを返す問題を修正 (#29808)
  • number型をサポートしないクライアントにDESCRIBE OUTPUTnumber型を返す問題を修正 (#29671)

Security

  • JWT認証およびOAuth 2.0トークン検証に使用されるJWKSリクエストにUser-Agentヘッダーを追加 (#29669)

Web UI

  • プレビューUIに実行中のクエリをキャンセルまたはプリエンプトするボタンを追加 (#29315)
  • プレビューUIのクエリ一覧ページのCPU使用量を削減 (#29865)
  • ステージのない失敗したクエリに対するプレビューUIのスプリットタイムラインビューのエラーを修正 (#29537)

JDBC driver

  • スプールされた結果セグメントの取得失敗時の接続リークを修正 (#30048)

CLI

  • スプールされた結果セグメントの取得失敗時の接続リークを修正 (#30048)

Cassandra connector

  • Cassandraテーブルに対する述語が空のWHERE句になる場合にクエリが失敗する問題を修正 (#30027)

Delta Lake connector

  • $propertiesメタデータテーブルにテーブルロケーションを追加 (#29521)
  • parquet.writer.block-row-countコンフィグレーションプロパティまたはparquet_writer_block_row_countセッションプロパティによるParquetライター行グループの行数制限をサポート (#29673)
  • varbinary列によるパーティションテーブルの作成を禁止 (#24155)
  • 破壊的変更: Alluxioファイルシステムのサポートを削除。Alluxioファイルシステムキャッシュのサポートには影響なし (#29596)
  • Parquetファイルの高カーディナリティ文字列カラムの圧縮と読み取りパフォーマンスを改善。parquet.writer.delta-length-byte-array-encoding-enabledコンフィグレーションプロパティをfalseに設定することで無効化可能 (#29246)
  • ラムダ式内でネストされたフィールドにアクセスするクエリのパフォーマンスを改善 (#29532)
  • 静的クレデンシャル使用時のGoogle Cloud Storageからの読み取りパフォーマンスを改善 (#29776)
  • Deletion Vectorが有効な場合に、失敗した書き込みのクリーンアップ処理がアクティブなデータファイルを削除してしまうことによるデータ損失を修正 (#29361)
  • サブディレクトリにスコープされたVended Credentialsを使用して階層的名前空間を持つAzure Storageにアクセスする際の失敗を修正 (#29293)
  • S3からのデータ読み取り時に散発的に失敗する問題を修正(ストリームスキップ時のエラーがリトライされるようになった) (#29419)

Druid connector

  • 集約の計算をDruidにプッシュダウンすることで集約を含むクエリのパフォーマンスを改善 (#29863)

Exasol connector

  • timestamp型をサポート (#26963)

Hive connector

  • parquet.writer.block-row-countコンフィグレーションプロパティまたはparquet_writer_block_row_countセッションプロパティによるParquetライター行グループの行数制限をサポート (#29673)
  • Parquetファイルのスプリットの最大サイズを制御するhive.parquet.max-split-sizeコンフィグレーションプロパティを追加。hive.max-split-sizeは他のファイル形式にのみ適用 (#29698)
  • 破壊的変更: hive.max-initial-splitsおよびhive.max-initial-split-sizeコンフィグレーションプロパティを削除 (#29698)
  • 破壊的変更: Alluxioファイルシステムのサポートを削除。Alluxioファイルシステムキャッシュのサポートには影響なし (#29596)
  • Parquetファイルの高カーディナリティ文字列カラムの圧縮と読み取りパフォーマンスを改善。parquet.writer.delta-length-byte-array-encoding-enabledコンフィグレーションプロパティをfalseに設定することで無効化可能 (#29246)
  • ラムダ式内のネストされたフィールドにアクセスするクエリのパフォーマンスを改善 (#29532)
  • 静的クレデンシャル使用時のGoogle Cloud Storageからの読み取りパフォーマンスを改善 (#29776)
  • 設定されたHive Metastoreが利用できない場合に、接続のリトライ前にバックオフすることでパフォーマンスを改善 (#29653)
  • S3からのデータ読み取り時に散発的に失敗する問題を修正(ストリームスキップ時のエラーがリトライされるようになった) (#29419)

Hudi connector

  • 破壊的変更: Alluxioファイルシステムのサポートを削除。Alluxioファイルシステムキャッシュのサポートには影響なし (#29596)
  • 静的クレデンシャル使用時のGoogle Cloud Storageからの読み取りパフォーマンスを改善 (#29776)
  • S3からのデータ読み取り時に散発的に失敗する問題を修正(ストリームスキップ時のエラーがリトライされるようになった) (#29419)

Iceberg connector

  • object_store_layout_enabledを有効にせずにdata_locationテーブルプロパティを設定可能に (#28887)
  • parquet.writer.block-row-countコンフィグレーションプロパティまたはparquet_writer_block_row_countセッションプロパティによるParquetライター行グループの行数制限をサポート (#29673)
  • iceberg.parquet-footer-cache.typeコンフィグレーションプロパティで設定可能なParquetファイルフッターのキャッシュをサポート (#29684)
  • write.object-storage.partitioned-pathsテーブルプロパティをサポート (#27633)
  • Iceberg RESTカタログでプレフィックス付きパスストレージクレデンシャルをサポート (#29641)
  • Iceberg v3テーブルでのgeometryおよびgeography値の読み書きをサポート (#27893)
  • RESTおよびJDBCカタログでビュー作成時のlocationプロパティをサポート (#29724)
  • スプリットの最大サイズを制御するiceberg.max-split-sizeコンフィグレーションプロパティおよびmax_split_sizeセッションプロパティを追加。実験的なexperimental_split_sizeセッションプロパティを置き換え (#29894)
  • target_max_file_sizeおよびparquet_writer_row_group_sizeテーブルプロパティをサポート。Icebergネイティブのwrite.target-file-size-bytesおよびwrite.parquet.row-group-size-bytesプロパティとして永続化 (#28250)
  • 破壊的変更: $filesメタデータテーブルのlower_boundsおよびupper_bounds列をmap(integer, varchar)から型付きrow値に変更。lower_bounds[1]を使用したクエリやこれらの列をjsonにキャストするクエリの更新が必要 (#23147)
  • 破壊的変更: target_max_file_sizeおよびparquet_writer_row_group_sizeセッションプロパティ(非推奨のparquet_writer_block_sizeエイリアスを含む)を削除。代わりに同等のテーブルプロパティを使用 (#28250)
  • 破壊的変更: Alluxioファイルシステムのサポートを削除。Alluxioファイルシステムキャッシュのサポートには影響なし (#29596)
  • $partitionsメタデータテーブルに対するクエリのパフォーマンスを改善 (#23147)
  • テーブル名をINでフィルタするiceberg_tablesシステムテーブルに対するクエリのパフォーマンスを改善 (#29964)
  • Parquetファイルの高カーディナリティ文字列カラムの圧縮と読み取りパフォーマンスを改善。parquet.writer.delta-length-byte-array-encoding-enabledコンフィグレーションプロパティをfalseに設定することで無効化可能 (#29246#29616)
  • ラムダ式内でネストされたフィールドにアクセスするクエリのパフォーマンスを改善 (#29532)
  • 多数のEquality Deleteファイルを持つテーブルの読み取り時のメモリ使用量を削減 (#29643)
  • 静的クレデンシャル使用時のGoogle Cloud Storageからの読み取りパフォーマンスを改善 (#29776)
  • variantメタデータの最大サポートサイズを16MBから128MBに拡大 (#29423)
  • 固定ストレージロケーションを持つビューに対してCREATE OR REPLACE MATERIALIZED VIEWを実行した際のマテリアライズドビューのデータ損失を修正 (#29481)
  • RESTおよびJDBCカタログでCREATE OR REPLACE VIEW実行時にビューのカスタムストレージロケーションが失われる問題を修正 (#25425#29755)
  • ネストされたフィールドを参照するDeleteファイルを持つテーブルを読み取るクエリが失敗する問題を修正 (#29763)
  • 型が変更された列の統計情報を読み取る際に発生するエラーを修正 (#29802)
  • iceberg.rest-catalog.sessionNONEに設定したOAuth 2.0を使用するRESTカタログでネストされた名前空間を一覧する際の過剰なトークンリクエストを修正。(#29722)
  • Identity変換のみでパーティション化されたテーブルを更新する際に、データファイルごとに複数のDeleteファイルが作成される問題を修正 (#28276)
  • Iceberg RESTカタログでスキーマを一覧する際に、ネストされた名前空間が同時に削除された場合の失敗を修正 (#29500)
  • Glueカタログでテーブルへのアクセスが拒否された場合に列やコメントを一覧する際に発生するエラーを修正 (#29995)
  • サブディレクトリにスコープされたベンデッドクレデンシャルを使用して階層的名前空間を持つAzure Storageにアクセスする際の失敗を修正 (#29293)
  • S3からのデータ読み取り時に散発的に失敗する問題を修正(ストリームスキップ時のエラーがリトライされるようになった) (#29419)

Lakehouse connector

  • parquet.writer.block-row-countコンフィグレーションプロパティまたはparquet_writer_block_row_countセッションプロパティによるParquetライター行グループの行数制限をサポート (#29673)
  • 静的クレデンシャル使用時のGoogle Cloud Storageからの読み取りパフォーマンスを改善 (#29776)
  • S3からのデータ読み取り時の散発的な失敗を修正(ストリームスキップ時のエラーがリトライされるようになった) (#29419)

MySQL connector

  • 保存された値が末尾のスペースのみで異なる場合に、charまたはvarchar列を等価またはIN述語でフィルタする際の誤った結果を修正。文字列カラムに対する不等式および範囲述語はプッシュダウンされなくなった (#29952#29939)

Oracle connector

  • charからvarcharへのCASTがOracleにプッシュダウンされる際に、トリミングではなくブランクパディングが保持される誤った結果を修正 (#29939)

PostgreSQL connector

  • PostgreSQLのpoint型をTrinoのgeometry型として読み書きできるようになった (#29568)
  • PostGISのgeometry列を持つテーブルの読み取り時の失敗を修正 (#29505)

Redis connector

  • redis.tls.*コンフィグレーションプロパティで設定可能なRedisへのTLS接続をサポート (#8091)

SQL Server connector

  • 破壊的変更: 保存された値が末尾のスペースのみで異なる場合に、charまたはvarchar列を等価またはIN述語でフィルタする際の誤った結果を修正。文字列カラムに対する不等式および範囲述語はプッシュダウンされなくなったため、そのような述語のプッシュダウンに依存するDELETEまたはUPDATEは失敗する (#29952#29939)

TPC-DS connector

  • TPC-DSデータジェネレータをバージョン1.7に更新。一部の生成データおよびテーブル統計が変更 (#30022)

SPI

  • T::method(args)として呼び出し可能な名前付き型の静的メソッドとしてスカラー関数を登録する@StaticMethodアノテーションを追加 (#29385)
  • expr.method(args)として呼び出し可能なレシーバ型のメソッドとしてスカラー関数を登録する@InstanceMethodアノテーションを追加 (#29399)
  • Javaで実装された関数の引数名を宣言する@Nameアノテーションを追加 (#29530)
  • コネクタの式プッシュダウンでラムダ式をサポート (#29532)
  • コネクタテーブル関数で関数の説明を指定できるようになった (#29830)
  • コネクタページソースがエンジンが提供するMemoryContextを通じてメモリ使用量を報告できるようになった (#29843)
  • 破壊的変更: ConnectorSplitManager.getSplitsDynamicFilterパラメータをダイナミックフィルタ列のセットに置き換え、現在の述語をDynamicFilterSnapshotとしてConnectorSplitSource.getNextBatchに渡すように変更 (#29206)
  • 破壊的変更: Constraintから述語を削除し、パーティションおよびスプリットのプルーニング中に式を評価するためのConnectorExpressionEvaluatorインターフェースを追加 (#29289)
  • 破壊的変更: ConnectorPageSourceProviderおよびConnectorPageSinkProviderから非推奨メソッドを削除 (#29562)
  • 破壊的変更: TableFunctionProcessorProviderから非推奨メソッドを削除 (#29618)

レバテックLABさんでGitBucketについての記事を書かせていただきました

以前レバテックLABさんでソフトウェアエンジニアのキャリアについての記事を書かせていただいたのですが、今回は仕事から離れて個人OSSの開発に関する記事を書かせていただきました。

最近ペースダウンしているとはいえ、GitBucketの開発はかれこれ10年以上続けていますが、Hacker Newsで取り上げられてスターがものすごい勢いで増えたり、ギッハブ社からご連絡をいただいたり、Scalaカンファレンスでスポンサーをしたり、グッズを作ったり、米国の某超大手企業の中の人から相談を受けたり、Scalatraのメンテナンスをドメインごと引き継いだり、国内外のミートアップやカンファレンスでお話しさせていただいたり、雑誌やオンラインメディアで記事を書かせていただいたりなど、本当に色々なことがありました。

今回はGitBucketにフォーカスして書かせていただいたのですが、GitBucketだけでなくAmaterasもメンテナンスを続けていますし、FSWikiも有志の方がメンテを継続してくださっています。FSWikiからだとかれこれ20年以上になりますが、それぞれのプロダクトで同じように様々な出来事がありましたし、なによりずっと使ってくださるユーザさんがいるというのはありがたいことです。1円にもなっていない(OSS開発をきっかけに書かせていただいた書籍の印税や記事の原稿料は入りましたが、それは別に相当な時間をかけていますし…)とはいえ、このような経験はOSS開発をしていなかったら得られなかったものだと思います。

今後もユーザさんが存在する限り無理のない範囲で続けていければと思っています。そろそろ何か新しいものも作りたいですけどねw

アナリシス・ブレイン

以前はサッカーの分析ブログでお馴染みだったらいかーると先生の2冊目の書籍とのことですが、前作と比べても現代のサッカーがいかに急激に複雑化してきたかわかる一冊でした。特に後半の2022年カタールワールドカップでの日本対ドイツの試合分析は時系列の出来事を追いながら何がどういう意図で起きていたかが解説されており、まるで物語を読んでいるかのようでした。

しかし正直サッカーはちょっと難しくなりすぎてしまっているような気もしますね。特にどのクラブも極限能力の選手たちが揃い、高度な戦術を駆使するプレミアリーグはもはや素人が見ていても何が起きているのかよくわからないことが多いです。他国のリーグだとまた様子が違ったりするのでしょうか。

2025-26シーズンのアーセナル振り返り

www.arsenal.com

22年ぶりのプレミアリーグ優勝

昨シーズンまでプレミアリーグで3年連続2位、今シーズンこそタイトルを…ということで超大型補強をして臨んだ今シーズンですが、主力を怪我で欠きつつも、堅い守備をベースにセットプレーで点を取るアーセナルとは思えない手堅すぎる試合運びでついにプレミアリーグの頂点に立ちました。無敗優勝のシーズンにロンドンでアーセナルの試合を現地観戦してから22年、長かった…。

例年と比べサカやウーデゴーといった主力が故障で不在の期間が長く、チームとしても23-24シーズンあたりのようなハマっている感があまりなく、シティやリバプールが本調子ではなかったことに助けられた感もありますが、もともとアルテタ就任時に「シティやリバプールは数年後に過渡期に入る」と読んで長期的に強化を行なってきたということで、それも計画通りと言えるかもしれません。しかしいくら計画通りといっても途中で結果が出ていなかったらあっさり頓挫していたと思うので毎シーズンきちんと結果を出し続けてきたアルテタは偉い(最初の2シーズンは順位は微妙だったけど内容的には未来を感じさせるものを見せてくれていたと思う)。

一時期はもう自分が生きている間にアーセナルのリーグ優勝を見るのは無理なのではと諦めていたので、実はまだ優勝していないんじゃないかと半信半疑です。

印象に残ったプレーヤー

  • ライス - 多少の離脱はありつつ今シーズンもほぼフル稼働でチームを支えた完璧超人。CL決勝でも延長戦まで走り続けたこのタフさはもはや異常である。加入以来ほぼ休みなしで馬車馬のように働き続けているけど大丈夫なのだろうか…。
  • スビメンディ - プレミア初参戦にも関わらず開幕直後からフィットし、プレースタイルは異なるもののパーティーの退団を感じさせなかった。開幕前は最も不安視されていたポジションだったのでシーズン序盤を無事に乗り切れたのは彼が素早くフィットしたのが大きかったと思う。終盤に調子を落としたけど疲労のせいだと思いたい。
  • トロサール - 前半戦はいまいち調子の上がらない攻撃陣の中でMVP級の活躍、終盤戦も大事なところで試合を決めるプレーを見せた。攻守にリスクを取りすぎなプレーも目立つけど、サカやカラフィオーリの不在が長く、マルティネッリは微妙、エゼもいまいちフィットしない中、試合を動かすことができる貴重な存在だった。
  • ティンバー - 守備力はもちろんだけど普通にうますぎる。リーグ終盤の故障離脱が残念だった。CL決勝にはなんとか間に合ったけど、彼が先発できていたらどうなっていたかと思わざるを得ない。
  • カラフィオーリ - 違いを作れるサイドバックとして時にはCFのポジションに居座ったりと縦横無尽の動きを見せた。出場時は崩しの切り札になっていたけどとにかく故障離脱が多くて計算が立たない。たまに出てくるから効くのかもしれない。
  • ギョケレシュ - 最初の頃はプレミアのDFに全く歯が立たずこれはもしややってしまったか思ったけど、シーズンが進むにつれ少しずつ適応していった。試合を見ているだけで努力している様子が伝わってきて好感が持てるけど来シーズンはさらにエースとしての活躍を期待したいところ。
  • インカピエ - カラフィオーリは相変わらず故障離脱が多く、スケリーも伸び悩みで序列を落としたことで左サイドバックで多くの出場機会を得て、気合いの入った守備を見せた。バーンリー戦のアクシデントで強烈なインパクトを残した。

サリバ、マガリャンイス、ラヤはもはやいつも通りというか…。中盤起用のスケリーは独力でボールを前進させられるスビメンディにはない魅力があるので開花して欲しい気持ちはあるものの、これまでのチャラいプレーを見ているとどうにも不安が拭えない。ノアゴーはなぜまったく使われなかったのか謎だった。エゼはもっとできるはずと思うので来シーズンは頑張って欲しい。ダウマンは初めて見た時のインパクトは凄かったけどまだまだこれからですね。

あと、日本人としてはやはりここに冨安がいて欲しかったなと。まあ冨安個人としては退団したおかげで(?)W杯に参加することができたのでよかったのかな。

来シーズンに向けて

アーセナルはアルテタ就任後、様々な経験と変化を経てタイトルを獲るべく現在のスタイルに至ったわけですが、CL(とカラバオカップ)では決勝で敗れてしまい、このスタイルにもまた限界が見えたのではないかと思います。今シーズンはタイトルを取るために現実に振り切り、ひとまずの結果も出したということで良しとして、来シーズンはさらに進化したアーセナルが見れることを楽しみしています。ギョケレシュやエゼはもっとできるはずと思うし、サカやウーデゴーが定期的に出場できれば変わってくる部分もあるはず。

補強は左ウィングとアンカーは必須ですかね。ノアゴーの去就とエゼとスケリーをどう考えるか次第かもしれないけど。ホワイトが移籍するなら右サイドバックも必要かな。今年はワールドカップがあるので難しい部分もあるかもしれませんが、ワールドカップで主力に怪我人が出ないことを祈るばかりです。

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

今回は約1ヶ月半ぶりのリリースとなりました。ジオメトリライブラリの変更による非互換変更があるようなので利用用途によっては注意が必要かもしれません。個人的にはAdaptive Filter Reorderingが気になります。

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

General

  • booleanからnumberへのキャストをサポート (#28879)
  • Python UDFでnumber型をサポート (#28921)
  • numberjson間のキャストをサポート (#28394)
  • ON EMPTYON ERROR句を遅延評価することでjson_valuejson_tableのパフォーマンスを改善 (#28969)
  • DESCRIBE OUTPUTでインラインクエリをサポート。DESCRIBE OUTPUT (SELECT * FROM nation)のようにPREPAREステートメントなしで使えるようになった (#28002)
  • ASOFジョインのためのNEAREST句をサポート (#21759)
  • WITH SESSIONSET SESSIONCALLステートメントでバインディングパラメータをサポート (#29053)
  • JDBCドライバのパラメータexternalAuthenticationTokenCacheSYSTEMをサポート。外部認証トークンをディスク(~/.trino/)に保存し、別々のJDBCクライアントプロセスで共有可能に (#28783)
  • io.trino.spi.eventlistener.QueryInputMetadata#connectorMetricsConnectorSplitSourceのメトリクスを含めるようになった (#28870)
  • より広範な空間系のエコシステムに適合するためにEsriジオメトリライブラリをJTSに置き換え (#27881)
  • 破壊的変更: OGC標準に準拠しないWKT入力を拒否するように (#27881)
  • 破壊的変更: ST_Union()が空の入力に対してNULLではなく空のGeometryコレクションを返却するようになった (#27881)
  • 破壊的変更: ST_Union()でpoint-on-line unionの場合は公点に頂点を挿入しないようになった (#27881)
  • 階層型名前空間が有効になっているAzureコンテナとのファイルシステム交換の互換性を改善 (#29042)
  • Selectivityの高いANDおよびOR条件を含むクエリのパフォーマンスを向上(実行時にフィルタ条件が動的に並び替えられるようになった) (#24336)
  • 統計情報が不明な列に対するクエリにおいて不適切な結合順序が選択されることにより発生する過剰なメモリ使用量を削減 (#29157)
  • system.jdbcおよびsystem.metadataに対するクエリと同時に動的カタログが削除された際に発生するエラーを修正 (#28017)
  • 小数点以下の桁数が16桁を超える数値を含むドキュメントに対するjson_parse()もしくはJSONリテラルで誤った結果が発生する問題を修正 (#28867)
  • 大文字のカラムを持つテーブルに対してテーブルプロシージャを実行する際に発生するエラーを修正 (#28970)
  • ALTER TABLE EXECUTE OPTIMIZEをパーテーション化されたtimestamp with time zoneカラムに対してOR条件で使用した場合に発生するエラーを修正 (#27136)
  • 定義に非決定的な関数が含まれるマテリアライズドビューのフレッシュネスチェックが正しく行われない問題を修正 (#28682)
  • DESCRIBE OUTPUT[VERSION | TIMESTAMP] AS OFと共に使用した際に発生するエラーを修正 (#29077)

JDBC driver

  • variant型のサポートを追加 (#29046)
  • http-server.authentication.oauth2.refresh-tokens=trueが設定されたサーバーに対して JDBCのaccessTokenコネクションプロパティを使用する場合に、透過的なOAuth2トークン更新のサポートを追加(以前は埋め込まれたアクセストークンの有効期限が切れると401 Unauthorizedエラーで失敗していた) (#29264)
  • setBigDecimal()に渡されたBigDecimaltoString()の値が科学的記数法(例: 0E-10)の場合に発生するエラーを修正 (#23523)

CLI

  • variant型のサポートを追加 (#29046)

ClickHouse connector

  • ClickHouseのすべてのDECIMALカラムの読み取りをサポート (#28873)

Delta Lake connector

  • 破壊的変更: Azure Storage、Google Cloud Storage、IBM Cloud Object Storage、S3、S3互換ストレージに対するレガシーオブジェクトストレージサポートを廃止。fs.hadoop.enabledはHDFSにのみ適用される。ネイティブファイルシステムサポートへの移行についてはLegacy file system supportを参照のこと (#24878)
  • azure.connection-pool-max-idle-timeおよびazure.http-request-timeoutコンフィグレーションプロパティでAzureコネクションプールのアイドル時間とHTTPリクエストのタイムアウトを設定可能に (#29284)
  • S3にファイルを書き込む際のメモリ使用量を削減 (#28488)
  • メタデータとプロトコル情報をDeltaチェックサムファイルから読み込むことでプランニング時間を改善。この最適化はdelta.load-metadata-from-checksum-fileコンフグレーションプロパティもしくはload_metadata_from_checksum_fileセッションプロパティをfalseに設定することで無効化可能 (#28381)
  • カラムインデックスを持つParquetファイルで構成されたテーブル(特にApache Sparkで書かれた場合)に対するDELETEで誤った行が削除される問題を修正 (#28885)

Hive connector

  • 破壊的変更: Azure Storage、Google Cloud Storage、IBM Cloud Object Storage、S3、S3互換ストレージに対するレガシーオブジェクトストレージサポートを廃止。fs.hadoop.enabledはHDFSにのみ適用される。ネイティブファイルシステムサポートへの移行についてはLegacy file system supportを参照のこと (#24878)
  • Esri GeoJSONをサポート (#28859)
  • azure.connection-pool-max-idle-timeおよびazure.http-request-timeoutコンフィグレーションプロパティでAzureコネクションプールのアイドル時間とHTTPリクエストのタイムアウトを設定可能に (#29284)
  • Glueカタログ内のHiveテーブルに対する日付パーティション条件を使用したクエリのパフォーマンスを改善 (#28817)
  • S3にファイルを書き込む際のメモリ使用量を削減 (#28488)
  • Hive metastore version 3.1でテーブルの作成に失敗する問題を修正 (#28798)
  • バケット名なしのファイルを持つテーブルでバケット番号をパースする際に発生するエラーを修正 (#28632)

Hudi connector

  • azure.connection-pool-max-idle-timeおよびazure.http-request-timeoutコンフィグレーションプロパティでAzureコネクションプールのアイドル時間とHTTPリクエストのタイムアウトを設定可能に (#29284)

Iceberg connector

  • 破壊的変更: Azure Storage、Google Cloud Storage、IBM Cloud Object Storage、S3、S3互換ストレージに対するレガシーオブジェクトストレージサポートを廃止。fs.hadoop.enabledはHDFSにのみ適用される。ネイティブファイルシステムサポートへの移行についてはLegacy file system supportを参照のこと (#24878)
  • Iceberg v3テーブルでvariant型の実験的なサポートを追加(以前のCLIではJSONとしてレンダリングされる) (#24538)
  • Iceberg v3テーブルでtimestamp(9)およびtimestamp(9) with time zoneの読み取りと書き込みをサポート (#27835)
  • Iceberg RESTカタログ(Azure)でVended Credentialsをサポート (#23238)
  • RESTカタログに送信するHTTPヘッダを指定可能に (#24236)
  • add_filesおよびadd_files_from_tableプロシージャ実行中のメトリクスをサポート (#28996)
  • optimizeプロシージャ実行中のメトリクスをサポート (#28992)
  • $filesシステムテーブルにさらにいくつかのカラムを追加 (#29044)
  • $filesシステムテーブルにadded_snapshot_idカラムを追加 (#28911)
  • azure.connection-pool-max-idle-timeおよびazure.http-request-timeoutコンフィグレーションプロパティでAzureコネクションプールのアイドル時間とHTTPリクエストのタイムアウトを設定可能に (#29284)
  • Iceberg RESTカタログ(S3、GCS、Azure)でリフレッシュ可能なVended Credentialsをサポート(長時間実行される処理でもVended Credentialをリフレッシュしながら実行できる) (#28998)
  • S3にファイルを書き込む際のメモリ使用量を削減 (#28488)
  • $entriesおよび$all_entriesメタデータテーブル読み取り時に発生するエラーを修正 (#29211)

Lakehouse connector

  • 破壊的変更: Azure Storage、Google Cloud Storage、IBM Cloud Object Storage、S3、S3互換ストレージに対するレガシーオブジェクトストレージサポートを廃止。fs.hadoop.enabledはHDFSにのみ適用される。ネイティブファイルシステムサポートへの移行についてはLegacy file system supportを参照のこと (#24878)
  • azure.connection-pool-max-idle-timeおよびazure.http-request-timeoutコンフィグレーションプロパティでAzureコネクションプールのアイドル時間とHTTPリクエストのタイムアウトを設定可能に (#29284)
  • S3にファイルを書き込む際のメモリ使用量を削減 (#28488)

MongoDB connector

  • 小数点以下の桁数が16桁を超える数値を含むJSONカラムを読み込む際に、誤った結果が発生する問題を修正 (#28867)

MySQL connector

  • 小数点以下の桁数が16桁を超える数値を含むJSONカラムを読み込む際に、誤った結果が発生する問題を修正 (#28867)

Pinot connector

  • 小数点以下の桁数が16桁を超える数値を含むJSONカラムを読み込む際に、誤った結果が発生する問題を修正 (#28867)

PostgreSQL connector

  • COALESCEを含むクエリのパフォーマンスを改善 (#11535)
  • 小数点以下の桁数が16桁を超える数値を含むJSONカラムを読み込む際に、誤った結果が発生する問題を修正 (#28867)

SingleStore connector

  • 小数点以下の桁数が16桁を超える数値を含むJSONカラムを読み込む際に、誤った結果が発生する問題を修正 (#28867)

SQL Server connector

  • json型のサポートを追加 (#28082)
  • いずれかのカラムにdenyパーミッションを設定しているとそのテーブルからの読み取りが失敗する問題を修正 (#29244)

SPI

  • Iceberg仕様で定義されているvariant型を追加 (#24538)
  • テーブルレベルのConnectorAccessControl.checkCanXxxメソッドにtableBranchパラメータを追加 (#29179)
  • COALESCEのコネクターへのプッシュダウンをサポート (#28984)
  • 破壊的変更: Typeインターフェースから非推奨のgetObjectappendToメソッドを削除 (#29003)

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

約3ヶ月ぶりのリリースですが、例によってIcebergコネクタの修正が多いですね。新機能としてはIceberg V3テーブルへの書き込みができるようになったのが大きいでしょうか。設定項目の削除・統一も目立ちます。バージョンアップの際は注意が必要かもしれません。

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

General

  • number型を追加 (#28319)
  • /metricsエンドポイントにcoordinatorとworkerの数を追加 (#27408)
  • テーブル書き込み時に使用するメモリの最大量をtask.scale-writers.max-writer-memory-percentageコンフィグレーションプロパティで設定可能に (#27874)
  • array_first()関数に条件にマッチする最初の要素を見つけるバージョンを追加 (#27706)
  • DataSketches関数を追加 (#27563)
  • 破壊的変更: enable-large-dynamic-filtersコンフィグレーションプロパティと対応するシステムセッションプロパティenable_large_dynamic_filtersを削除 (#27637)
  • 破壊的変更: dynamic-filtering.small*dynamic-filtering.large-broadcast*コンフィグレーションプロパティを削除 (#27637)
  • 破壊的変更: deprecated.http-server.authentication.oauth2.groups-fieldコンフォグレーションプロパティを削除 (#28646)
  • 新しいCPUアーキテクチャとGraviton 4 CPUでリモートデータエクスチェンジのパフォーマンスを改善 (#27586)
  • リモートデータエクスチェンジや集約を含むクエリのパフォーマンスを改善 (#27657)
  • スプーリングが有効な場合のWindow関数を含むクエリでのメモリ不足エラーを削減 (#27873)
  • Exchange Managerが設定されているがクエリがタスクレベルリトライを使用しない場合のクエリパフォーマンスを改善 (#28698)
  • テーブルの[VERSION | TIMESTAMP] AS OF句でクエリパラメータを使用可能に (#28681)
  • localtimestamp()をPrecision 3で呼び出すと誤った結果を返す問題を修正 (#27806)
  • localtimestamp()をPrecision 7および8で呼び出すとエラーが発生する問題を修正 (#27807)
  • カタログ削除中にsystemカタログをクエリした際にクエリが失敗する問題を修正 (#28017)
  • date_add()関数にInteger.MAX_VALUEより大きい値を指定した場合に発生するエラーを修正 (#27899)
  • jsontimebooleaninterval値をvarchar(n)にキャストした結果が対象の型に収まらない場合に誤った値になってしまう問題を修正 (#552)
  • Azure Exchange Manager使用時のクエリエラーとレイテンシの増加を修正 (#28058)

Web UI

  • プレビューUIのヘッダーにクラスタのステータス情報を追加 (#27712)
  • クエリ詳細ページでステージをアルファベット順ではなく数値順でソート (#27655)

JDBC driver

  • ResultSetMetaData.getColumnClassNameを呼び出した際にmaprowtime with time zonetimestamp with time zonevarbinarynull値に対して正しいクラス名を返すように修正 (#28314)

ClickHouse connector

  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

Delta Lake connector

  • 破壊的変更: ライブファイルテーブルメタデータキャッシュを削除。コンフィグレーションプロパティmetadata.live-files.cache-sizemetadata.live-files.cache-ttlcheckpoint-filtering.enabledは廃止されたため、サーバー設定から削除する必要がある (#27618)
  • 破壊的変更: hive.write-validation-threadsコンフィグレーションプロパティを削除 (#27729)
  • 破壊的変更: parquet.optimized-writer.validation-percentageコンフィグレーションプロパティを削除、代わりにparquet.writer.validation-percentageを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.block-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.block-sizeを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.page-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.page-sizeを使用すること (#27729)
  • 破壊的変更: gcs.use-access-tokenコンフィグレーションプロパティを削除 (#26941)
  • 破壊的変更: hive.fs.new-file-inherit-ownershipコンフィグレーションプロパティを削除 (#28029)
  • Parquetファイル内の高カーディナリティカラムに対するBloomフィルタの効果を改善 (#27656)
  • S3上のDelta Lakeテーブルへの書き込み時にPutObjectTagging AWS S3権限の要件を削除 (#27701)
  • テーブル定義の変更を伴うCREATE OR REPLACE実行時にテーブルが破損する可能性のある問題を修正 (#27805)
  • Azureファイルシステム使用時のクエリエラーとレイテンシ増加を修正 (#28058)
  • GCSでファイルパスに#が含まれる場合のエラーを修正 (#28292)
  • 統計情報をサポートしないカラムでParquetカラムインデックスを読み込む際のNPEを修正 (#28560)

DuckDB connector

  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECT操作が失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

Hive connector

  • Parquetファイルからナノ秒精度のタイムスタンプをtimestamp(p) with time zoneカラムに読み取るサポートを追加 (#27861)
  • 破壊的変更: hive.write-validation-threadsコンフィグレーションプロパティを削除 (#27729)
  • 破壊的変更: parquet.optimized-writer.validation-percentageコンフィグレーションプロパティを削除、代わりにparquet.writer.validation-percentageを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.block-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.block-sizeを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.page-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.page-sizeを使用すること (#27729)
  • 破壊的変更: 非推奨のgcs.use-access-tokenコンフィグレーションプロパティを削除 (#26941)
  • 破壊的変更: hive.fs.new-file-inherit-ownershipコンフィグレーションプロパティを削除 (#28029)
  • Parquetファイル内の高カーディナリティカラムに対するBloomフィルタの効果を改善 (#27656)
  • Azureファイルシステム使用時のクエリエラーとレイテンシ増加を修正 (#28058)
  • バケット化およびソート済みテーブルを対象にしたINSERTクエリでの誤ったメモリカウントを修正 (#28315)
  • Hiveメタストアバージョン4使用時のtimestampカラムを持つテーブルへのINSERTANALYZEを修正 (#26214, #28330)

Hudi connector

  • 破壊的変更: hive.write-validation-threadsコンフィグレーションプロパティを削除 (#27729)
  • 破壊的変更: parquet.optimized-writer.validation-percentageコンフィグレーションプロパティを削除、代わりにparquet.writer.validation-percentageを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.block-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.block-sizeを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.page-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.page-sizeを使用すること (#27729)
  • 破壊的変更: 非推奨のgcs.use-access-tokenコンフィグレーションプロパティを削除 (#26941)
  • 破壊的変更: hive.fs.new-file-inherit-ownershipコンフィグレーションプロパティを削除 (#28029)
  • Azureファイルシステム使用時のクエリエラーとレイテンシ増加を修正 (#28058)
  • GCSでファイルパスに#が含まれる場合のエラーを修正 (#28292)

Iceberg connector

  • Iceberg RESTカタログでBigLakeメタストアをサポート (#26219)
  • delete_after_commit_enabledmax_previous_versionsテーブルプロパティを追加 (#14128)
  • Iceberg v3テーブルでカラムのデフォルト値をサポート (#27837)
  • Iceberg v3テーブルの作成、書き込み、削除をサポート (#27786, #27788)
  • optimizeexpire_snapshotsremove_orphan_filesテーブルプロシージャでIceberg v3テーブルをサポート (#27836)
  • Iceberg v3のrow lineageをサポート (#27836)
  • $manifests$all_manifestsメタデータテーブルにcontentカラムを追加 (#27975)
  • ALTER ... SET DATA TYPEでのmaparrayのネストされた型の変更をサポート (#27998)
  • number型のカラムを持つマテリアライズドビューの作成をサポート (#28399)
  • マテリアライズドビュー更新時に未使用ファイルをクリーンアップ (#28008)
  • 破壊的変更: hive.write-validation-threadsコンフィグレーションプロパティを削除 (#27729)
  • 破壊的変更: parquet.optimized-writer.validation-percentageコンフィグレーションプロパティを削除、代わりにparquet.writer.validation-percentageを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.block-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.block-sizeを使用すること (#27729)
  • 破壊的変更: hive.parquet.writer.page-sizeコンフィグレーションプロパティを削除、代わりにparquet.writer.page-sizeを使用すること (#27729)
  • 破壊的変更: 非推奨のgcs.use-access-tokenコンフィグレーションプロパティを削除 (#26941)
  • 破壊的変更: hive.fs.new-file-inherit-ownershipコンフィグレーションプロパティを削除 (#28029)
  • 破壊的変更: iceberg.extended-statistics.enabledコンフィグレーションオプションとextended_statistics_enabledセッションプロパティのサポートを削除 (#27914)
  • Parquetファイル内の高カーディナリティカラムに対するBloomフィルタの効果を改善 (#27656)
  • 新しいマテリアライズドビューをクエリする際のクエリパフォーマンスを改善 (#27608)
  • パーティションフィルタが使用された場合にパーティションスコープの等価削除ファイルをクリーンアップするようoptimizeを改善 (#28371)
  • パーティションによってマニフェストをクラスタリングしパーティションフィルタを適用するクエリの読み取りパフォーマンスを改善するようoptimize_manifestsを強化 (#27358)
  • 削除ファイルを含むテーブルでのクエリ計画時間を短縮 (#27955)
  • シンプルなFROMWHERE句を含むクエリの計画時間を短縮 (#27973)
  • 大きなテーブルでのクエリ計画時間を短縮 (#28068)
  • RESTカタログによって提供される一時的なGCS認証情報のサポートを追加 (#24518)
  • buckettruncateを含むスキーム変更時の$filesメタデータテーブル読み取り失敗を修正 (#26109)
  • Equality Deleteを含むテーブルで$file_modified_timeメタデータカラムの読み取りに失敗する問題を修正 (#27850)
  • 特定のレアな文字列入力によるParquetファイル内の大きなフッターを回避 (#27903)
  • メタデータカラムでのJOINを含むクエリの失敗を修正 (#27984)
  • Azureファイルシステム使用時のクエリエラーとレイテンシ増加を修正 (#28058)
  • バケット化およびソート済みテーブルをターゲットとしたINSERTクエリでの誤ったメモリ会計を修正 (#28315)
  • ALTER TABLE ... SET PROPERTIESでパーティション仕様を設定する際に既存のパーティションカラムがパーティション仕様から意図せず削除される問題を修正 (#26492)
  • write.parquet.compression-codecプロパティがLZ4に設定されたテーブルからの読み取り失敗を修正 (#28291)
  • TrinoによってIcebergの仕様に準拠するように書き込まれたcompression-codecテーブルプロパティの値を修正 (#28293)
  • GCSでファイルパスに#が含まれる場合のエラーを修正 (#28292)
  • iceberg.jdbc-catalog.schema-version=V0でのテーブル読み取り失敗を修正 (#28419)
  • 多数のEquality Deleteを含むテーブルからの読み取り時にworkerがクラッシュしてしまう問題を修正 (#28468)
  • 異なるパーティション分割スキーマでCREATE OR REPLACE TABLE後の$filesテーブルクエリが失敗する問題を修正 (#25339)

Ignite connector

  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECT操作が失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

Lakehouse connector

  • Equality Deleteファイルが使用される場合のパフォーマンスとメモリ使用量を改善 (#28507)
  • Iceberg $filesテーブル読み取り失敗を修正 (#26751)

MariaDB connector

  • p > 38の場合のMariaDB DECIMAL(p, s)カラム読み取りサポートを追加 (#28744)
  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECT操作が失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

MySQL connector

  • p > 38の場合のMySQL DECIMAL(p, s)カラム読み取りサポートを追加 (#28744)
  • 破壊的変更: n > 1の場合のMySQL BIT(n)カラムの誤った読み取りサポートを削除 (#28744)
  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

Oracle connector

  • oracle.connection-pool.wait-timeoutカタログプロパティによる接続待機タイムアウトの設定サポートを追加 (#27744)
  • すべてのOracle NUMBERカラムの読み取りサポートを追加 (#28747, #28401)
  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)
  • queryテーブル関数でfloat型の読み取りが失敗する問題を修正 (#27880)

PostgreSQL connector

  • すべてのPostgreSQL NUMERICDECIMALカラムの読み取りサポートを追加 (#28141)
  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

Redshift connector

  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

SingleStore connector

  • n > 1の場合のSingleStore BIT(n)カラムの誤った読み取りサポートを削除 (#28744)
  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

Snowflake connector

  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

SQL Server connector

  • 同じテーブルに対する以前のCREATE TABLE ... AS SELECTが失敗した場合にテーブル作成が失敗する問題を修正 (#27702)

Vertica connector

  • 破壊的変更: Verticaコネクタを削除 (#26904)

SPI

  • TypeSignatureParameterのサポートを削除。代わりにTypeParameterを使用 (#27574)
  • ParameterKindのサポートを削除。代わりにTypeParameter.TypeTypeParameter.NumericTypeParameter.Variableを使用すること (#27574)
  • NamedTypeNamedTypeSignatureNamedTypeParameterのサポートを削除。代わりにTypeParameter.Typeを使用すること (#27574)
  • MaterializedViewFreshness#getLastFreshTimeを非推奨に。代わりにgetLastKnownFreshTimeを使用すること (#27803)
  • ColumnMetadata.commentColumnMetadata.extraInfoOptional<String>に変更 (#28151)

自宅のキーボードをMX Mechanical Mini for Macに変えた

3年半ほど前に自宅で使っているキーボードをThinkPadキーボードIIからロジクールのMX Keys Mini for Mac + マウスに変えたのですが、最近になってキートップの塗装が剥がれてきてしまったり、一部のキーがグラグラしてきてしまったので久しぶりに買い替えてみました。

takezoe.hatenablog.com

やはりキーボードとマウスを無線接続しつつ、業務用PCと自宅用PCをUSB-Cケーブル一本の差し替えで切り替えるのにLogiBoltが便利なので、今回もロジクールのキーボードにしたのですが、今回は以前から気になっていたメカニカル版にしてみました。茶軸ですがロープロファイルのスイッチで、ノートPCのキーボードに慣れた人でもさほど違和感なくタイプできると思います。

マウスも高速スクロールが効かなくなってしまっていたのでついでに買い替えました。以前はM650という5ボタンの付いているものを使っていたのですが、サイドのボタンはあまり使わなかったので今回はM550というシンプルなものにしました。前回はホワイトでしたが、今回はグレーで揃えてみました。

LogiOptions+でLogiBoltとペアリングしてキーボードのファンクションキーの動作を通常モードに切り替えるだけで設定は終了。基本的な配列はMX Keys Mini for Macと同じなのでKarabinerの設定も全キーボード用に設定している日本語入力の切り替えやCAPS LOCKの動作変更など最小限のものだけで違和感なく使えます。このあたりはfor Macのメリットですね。

MX Mechanical Mini(Windows用含む)は一番右側のキー配列の評判が悪いようですが、個人的には昔のDellのノートPCなどでこの配列には慣れているので特に問題は感じないです。むしろMX Keys Miniだと小さくて押しづらかったファンクションキーやカーソルキーが通常サイズになっていたり、Page UpとPage Downが独立キーになっているのは嬉しいところ。あとMX Keys Miniだと集中モードのON/OFFキーがDeleteキーの上にあって気付かないうちに押してしまって通知に気付かない、ということがよくあったのですが、一列ずれたことで押し間違えることがなくなりそうです。ただ、メカニカルなだけあってタイプ音はそれなりに大きいので静音性が必要であればMX Keysの方がよいかもしれません。

MX Keys MiniはThinkPadキーボードと比べてあまりヘタらないなぁと思っていたんですが(ThinkPadキーボードはすぐキートップがテカってくるし、2年くらいでチルトスタンドがへし折れたりキートップが取れたりなど壊れてしまう)、結局3年半で寿命を迎えてしまいました。果たしてメカニカルはどのくらい持つでしょうか。