Skip to main content

Posts

Migrate Hive tabes to Iceberg in Trino

Trino version 411 introduced 'migrate' procedure in Iceberg connector. This procedure coverts the existing Hive tables with ORC, Parquet & Avro format to Iceberg table. This article explains the details of the procedure. If you execute CREATE TABLE AS SELECT statement to convert Hive to Iceberg, I would recommend trying this procedure. The procedure will be much faster because it doesn't rewrite files.  The procedure accepts 3 arguments (schema_name, table_name and optional recursive_directory). The possible values for recursive_directory argument are true, false and fail. The default value is fail that throws an exception if the nested directory exists under the table or partition location.   CALL iceberg.system.migrate(schema_name => 'testdb', table_name => 'customer_orders', recursive_directory => 'true');  Let me explain the details of the implementation next.  Generate Iceberg schema object based on Hive table definition Iterate ove...

Throw back 2022

Starburst 2021年の8月23日にStarburstに入社して1年以上経ったのでその記録もかねて2022年の振り返りです。以前はTrinoに既にコントリビュートしている人が入社してきている印象がありましたが最近は入社してから初めてPRを送る人もよく見かけるので会社としてのフェーズの変化を感じます。 開発する機能によってOSSか社内版かが決まるのですが、僕はほぼフルタイムでTrinoにコミットしています。数年前はOSSのフルタイムコミッターに対する憧れが自分にはあったのですが、実際になってみるとチームにはメンテナーは自分の他にもう1人しかいないので、その人が休暇をとると自分のコードがコミットできず時々困る場面があります。そういった際はPRのレビューにあてる時間を長くしたりして都度調整しています。 Connectors team 入社当時はStarburst EnterpriseのConnectorsチームというSaaS、JDBC、NoSQL系のコネクターを開発するチームに所属していました。チームの名前からはコネクターの開発のみを行う印象を受けますが、必要に応じてエンジンにも手を入れます。例えばALTER TABLE ... SET PROPERTIESやTRUNCATE TALEなどの新しいシンタックスは僕が追加しました。コネクターによって気をつけるポイントは異なるのでそれらについて満遍なく学べたことは良かったです。例えばSaaS系のコネクターは自分達のコードが変わっていなくてもSaaSサービス側の変更で期待とは異なる動作に繋がることがあるので、パッと見では冗長とも見えるほど多くのテストコードを書く必要があります。JDBC系のコネクターではJDBCドライバーの標準になっている部分の開発は比較的楽なのですが、タイプマッピングなど実装依存の部分や、ドライバーのコードがオープンになっていないコネクターを直すのはなかなかの手間でした。JDBC系の多くのコネクターがJulianからGregorianのカレンダースイッチ(1582月10-05日~1582月10日14)以前の日付を正常に扱えないバグを途中見つけたのですが個別に直していくのは時間がかかりました。 Lakehouse team 2022年3月23日からはLakehouseチームというHadoopエコシステム系...

Trino enhancements in 2022

Trinoで2022年に追加された新機能を紹介します。他にも多くの機能が追加されていますがメジャーなものに絞りました。 Polymorphic table functions Polymorphic table functionsは聞き慣れないかもしれませんが、スカラー関数とは違って複数の行や列を返却できる関数のことです。例:  SELECT * FROM TABLE(my_function(1, 100)); テーブルを引数に取れないなど内部的にはまだ未実装の部分もありますが、クエリをパススルーする関数がJDBC系コネクター、Elasticsearch, BigQueryおよびMongoDBが実装しています。関数の性質上、クエリをリモートに実際に実行する前に結果のカラム名とタイプを取得する必要があります。JDBCはPrepared StatementでResultSetMetaDataから取得、Elasticserachは取得が難しいので現状は1カラム1レコードにJSONを詰め込む形の実装、BigQueryはクエリをdry runして取得、MongoDBは内部的に管理している_schemaコレクションから取得といった流れになっています。 JDBCコネクターを使用する人が多そうなのでもう少し内部的な実装を説明すると、ResultSetMetaDataを取得する必要があるのでDDLなどは基本的にはサポートされていません。"基本的には"と書いたのはJDBCドライバの実装依存だからです。DDLに関してはTable functionではなくProcedureで実装される予定です  #12322 。次に内部的には完全にパススルーしている訳ではなくSELECT * FROM (...) oのようにラップしています。そのため対象のデータベースが生成されたクエリを実行できない場合もあります。例えばSELECT * FROM (SHOW DATABASES) oなどはエラーになるDBが多いでしょう。これらはあくまでデフォルトの実装 (DefaultQueryBuilder)なのでコネクターを自身で開発されている方は適宜変更することも可能です。 関連リンク Diving into polymorphic table functions with Trino Tabl...

Team Towa

10月9日からシンガプーラの男の子を飼い始めました。8月4日生まれなので約2ヶ月の仔猫です。初日に寝室にケージを置いて、鳴き声がひどい時に2回ほど出してあげたのですが、次の日にシーツが濡れていてなんだろうと思い匂いを嗅いでみるとおしっこでした...。幸い日曜日だったので熱湯でマットレスを殺菌したりコインランドリーで洗濯できたので不幸中の幸いでした。初日はケージから出さない方が良いというのは聞いてましたが、こういったことを防ぐためにも重要なんだなと感じました。2日目以降はトイレを失敗することはなく元気に暮らしています。性格は今のところとにかく遊びたがりでこちらが止めない限りずっと遊んでいます。 現在働いているStarburstでは入社時の自己紹介でTeam dogもしくはTeam cat(犬好きか猫好きか)を共有する文化があります。僕が入社した際はタイムゾーンの問題で自己紹介のスライドに間に合わず聞かれなかったのですが、この度晴れてTeam catに入りました。在宅勤務なので仕事中に遊んでスイッチが入ると大変な場面もありますが、大きくなったらこんなに遊んでくれないかもなという思いもあり出来るだけ一緒に遊んでいます🐱

