0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Redashに「別のクエリの結果をテーブルとして参照できる」機能があるのを知った話

0
Posted at

はじめに

最近業務でRedashを触っていて、今まで知らなかった機能に気づいたので紹介します。

それが Query Results という機能です。

Query Resultsとは

Query Resultsは、Redash上で作成したあるクエリの実行結果を、別のクエリの中でテーブルのように扱える機能です。

Redashでは、クエリを作成すると必ず一意のIDが振られます。このIDを使うことで、あるクエリの結果を、まるでデータベースの1つのテーブルであるかのようにSQLで参照できるようになります。

しかも面白いのは、参照先のクエリが元々使っていたデータソースと、今書いているクエリのデータソースが違っても構わないという点です。例えば「MySQLの結果」と「BigQueryの結果」をJOINする、といったこともできてしまいます。

基本の書き方:query_{queryID}

使い方はシンプルで、query_{queryID} という名前をテーブル名の代わりに書くだけです。

SELECT a.name, b.category
FROM query_100 AS a
JOIN query_500 AS b
  ON a.id = b.id

これは、IDが 100 のクエリの結果と、IDが 500 のクエリの結果をJOINしている例です。

ここでポイントなのが、query_100 と書いた場合は参照先のクエリが実際に(再)実行されるという点です。つまり、参照元のクエリを実行するたびに、参照先のクエリも毎回走ることになります。

キャッシュを使う:cached_query_{queryID}

参照するたびに毎回クエリが実行されると、当然ながら実行時間がかかりますし、BigQueryのようなスキャン量課金のデータソースだと、その分コストもかかってしまいます。

そこで登場するのが cached_query_{queryID} という書き方です。

SELECT a.name, b.category
FROM cached_query_100 AS a
JOIN cached_query_500 AS b
  ON a.id = b.id

query_ の部分を cached_query_ に変えるだけで、参照先のクエリを再実行せず、直近の実行結果(キャッシュ)を使うようになります。

これにより

  • クエリの実行時間が短縮される
  • BigQueryなど従量課金のデータソースであれば、余計なスキャンが発生せずコスト削減になる

というメリットがあります。

query_cached_query_ は混在できる

もう1つ地味に便利なのが、この2つの書き方は1つのクエリの中で混在させられるという点です。

SELECT a.name, b.category
FROM query_100 AS a
JOIN cached_query_500 AS b
  ON a.id = b.id

「片方は常に最新の状態で見たいけれど、もう片方はマスタ的なデータであまり変わらないのでキャッシュで十分」といったケースで使い分けができます。

まとめ

  • Redashには Query Results という、クエリの結果を別のクエリから参照できる機能がある
  • query_{queryID} と書くと、参照先のクエリが実行され、その結果をテーブルとして使える
  • cached_query_{queryID} と書くと、直近の実行結果(キャッシュ)を使うため、高速化やコスト削減につながる
  • query_cached_query_ は同じクエリ内で混在させることも可能

異なるデータソース同士のデータを組み合わせて集計したいときに、地味に強力な機能だと思うので、知らなかった方はぜひ試してみてください。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?