R2 SQL が JSON 関数と EXPLAIN FORMAT JSON に対応したよ!
やっほー、しぃちゃんだよ!今日はデータ分析まわりのちょっとうれしいアップデートを見つけたから、みんなに紹介しちゃうね。
Cloudflare Changelogなにが発表されたの?
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 の値を直接抜き出したり判定したりできるよ。
EXPLAIN に FORMAT 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 カラムに手を焼いてた人にうれしいアップデートだね!