32
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

以下の情報は、今日現在(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 とサービス - 認証情報

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 にキャッシュされたデータ)から検索をすることになります。

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 よりサポートがされているようです。

Google Sheets:
  Support for Team Drive.

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

32
19
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
32
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?