Looker APIを使ってLooker上で定義されたデータを取得する #looker

Looker×機械学習も夢じゃない
2019.10.01

こんちは。DA事業本部@大阪オフィスの玉井です。

LookerはAPIが備わっており、GUIで出来ることはAPIからも操作することができます。今回はその中でも、個人的に目玉機能だと思う、「LookerにあるLookやクエリからデータを取得する」APIをご紹介したいと思います。なんで目玉機能だと思うのかは後述します。

Looker APIについて

LookerにはRESTful APIが備わっており、LookerのGUIで出来ることは、プログラム上でも実行することが可能です。

データを取得できるAPI

APIの中でも、Looker上で定義したクエリや作成したLook(Tableauでいうビューにあたる)で取得できるデータを、そのまま取得できるものがあります。自分が確認した限りでは下記が存在していました。

それぞれに割り振られているID(query_idとかlook_id)と、取得するデータの形式(csvとかjsonとか)をパラメータとして投げれば、そのクエリ等で得られるデータセットを指定した形式で取得することができます。

やってみた

環境

  • Winodow 10 Pro
  • Google Chrome 77.0.3865.90
  • Looker 6.20.10

APIを使用するための準備

APIの設定を確認する

管理者権限のユーザーで、AdminメニューからAPIを選択します。

すると、2つの設定項目があるので確認します。

API Host URL

APIのURLをどうするか、という設定です。基本的には空白でOKです(Looker側が自動で定義する)。色々な事情でLooker周辺のインフラまわりが独自なものになっている場合(ロードバランサーかましてるなど)、任意の値を入れましょう。

Documentation Access

実は、LookerのAPIはこのメニューのところにある「View API Docs」から、APIをブラウザ上で気軽に試せるページを使用することができます。この設定は、そのページを利用する前にAPIキーの認証を求めるかどうかを選択することができます。

使用したいユーザーの設定から、APIキーを出力する

上記の設定を終えたら、APIを使用するユーザーにAPIキーを発行します。そのユーザーの管理ページにいき、API3 Keysというメニューを選択します。

New API3 Keyを選択して、新しいAPIキー(Client IDとClient Secret)を発行しましょう。

Lookからデータ取得

データを取得したいLook

まず、データを取得したいLookを選びましょう。今回は下記のLookからデータを取得したいと思います。DevelopersIOの投稿数を年別に可視化した棒グラフです。うまくいけば、年と投稿数の2カラムのデータが取得できるはずです。

ちなみに、APIでデータを取得するためには本番モードに公開しておく必要があります(開発者モードのままではデータを取得できない)。

Lookのlook_idを確認する

Lookのlook_idはURLを見ればわかります。

別途、Look一覧等を取得できるAPIもあるので、そちらで確認しても大丈夫です。

パラメータを指定して実行

では、早速APIを実行してみましょう。今回はシンプルにcurlでやってみます。ちなみに取得形式はcsvを指定。

まず、アクセストークンを入手します。下記のAPIを使います。

※Windows版のcurlです。

> curl --request POST --header "Content-Type: application/x-www-form-urlencoded" "https://xxxxxxxxxx.jp.looker.com:19999/api/3.1/login?client_id=xxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxx"
{"access_token":"xxxxxxxxxxxxxxxxxx","token_type":"Bearer","expires_in":3600}

では、このアクセストークンを使って、先程紹介したAPIであるRun Lookを叩きます。

> curl --request GET --header "Content-Type: application/json" "https://xxxxxxxxxxxx.jp.looker.com:19999/api/3.1/looks/10/run/csv?access_token=xxxxxxxxxxxxxxxxxxxxxxx"
T Blogposts Post Year,T Blogposts Count
2019,3031
2018,3746
2017,2921
2016,2753
2015,1941
2014,1471
2013,1149
2012,529
2011,509

先程のLookで使用されているデータを取得することができました!

クエリを指定してデータ取得

データを取得したいクエリ

先程のLookを実行すると発行されるクエリでやってみます(だから、得られるデータとしては上記と同じになるはず)。

クエリのquery_idを確認する

Adminメニューのqueriesで、Lookerから発行されたクエリを確認することが出来ますが、そこでIDもチェックできます。

今回は、LookからExplore画面に行ってクエリを発行し直し、queriesメニューからIDを確認しました。

パラメータを指定して実行

先ほどと同様、アクセストークンを取得した上で、今度はRun Queryを叩きます。形式はJSONを指定してみます。

> curl --request GET --header "Content-Type: application/json" "https://xxxxxxxxxxx.jp.looker.com:19999/api/3.1/queries/2542/run/json?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxx"
[{"t_blogposts.post_year":2019,"t_blogposts.count":3033},
{"t_blogposts.post_year":2018,"t_blogposts.count":3746},
{"t_blogposts.post_year":2017,"t_blogposts.count":2921},
{"t_blogposts.post_year":2016,"t_blogposts.count":2753},
{"t_blogposts.post_year":2015,"t_blogposts.count":1941},
{"t_blogposts.post_year":2014,"t_blogposts.count":1471},
{"t_blogposts.post_year":2013,"t_blogposts.count":1149},
{"t_blogposts.post_year":2012,"t_blogposts.count":529},
{"t_blogposts.post_year":2011,"t_blogposts.count":509}]

問題なくデータを取得できました。

なぜこの機能(API)がすごいのか

APIを通してデータそのものを取得できるBIツールは少ない

GUI上からデータをエクスポートできるBIツールは多いと思います。しかし、これをAPIで実行できるBIツールはあまり多くはないんじゃないでしょうか(私が知らないだけの可能性は大いにあります)。しかも、Lookerの場合、LookMLを使用して、整理整頓されたデータ定義(とかダッシュボード)をキッチリ行えるので、それをプログラムから自由にアクセスできるのは非常に便利だと思います。

APIからデータを取得できる→Python上にデータをもってこれる→夢が広がる

今回はcurlコマンドで試してみましたが、もちろんSDKも用意されており、例えばPythonからLooker APIにアクセスすることも可能です。実はこれが、この機能が目玉ある所以なんです。Pythonからデータを持ってこれるということは、例えばJupyterNotebookからLooker APIを通してLooker上で定義されたデータを持ってこれば、JupyterNotebook上で、Lookerで定義されたデータに対して機械学習を行うことが出来ます。その結果をDBに送り返して、LookerでそのDBのconnectionを作っておけば(ついでにダッシュボードまで作っちゃえば)、機械学習の結果もLookerで見ることが出来ます。このループを回せば、LookerとPythonを使ったイケてる機械学習環境ができますね。

実は上記の内容は、既にLookerが公式で色々と情報公開しています。興味があればぜひごらんください。

おわりに

やったことは地味ですが、このAPIは非常に色々な使い方ができると思います。