bqからデータをとってきてtableau onlineにpublishする。

目的

read_gbqとhyper.apiを使って、Bigqueryのデータをtableau onlineにpublishするところまでを自動化したい。

全体の流れ

これをブラウザでなくpythonコードで行うことで自動でデータを更新できるようになる。

bqからデータを取ってくる

以下を実行する。

import pandas as pd
import numpy as np
query = 'SELECT Order_Date,Sales FROM `technolife-sandbox.ikegami.order` LIMIT 10'
#クエリを入力

# strベースのクエリと、project_id(ex: technolife-sandbox)が必要
data_frame = pd.read_gbq(query, 'technolife-sandbox')
nmp = data_frame.to_numpy().tolist()

pd.read_gbqを実行すると、ブラウザでGoogle Accountの認証画面が開きます。

該当のprojectにアクセス可能なアカウントでログインすると、連携認証が完了し、処理が開始されます。

Python使いのためのBigQuery連携 – Qiita

と書いてあったが、

Permission denied while getting Drive credentials.

とエラーがでた。

コマンドプロンプトで

$ gcloud auth application-default login \
    --scopes="https://www.googleapis.com/auth/drive","https://www.googleapis.com/auth/cloud-platform"

を入力することでcredentialsファイルを入手することができた。

参考:BigQueryでGoogleドライブデータへのクエリでエラーが出るときの対処 (zenn.dev)

hyper-fileに変換して、tableauonline にpublishする。

hyperapiをインストールする。

Hyper API 0.0.14751 (tableau.com)からダウンロードします。

今回はpythonを使用します。

Hyper API (Python-.whl)をダウンロードしたディレクトリで

pip install tableauhyperapi-0.0.8707-py3-none-win_amd64.whl

を入力し、モジュールをインストール。

アクセストークンの作成。

個人用アクセス トークン – Tableau

を参考にアクセストークンを作成する。

pythonのコード作成

hyper-api-samples/Community-Supported/publish-hyper at main · tableau/hyper-api-samples (github.com)

を参考にpublish.pyを作成する。

publish-hyper-file.pyの10行目に上のbqからとってくるコードを入力。

publish-hyper-file.pyの14行目 hyper_name = ‘hyperファイルの名前(任意)’

publish-hyper-file.pyの15行目 server_address = ‘https://10ax.online.tableau.com/’は自身のサイトのものを

publish-hyper-file.pyの16行目 site_name = ‘mysitename’ も自身のサイトのものを入力。

publish-hyper-file.pyの17行目 project_name = ‘ファイルを挿入したいプロジェクト名’

publish-hyper-file.pyの18行目 token_name = ‘作成したトークンの名前’

publish-hyper-file.pyの19行目 token_value = ‘作成したトークンの中身’

publish-hyper-file.pyの29行目のcolumnsの中ににhyper-fileのカラムを入力。

ex)customer Id (string) をカラムにしたいときは
TableDefinition.Column(name='Customer ID', type=SqlType.text(), nullability=NOT_NULLABLE)

publish-hyper-file.pyの60行目から63行目を

data_to_insert = tmp

に書き換える。

エラーが出る場合

カラムの型が違っている可能性が高い。

#SqlType.double()=小数
#SqlType.big_int()=整数
#SqlType.text()=文字列
#SqlType.date()=日付

最後に

今回実装したシステムは個人情報が多く、わかりやすい画像などを出すことができなかった。

Follow me!

DMP構築のご相談

お気軽にお問い合わせください

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です