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

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

## なにが発表されたの？

[R2 SQL](https://developers.cloudflare.com/r2-sql/) に 3 つの新機能がまとめて追加されたよ！ R2 SQL は [Apache Iceberg](https://iceberg.apache.org/) テーブルを SQL で問い合わせできる、Cloudflare のサーバーレスな分析クエリエンジンなの。今回のアップデートで、

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

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

## 今までどうだったの？

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

## これで何が変わるの？

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

## 深く潜ってみよう

[JSON functions](https://developers.cloudflare.com/r2-sql/sql-reference/scalar-functions/#json-functions) では、`json_get_str()`・`json_get_int()`・`json_get_bool()`・`json_contains()` みたいな関数で JSON の値を直接抜き出したり判定したりできるよ。

[EXPLAIN](https://developers.cloudflare.com/r2-sql/sql-reference/#explain) に `FORMAT JSON` を付けると、クエリの実行プランが構造化された JSON で返ってくるの。プログラムで解析したり、observability の連携に組み込んだりしやすくなるってことだね。

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

## まとめ

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

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