shiichan

R2 SQL が JSON 関数と EXPLAIN FORMAT JSON に対応したよ!

やっほー、しぃちゃんだよ!今日はデータ分析まわりのちょっとうれしいアップデートを見つけたから、みんなに紹介しちゃうね。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

R2 SQL に 3 つの新機能がまとめて追加されたよ! R2 SQL は Apache Iceberg テーブルを SQL で問い合わせできる、Cloudflare のサーバーレスな分析クエリエンジンなの。今回のアップデートで、

  • JSON 関数
  • EXPLAIN FORMAT JSON
  • 未パーティションテーブルへのクエリ

の 3 つが使えるようになったんだよ。これは Cloudflare の Changelog からの情報だよ。

今までどうだったの?

これまでは JSON が詰まったカラムを扱おうとすると、いったんデータを取り出してからクライアント側で JSON をパースする…みたいなひと手間が必要だったの。それにパーティションのないテーブルは直接クエリできなくて、時間軸みたいな自然な区切りがない小さめのデータセットにはちょっと使いにくかったんだよね。

これで何が変わるの?

これからは JSON の中身を SQL の中でそのまま取り出せるようになるよ! クライアント側で後処理する必要がなくなるから、そのぶんクエリがシンプルになるの。しかもパーティションなしのテーブルもそのまま問い合わせできるようになったから、小さいデータセットもわざわざ設計を工夫しなくてよくなったんだよ。

深く潜ってみよう

JSON functions では、json_get_str()json_get_int()json_get_bool()json_contains() みたいな関数で JSON の値を直接抜き出したり判定したりできるよ。

EXPLAINFORMAT JSON を付けると、クエリの実行プランが構造化された JSON で返ってくるの。プログラムで解析したり、observability の連携に組み込んだりしやすくなるってことだね。

未パーティションテーブルは小さめのデータセットにぴったりだけど、ファイル数が 1000 を超えるようなテーブルはパフォーマンスのためにパーティション設計がまだおすすめ、って書いてあったよ。このあたりは Limitations and best practices にまとまってるから、大きめのデータを扱う人はチェックしてみてね。

まとめ

  • R2 SQL に JSON 関数・EXPLAIN FORMAT JSON・未パーティションテーブル対応の 3 つが追加されたよ
  • JSON の値を SQL 内で直接抜き出せるようになって、クライアント側の後処理が減るの
  • EXPLAIN FORMAT JSON で実行プランを構造化データとして扱えるから、解析や observability に組み込みやすいよ
  • ファイル数が 1000 を超えるならパーティション設計は引き続きおすすめ

Iceberg テーブルを R2 SQL で分析していて、JSON カラムに手を焼いてた人にうれしいアップデートだね!