Hawaii 2022

9/15~23にハワイに行ってきたのでその記録です。前半はシェラトン、後半はワイキキビーチコマーに泊まりました。色んなお店でご飯を食べましたが、RumFireのステーキが一番美味しかったです。ダウンタウンで軽い雨が降ってましたがそれ以外は天気も良くて気持ちよかったです。またそのうち行きたいです。 ヒルトンからの景色 ワイキキビーチ RumFireのステーキ RumFireのグリル野菜 サンドバー マラサダ ウルフギャングのステーキ ウルフギャングのサラダ ウルフギャングのティラミス ハワイシアター ダウンタウン スターオブホノルル ステーキ SHACK ビーチコマーの朝食 ポリネシアンカルチャルセンター BASALT ホールフーズ Arancino at The Kahala ハウツリー コウカンチョウ

Presto Conference Tokyo 2019

7/11に開催されたPresto Conference Tokyo 2019について書こう書こうと思いつつ放置していたところ、ちょうど3ヶ月後の10/11にコミッターになったので、ご報告もかねて下書きを開きました。この記事では当日話そうと思ってスライドから削った部分や最近のコミュニティについて書きたいと思います。 現在 Presto Software Foundation (PSF)とPresto Foundationという2つの組織があり、前者はPrestoを最初に作り始めたクリエイター達および Starburst のメンバーを中心に、 Arm Treasure Data 、 Varada 、 Qubole などその他にも多くの企業・開発者から支持されながら運営されています。後者はFacebookを中心にTwitter, Uber, Alibabaが支持していて、Linux Foundationにホストされることが先日発表されました。こう書くとどららを選ぶべきか悩むかもしれませんが、前者の方が開発の速度は早くコミュニティが非常に活発に動いてるので、特別な理由がなければPSF側のPrestoを使用することやコミュニティへの参加をお勧めします。Facebook側のリポジトリやSlackも見るようにしているのですが、対応が遅く残念な気持ちになります。メーリングリストは両者で同じアドレスが使用されているのですが、回答者の多くはPSFのコミュニティメンバーなのでSlackで直接質問するとすぐ回答を得られます。 PSFのSlackにはこちらのページにあるリンクから参加できます。 https://prestosql.io/slack.html チャンネルは結構多くて戸惑いそうですが、個人的にお勧めするチャンネルは以下の通りです。 #troubleshooting #generalで質問しても問題ないのですがトラブル等はこちらで質問すると素早く回答を得ることができます #community-announcement ミートアップなどの情報がポストされます #dev 開発に興味がある方はぜひ! #general-jp 日本語で気軽に話せるチャンネルです 実際に開発に参加しなくても、もっと日本からコミュニティに参加してくれる方が増えてくれるとと...

Matsushima 2019

7月に休みをとって宮城の松島海岸に1泊2日で旅行してきました。いつも一人で旅行に行くときは本を持っていくのですが、今回は本屋で目にとまった「 マチネの終わりに 」と共に。恋愛小説を読むのは初めてでしたが、いわゆるドロドロとした内容で読んでいて辛い部分もありつつも先が気になる展開が続き、結局初日の夕ご飯前には読み切ってしまいました。作中で何度か出てくる「未来は常に過去を変えている」という文章がとても心に残っています。良かった思い出がふとしたきっかけで悲しい思い出になったり、その逆もあったりしますもんね。ギタリストと国際ジャーナリストの恋愛ということもあり、芸術、イラク情勢、原爆やサブプライムローンなど様々な話題が散りばめられていて、読んだあとに自分でもう一度学びたいと感じる本でした。11月1日には映画が公開される予定とのことで、できれば初日に観に行きたいなぁと思っています。 松島湾 福浦橋 福浦島 遊覧船からの眺め 松島自体は初日は小雨が降っていて少し残念でしたが綺麗なアジサイの写真が撮れて満足です。行きの新幹線と仙台駅でご飯を食べ過ぎたこともあり早めにホテルへチェックインしてのんびりしてました。2日目は朝露天風呂に入っていたら松島湾が眩し過ぎて目がちゃんと開かないぐらいには天気が良かったです。チェックアウトしてからは海岸通りをぶらぶらして福浦島に向かいました。木が生い茂っていてちょっとしたジャングルみたいで散策を楽しめました。松島湾を1周する遊覧船に乗ろうと思ってたのですが、受付の方に仙台方面に戻るのであれば電車が少ないので塩川港まで行くルートがお勧めですよと教えていただき、そっちに乗ってみました。最後に仙台駅でお寿司を食べて新幹線で帰宅です。お寿司以外にもたくさん美味しいもの、牛タン、穴子、牡蠣、笹かまぼこ、ずんだジェラート、ずんだシェイクなどなどを食べて終始満腹でした。