📊

Tableau metadata apiでテーブルとダッシュボードの関係を洗い出す

2025/02/19に公開

はじめに

Tableau metadata apiは皆さん使っていますか?
https://www.tableau.com/ja-jp/developer/tools/metadata-api

僕はつかっていなかったんですが、作成したテーブルとTableauのダッシュボードの依存関係が知りたくて使ってみました。

実際に使ってみる

ここではパーソナルトークンをつかって認証しております。
https://help.tableau.com/current/server/ja-jp/security_personal_access_tokens.htm
パーソナルトークンを使って認証すると追加でトークンをゲットできるのでそれをつかってメタデータにアクセスします。

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という画面からクエリーを投げて確認できるので一日遊べますよ!

GitHubで編集を提案

Discussion