📊
Tableau metadata apiでテーブルとダッシュボードの関係を洗い出す
はじめに
Tableau metadata apiは皆さん使っていますか?
僕はつかっていなかったんですが、作成したテーブルとTableauのダッシュボードの依存関係が知りたくて使ってみました。
実際に使ってみる
ここではパーソナルトークンをつかって認証しております。
パーソナルトークンを使って認証すると追加でトークンをゲットできるのでそれをつかってメタデータにアクセスします。import requests
server_url = 'https://xxxxx.com' # TableauのURL
token_name = 'Personal tokenのなまえ'
token_secret = 'Personal token'
site_id = 'TableauサイトのID'
# Tableau serverのバージョンによってVERSION部分が違うよ
auth_url = f"{server_url}/api/{VERSION}/auth/signin"
auth_payload = {
"credentials": {
"personalAccessTokenName": token_name,
"personalAccessTokenSecret": token_secret,
"site": {
"contentUrl": site_id
}
}
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.post(auth_url, json=auth_payload, headers=headers)
auth_response = response.json()
# Metadata APIアクセス用トークンをゲットする
token = auth_response['credentials']['token']
# Metadata APIのエンドポイント
metadata_url = f"{server_url}/api/metadata/graphql"
# GraphQLクエリ
query = """
{
workbooks {
name
upstreamTables {
name
schema
database {
id
name
}
}
dashboards {
name
upstreamTables {
name
}
}
}
}
"""
# ヘッダーにトークンを追加
headers = {
'Content-Type': 'application/json',
'X-Tableau-Auth': token
}
# クエリを実行
response = requests.post(metadata_url, json={'query': query}, headers=headers)
metadata_response = response.json()
上記のような感じで、Tableauのメタデータ情報がさくっと取得できます。あとは自由にクエリーを変更して遊んでみてください。
Tableauのgraphiqlという画面からクエリーを投げて確認できるので一日遊べますよ!
Discussion