by shigemk2

当面は技術的なことしか書かない

RedashのPostgresのデータから、クエリの最新結果の行数を取りたい

RedashのPostgresのデータから、クエリの最新結果の行数を取りたい。でもそのままでは行数はわからない query_resultsのdataカラムに、各クエリの結果のデータが入っており、dataカラムはJSON的な「文字列」が入っている

データ構造の定義

{"rows": [{"name": 2}, {"name": 1}], "columns": [{"type": "integer", "friendly_name": "name", "name": "name"}]}

つまり、rowsのぶぶんをうまくパースしたら、最新データの行数がわかっちゃうわけだ。

パースの仕方はドキュメントをよしなに読む。なお今回はJSON結果をさらにパースしたかったので、jsonbjsonをあわせが消した。

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