RedashのPostgresのデータから、クエリの最新結果の行数を取りたい。でもそのままでは行数はわからない query_resultsのdataカラムに、各クエリの結果のデータが入っており、dataカラムはJSON的な「文字列」が入っている
例
{"rows": [{"name": 2}, {"name": 1}], "columns": [{"type": "integer", "friendly_name": "name", "name": "name"}]}
つまり、rowsのぶぶんをうまくパースしたら、最新データの行数がわかっちゃうわけだ。
パースの仕方はドキュメントをよしなに読む。なお今回はJSON結果をさらにパースしたかったので、jsonb
とjson
をあわせが消した。
https://www.postgresql.jp/document/9.4/html/functions-json.html
SELECT queries.id, queries.name, runtime, -- 実行時間 json_array_length((query_results.data::jsonb->>'rows')::json) AS ROWS -- データの行数 FROM (SELECT id, name, LATEST_QUERY_DATA_ID FROM queries WHERE id IN (query_ids)) queries LEFT OUTER JOIN (SELECT * FROM query_results) query_results ON queries.LATEST_QUERY_DATA_ID = query_results.id