Tableau Metadata APIを使ってみよう!

2021/03/16 15:41 Shingo 0 Comments

 


Tableau Server/Onlineには各種API機能がありますが、今日はあまり目立たない存在のMetadata APIについて取り上げたいと思います。なかなか便利なAPIですのでTableau Server管理者やコンテンツ管理者の方はぜひご一読ください。


Tableau Metadata APIとは、こちらのヘルプに概要が書かれていますが、ワークブックやデータソースのつながりを、APIを通じて取得できるものです。データカタログの機能を持つData Management Add-onと同じタイミングでリリースされましたが、実はAdd-onライセンスがなくてもこのAPIは使えます

利用するにはサーバでの準備が必要です(Tableau Onlineは常にONなので準備不要)。まずバージョンが2019.3以上のサーバを利用していること、そしてサーバでmetadata-servicesがアクティベートされていることです。アクティベートしていないと、API呼び出し時にこんなエラーがでます。



管理者ユーザでサーバにログインし、以下のコマンドを打って機能をアクティベートしましょう。
tsm maintenance metadata-services enable

しばらくするとメタデータAPIサービスが起動されます。



GUIでAPIが有効になったかを確認しましょう。Metadata APIはGraphiQLという技術を使っており、UIも搭載しています。Tableau ServerのURLの後半を変更してUIを呼び出します(リンク等がないので手動でURL欄に打ち込んでください)

http://(またはhttps://)サーバ名/metadata/graphiql/


表示された画面でGraphQLクエリを記述することにより、メタデータ検索が行なえます。
左側のペインに試しに以下を打って再生ボタンを押してみましょう。最初に表示されているコメントは全部消してしまってOKです。

query{
  workbooks{
    name
  }
}




右側にサーバ上のワークブック名がずらっと出てくるはずです(このサーバでは2つしかブックがないため2つだけ表示)

このGUIを使って自分が欲しい情報を、GraphQLクエリを使って取ってくることができます。補完機能が充実しているので手打ちで色々試すと面白いですよ。GraphQLはオブジェクト間のつながりをもとにデータを芋づる式に取ってきますので、例えばサーバにパブリッシュされたワークブックの全カラムを取ってきて、そのカラムに紐付いているワークブックをとってきて、等をクエリとして書いていきます。参照可能なオブジェクトを補完機能が教えてくれます。例えば「workb」と打つだけで、ワークブックを取るための候補が出てきます。名前が取りたければ中括弧のあとにnameと入れれば出力されます。


試しに以下を貼り付けて実行してみてください。そのサーバにある「ワークブックの名前とオーナー」から「そのワークブックが参照しているデータソース」と「そのワークブックが参照しているデータベース」の名前を出し、さらに「データベースのテーブルの名前」も出します。

query{
  workbooks {
    id
    name
    owner {
      id
      name
    }
    upstreamDatasources {
      id
      name
    }
    upstreamDatabases {
      id
      name
      connectionType
      tables {
        name
        columns {
          name
          remoteType
        }
      }
    }
  }
}


管理者が調べたいタイミングでGUIを使って調べるのでも十分有用だと思いますが、APIを使う方はこういう作業も自動化したいと思うはずです。その場合はAPIを直接叩きましょう。動作をわかりやすくするためにCURLで叩いていきます。
まずはREST APIと同じようにサーバにログインしてトークンをもらいます。RESTのでのトークンももらい方はこちらを参照してください。



そのトークンを使ってPOSTでAPIにクエリを投げます。このとき注意が必要なのはクエリの最初に「{“query”:」をつける必要があることです。ヘルプにもあまり記載がないのですが、本家GraphQLの方に注意が書いてあったりします。curlで投げるときは必要に応じてダブルクォーテーション等をエスケープしましょう。先程GUIで使ったクエリの先頭に「{“query”:」をつけて、ボディで渡します。

curl "http://<サーバ名>/api/metadata/graphql" -X POST -H "X-Tableau-Auth: <トークン>" -d "{ \"query\": \"query { workbooks { name }}\"}"


戻り値もJSONです。「{“data”:}より後に検索結果が返ってきています。GUIと同様、2件返ってきました。

長いクエリならファイルに保存して呼び出すこともできます。別ファイルにする際にはエスケープは必要ありませんが、先頭に「{“query”:」と入れる必要があることは変わりません。上で使った長めのクエリをquery.jsonとして保存しました。

そのファイルを使ってクエリを実行してみます。さらに、結果をリダイレクトしてファイルに保存してみましょう。
curl "http://<サーバ名>/api/metadata/graphql" -X POST -H "X-Tableau-Auth: _<トークン>" -d @query.json>kekka.json


保存したJSONファイルをTableau Desktopで可視化してみます。
こんな形で可視化ができました。

可視化はおまけでやってみましたが、データソースを管理する方であれば「このテーブルを使っているワークブックを全部知りたい」等の要望が多くあると思います。Metadata APIを使えば効率的に調査や管理ができるはずです。ぜひご活用ください!





0 コメント: