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?

More than 3 years have passed since last update.

LookerAdvent Calendar 2020

Day 24

LookerSDKを使ってローカル環境からSQLを実行してみた

Last updated at Posted at 2020-12-23

やったこと

  • ローカル環境からLookerAPIを使ってSQLを流して結果を受け取る

背景

  • データ分析をする際にいちいちcsvダウンロードするのはちょっとだるいので作業が生まれる前に消し去りたい
  • SDKがあるならさらに楽ができるかも

用意するもの

  • Python
  • LookerSDK

準備

Looker Api SDK

公式説明
https://docs.looker.com/reference/api-and-integration/api-sdk

GitHub
https://github.com/looker-open-source/sdk-codegen/tree/master/python

とりあえずインストール

pip install looker_sdk

認証

### 環境変数設定
os.environ['LOOKERSDK_API_VERSION']='3.1'
os.environ['LOOKERSDK_BASE_URL']='https://xxxxxxxx.looker.com:19999'
os.environ['LOOKERSDK_CLIENT_ID']='xxxxxxxxxxxxxxxxxxxx'
os.environ['LOOKERSDK_CLIENT_SECRET']='xxxxxxxxxxxxxxxxxxxxxxxx'

### 認証
sdk = looker_sdk.init31() 
my_user = sdk.me()
print('####################')
print(my_user["first_name"])
print('####################')

iniファイルを読み込むやり方もあるらしいけども

スクリーンショット 2020-12-22 19.50.21.png

できた!SDKが認証情報を環境変数から読みとっってくれる模様。

ローカルからLooker経由でSQLを流して結果を取得するぞ!

どこから調べればいいか。。。

とりあえずリファレンスを眺めてみる。。。。と

スクリーンショット 2020-12-22 20.05.53.png
リンク

おおおおおおっっっ!?APIのリファレンスでSQL Runnerっていうものがありますね。それっぽい!

スクリーンショット 2020-12-22 20.13.04.png

どうやらBETA版みたいですね。(2020/12/23時点)
変わったら変わったでとりあえずGoGo!!

さてどうやっていくか

恐らく使えるモジュールはこんな感じ
image.png
リンク

  • サンプルコードないので、ちょっと苦しい。

  • リファレンスを見てみるとどうやら該当する部分の操作は以下のものであるようだ

    • クエリを登録
    • クエリの取得
    • クエリの実行
  • おそらくキューに入れて実行する仕組みのようだ。キューは下記で確認できる

  • ネットで探してみる限りsdkからAPIのURLに該当するメソッドを持ってくるらしい。

    • これはリファレンスの中に入っている。
    • ただ引数はどうすればいいか
      • SqlQueryCreateで作成するっぽい
        • SqlQueryCreate
          • model_name
            • よくわからない。ただ、modelの文字列を入れたら動くようになった
          • sql
            • 説明割愛

クエリの登録

from looker_sdk import methods31, models31

# APIの引数を作成
SQL = "select * from xxxxxxx limit 10"

query = models31.SqlQueryCreate( model_name="xxxxxxxx",sql="select * from public.xxxxx limit 10")
# クエリを実行
result = sdk.create_sql_query(body=query).slug

どうやら、looker_sdkの中にAPIのバージョンに対応したモジュールがあるらしい。
今回は3.1なのでそれに該当するものを選択

クエリの実行

sdk.run_sql_query(result,"csv",True)
  • run_sql_query

    • 第一引数(必須)
      • クエリを登録した時に取得できるクエリの文字列
      • 実行するクエリを指定
    • 第二引数(必須)
      • 出力のファイル形式を指定
      • CSV以外にも,jsonやtxtなどでも出力できるらしい
    • 第三引数(任意)
      • ダウンロード有無を指定
      • デフォルトはfalseでダウンロード無し
    • 戻り値
      • ダウンロードしたときはバイナリで帰ってくる
  • SQLを投げて空のものが帰ってきたときはここをチェックしてください。

    • https://xxxx.looker.com/admin/queries
    • キューに入れて実行のような仕組みっぽいのでログが見えます。
    • API上からだとSQLがコケたと言おうことがわからなそうということ

バイナリで帰ってくるのでバイナリで保存してあげると使えるようになります

fw = open('result.csv', 'wb')
fw.write(sdk.run_sql_query(result,"csv",True))
fw.close()

おわりに

正直、LookerをローカルからSQLを実行して嬉しい人っていうのは割とすくないかもとおもってしまっているところはありました。
多くの人はダッシュボード見るし、欲しけりゃBigQueryをpandasでつなげばいいじゃん勢も出てきそうなので、今回調べたもののメリットの大部分はSDKの使い方の様な気がしてなりません。Lookerの資産を使いつつ、Looker上で扱うにはあまりにも複雑だったり頻繁に変わるようなクエリについてはこのようにSDKを経由してSQLで取得→分析を自動的に回す仕組みを構築することに意義があるものだと思います。

参考文献

認証key取得

公式説明

looker-open-source(github)

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?