Posted at

Redash と Google Spreadsheet を連携する (2019年9月版)

以下の情報は、今日現在(2019/09/30)の情報になります。

Redash では Google Spreadsheet と連携することが可能です。

公式ドキュメントにも手順は記載されていますが ( https://redash.io/help/data-sources/querying/google-spreadsheet ) 、そちらの内容 +α をここでは書きます。


事前作業


  • Google アカウントの用意

  • Redash の用意

  • Redash で読み込みたい Google Spreadsheet の用意


    • Team Drive 配下に置いた場合、 v8.0.0-beta 以降でないと読み込めない(後述)



この辺は割愛。


Google Compute Engine の Service Key を払い出し

Redash と Google Spreadsheet の連携には、 GCP から払い出した Service Key が必要です。


API とサービス - 認証情報

https://console.cloud.google.com/apis/credentials

Google にログインした状態で上記ページにアクセスすると、Service Key の作成画面に遷移します。

image.png

事前に GCP の Project を作成していない場合は、上記画面から作成をし、Project を選択状態にします。

image.png


認証情報を作成

Service Key を作成する場合は、上記の画面上の「認証情報を作成」をクリックして、「サービスアカウントキー」を選択します。

image.png


サービスアカウントキーの作成

作成画面でサービスアカウントを発行するプロジェクトを選択します。

キーのタイプは「JSON」を指定します。

image.png

この画面で作成ボタンを押下すると、Service Key 情報が含まれた JSON ファイルがダウンロードされます。こちらのファイルはとても大事で、セキュリティ的にも重要なので、他人が閲覧できないような場所に保存をしておきます。


Google Spreadsheet の共有設定

上記で払い出した Service Key 経由で Google Spreadsheet がアクセスできるよう、共有設定を行います。

Google Spreadsheet 右上の「共有」ボタンを押下し、先程発行した Service Key の JSON ファイルに記載されている「client_email」を共有ユーザーとして登録します。

image.png

これで、Service Key 経由で Google Spreadsheet にアクセスできるようになりました。


Redash のデータソースの設定

引き続き、上記で払い出した Service Key の情報を、Redash の Data Source に設定します。

Redash には「Google Spreadsheet」データソースが存在するため、こちらを選択します。

image.png

設定項目は以下の2つです。


  • Name


    • 任意の名前を設定します。



  • JSON Key File


    • 上記で払い出した JSON ファイルをアップロードします。



image.png

情報を入力して Save ボタンを押下すると、設定は完了です。「Test Connection」ボタンで正しく GCP と接続が行えるか、疎通確認も行えます。


Redash からクエリー実行

Redash の Query 画面を開いて、Google Spreadsheet への連携を試みます。

Google Spreadsheet と連携する際は、クエリーは SQL ではなく、以下のような書式で記述します。

(Google Spreadsheet ID)|(Sheet Number)

Google Spreadsheet ID は、Spreadsheet の URL で記載されている英数字文字列です。

例として、公式ドキュメントに記載されている例を引用します。


What is the Spreadsheet ID?

You can find your Spreadsheet ID in its URL. So for example, if the spreadsheet URL is:

https://docs.google.com/spreadsheets/d/b94d27b9934d3e08a52e52d7da7dabfac484efe37

Then the ID will be:

b94d27b9934d3e08a52e52d7da7dabfac484efe37


Sheet Number は、一番左のシートが「0」、追って右に行くごとに 「1」「2」 ... となります。

以下のようなテスト用の Google Spreadsheet を用意した場合

image.png

(Google Spreadsheet ID)|0

として Redash でクエリーした結果は以下のようになります。

image.png


Redash から条件を指定してクエリー実行

上記の手順で Redash から Google Spreadsheet の情報は取得できるようになりますが、こちらの方法だとシート上のデータをまとめて全部読み込む事しかできません。

何かしらの条件でフィルタリングしたい場合は、公式ドキュメントに記載されているとおり Query Results (すでにクエリー実行済みで Redash にキャッシュされたデータ)から検索をすることになります。

https://redash.io/help/user-guide/querying/query-results-data-source


Query Results を Data Source に設定

Query Results からデータを読み込む場合は、Query Results を Data Source として登録する必要があります。

image.png

Query Results の設定項目は一つだけ(Name)で、任意の名前を設定します。

image.png


Query Results からデータの読み込み

Query 画面で、上記で作成した Query Results をデータソースとして選択します。

Query Results からキャッシュ済みのデータを呼び出す場合は、以下のような命名規則でテーブル名を指定することで SQL を用いて呼び出すことができます。

query_(query ID)

たとえば、Query の URL が /queries/101/ となっている場合、 Query ID は 101 となり、Redash 上で指定するテーブル名は query_101 となります。

任意の Query Results テーブルからは通常の SQL で自由にデータを取得できるため、たとえば WHERE 句の指定をして以下のようにデータの絞り込みを行うことができます。

image.png

このように、 Google Spreadsheet + Query Results を組み合わせることで、自由自在にデータの加工を行うことができます。

この例以外にも Query Results は他にも応用範囲が広く、端的に言うと複数の Data Source から取得したデータを容易に JOIN することができるため、大変便利な機能です。


Issue: Team Drive 配下の Google Spreadsheet は beta 版の Redash でないと読み込めない

Redash と Google Spreadsheet の連携ですが、タイトルで書いたとおり Team Drive 配下の Spreadsheet ファイルは現時点では beta 版の Redash からしか読み込むことができないようです。

この辺については Discussion がなされており( https://discuss.redash.io/t/google-spreadsheet-not-found/3620/8 )、 Change Log を見る限りだと v8.0.0-beta よりサポートがされているようです。

https://github.com/getredash/redash/blob/master/CHANGELOG.md#v800-beta---2019-08-18


Google Sheets:

  Support for Team Drive.


ということで、ご注意ください。