TIL: Struct and Row Types

これに触発されて TIL をつけてみる試み。基本的にはぐぐったリンクを書いておくだけなので読む人にとってはノイズですが、他に良い置き場所が思いつかないので。


DuckDB や BigQuery には Struct という type がある。

これは表面的には JSON type と似ているが、型が決まっている。したがって columnar storage だと個々の primitive values が column になるのが便利。BigQuery とかはそもそも出自が Protobuf の columnar database で, struct は proto と似たようなものである。ZetaSQL を見ても proto と struct は似たような扱いを受けている。

この便利な機能は Postgres にもあるのかなと調べてみると、composite type というらしい。Postgres は columnar ではないので別に JSON でも大差ない気もするけど、型がある嬉しさはある、のではなかろうか。たとえば index を作れるとか。

ふと JSON type には index 作れないのかなと調べてみると, GIN (全文検索) としてインデクスできるようである。