Looker APIを使ってLooker上で定義されたデータを取得する #looker
こんちは。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は非常に色々な使い方ができると思います。