2022Starburst2021年の8月23日にStarburstに入社して1年以上経ったのでその記録もかねて2022年の振り返りです。以前はTrinoに既にコントリビュートしている人が入社してきている印象がありましたが最近は入社してから初めてPRを送る人もよく見かけるので会社としてのフェーズの変化を感じます。開発する機能によってOSSか社内版かが決まるのですが、僕はほぼフルタイムでTrinoにコミットしています。数年前はOSSのフルタイムコミッターに対する憧れが自分にはあったのですが、実際になってみるとチームにはメンテナーは自分の他にもう1人しかいないので、その人が休暇をとると自分のコードがコミットできず時々困る場面があります。いった際はPRのレビューにあてる時間を長くしたりして都度調整しています。EnterpriseのConnectorsチームというSaaS、JDBC、NoSQL系のコネクターを開発するチームに所属していました。チームの名前からはコネクターの開発のみを行う印象を受けますが、必要に応じてエンジンにも手を入れます。TALEなどの新しいシンタックスは僕が追加しました。コネクターによって気をつけるポイントは異なるのでそれらについて満遍なく学べたことは良かったです。SaaS系のコネクターは自分達のコードが変わっていなくてもSaaSサービス側の変更で期待とは異なる動作に繋がることがあるので、パッと見では冗長とも見えるほど多くのテストコードを書く必要があります。JDBC系のコネクターではJDBCドライバーの標準になっている部分の開発は比較的楽なのですが、タイプマッピングなど実装依存の部分や、ドライバーのコードがオープンになっていないコネクターを直すのはなかなかの手間でした。JDBC系の多くのコネクターがJulianからGregorianのカレンダースイッチ(1582月10-05日~1582月10日14)以前の日付を正常に扱えないバグを途中見つけたのですが個別に直していくのは時間がかかりました。Hudi)を開発するチームに移りました。年の後半に組織の改変がありGalaxyというTrinoをSaaSとして提供する組織内にチームは所属しています。このチームも以前のチームと同様に必要があればエンジンも修正します。TYPEを僕は追加しました。expressionに変換するパーサーを書いたりしました。チームを移って知識の幅が広がったのがとても良かったです。このチームに移ってから2度ポーランドに出張する機会があり、ずっとオンラインでのみやり取りしてきたメンバーと遂に会うことができました。2度目の出張ではCOVID-19にかかって帰国後は大変でしたが2回とも良い経験でした。workTrinoのメンテナーとして、チームのメンバー以外からも来るPRのレビューもする必要があるのでこれをどうバランスを取るのを日々気にかけながら進めています。2022年はtrinodb/trinoリポジトリの自分自身のコミット数およびマージしたコミット数が共に2番目でした。数だけが重要な訳ではもちろんないですが、スピードは落とさず来年はより複雑な機能の開発や様々な領域のレビューに取り組んでいきたいです。recapTrinoで2022年に追加された新機能を紹介します。他にも多くの機能が追加されていますがメジャーなものに絞りました。functionsは聞き慣れないかもしれませんが、スカラー関数とは違って複数の行や列を返却できる関数のことです。BigQueryおよびMongoDBが実装しています。関数の性質上、クエリをリモートに実際に実行する前に結果のカラム名とタイプを取得する必要があります。runして取得、MongoDBは内部的に管理している_schemaコレクションから取得といった流れになっています。JDBCコネクターを使用する人が多そうなのでもう少し内部的な実装を説明すると、ResultSetMetaDataを取得する必要があるのでDDLなどは基本的にはサポートされていません。"基本的には"と書いたのはJDBCドライバの実装依存だからです。oのようにラップしています。そのため対象のデータベースが生成されたクエリを実行できない場合もあります。oなどはエラーになるDBが多いでしょう。(DefaultQueryBuilder)なのでコネクターを自身で開発されている方は適宜変更することも可能です。pathがサポートされ、これまでよりシンプルに複雑なJSONを分析することが可能になりました。pathを使用したjson_exists関数の例を説明します。以下のようなテーブルがあったとします。10)というパスを使用できます。statementが追加されました。現時点では以下のコネクターでサポートされています。TYPEが今年は追加されました。Tardigrade)です。リトライのポリシーにはQUERYとTASKの2種類があります。QUERYは失敗時にクエリ全体、TASKは個々のタスクレベルでリトライを行います。managerを有効にしてTASKリトライポリシーを使用することが推奨されています。現在サポートされているコネクターは以下の通りでBigQuery向けの開発が現在進んでいます。Lake、MariaDBおよびHudiコネクターが追加されました。LakeコネクターはStarburstで元々開発されていたものがオープンソース化されました。(MemSQL)コネクターを使っている方が多かったのですが、Compatibilityの乖離も徐々に進んできて分けた方が良いと判断のもと新しく追加されました。HudiコネクターはOnehouseの方が追加したのですが、DDLは実行できないなど機能としてはかなり制限されており今後の改善が必要な状態です。以上、2022年にTrinoで追加された機能を紹介しました。時間があれば個別の機能に関する詳細なポストを書きたいと思います。ここ数年は毎年Trinoに関するイベントを開催していたのですが、今年は自分が出張や組織変更等で忙しかったこともあり開催できませんでした...。来年はできればオフラインもしくはハイブリッドで開催したいと考えています。