見出し画像

Tabeau Hyper APIをGoogle Colabで動かしてHyperファイルの中のデータをCSVで抽出する

参考文献:https://www.tableau.com/ja-jp/developer/learning/tableau-hyper-api#tab-326375-0

はじめに

Tableauのコミュニティは気前が良い!Tableau Publicにはすごい作品がわんさかあり、ダウンロードし放題だぜ。これで俺もテクニカルなTableauを作れるぜ!

と意気揚々とワークブックをダウンロードしたけど、データソースはHyper(Tableau独自形式の抽出ファイル)になっている。元データはどこにも見当たらない。Tableau desktopでCSVのエクスポートは出来るけど加工済みのものだ。実は結構データ作成が肝になっていて、それを自分で追体験できず、アレンジもできなくてガッカリ。といった経験はありませんでしょうか?

私はたくさんあります!

ということでHyper APIを使ってHyperからデータを読み出す方法を調べましたので共有します。HyperAPIは文字通り、Hyperファイルの中身をSQLなどで操作(CRUD(Create/Read/Update/Delete))するためのTableau公式の仕組みです。今回はPythonを使ってデータを読み出すパターンです。Pythonが書けなくても問題ありません。

元ファイル、サンプルHyper、処理結果

以下は関連ファイルです。作業する人はサンプルHyperのtemp.hyperだけダウンロードしておいてください。

Google Colabを準備する。

今回はPythonを使うのにGoogle Colaboratoryを利用します。Googleによるクラウド上のPythonの実行環境です。これに関してはお手数ですが、操作方法を含めて各自で調べて下さい。

以下環境が整った前提で進めます。

  1. 新規ノートブックを作成して下さい。

  2. 左にあるフォルダ(ファイル)のアイコンをクリックしてペインを開きます。

  3. アップロードのアイコンをクリックして、先ほどダウンロードしたtemp.hyperをアップロードして下さい。

  4. 保存されるColab上のディレクトリはcontent/です。このフォルダの内容は時間が経つと削除されるので注意して下さい。

HyperAPIのモジュールのインストール

次のマジックコマンド!を実行してHyper APIのモジュールをインストールします。

!pip install tableauhyperapi

コードを実行

  1. 下記コードをコピペして下さい。必要に応じてアレンジお願いします。

  2. Shift + Enterで実行して下さい。

# ライブラリのインポート
# tableauhyperapi というライブラリが Hyper API の実体です。
from tableauhyperapi import HyperProcess, Connection, Telemetry, CreateMode, Inserter
import csv
 #Hyper  APIプロセスの開始
with HyperProcess(Telemetry.SEND_USAGE_DATA_TO_TABLEAU) as hyper:

    # temp.hyper を指定してhyperに接続
    with Connection(hyper.endpoint, 'temp.hyper', CreateMode.NONE) as connection:

        # 単純な全件SELECTのSQLを実行しています。
        # Hyperファイル内のscheme.tableはそれぞれExtract.Extractのようです。
        my_data = connection.execute_list_query("""
            SELECT * FROM "Extract"."Extract"
        """)
        print(my_data)

そのままだと横にダラダラダラッと長いデータなので適切に改行させてCSVで出力させます。またヘッダーを付けます。

# CSVファイルパスを指定
csv_file_path = '/content/data_from_hyper.csv'

# ヘッダー行を定義
headers = [
    "FINAL_OBJECT", "OBJECT_NAME", "DEPENDENCY_NAME", "DEPENDENCY_TYPE", 
    "START_NODE_LEVEL", "END_NODE_LEVEL", "DRILL_DOWN_FLAG", 
    "START_NODE_ID", "END_NODE_ID", "PATH", "Range"
]

# CSVファイルにデータを書き込む
with open(csv_file_path, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    # ヘッダー行の書き込み
    writer.writerow(headers)
    for row in my_data:
        writer.writerow(row)

実行すると結果が、data_from_hyper.csv というファイルが左側のフォルダペインのcontent/の下にできているので右クリックでダウンロードして下さい。

いかがでしたでしょうか。今回のデータはCSVに単純変換できるものでしたが、場合によってはうまくいかないかもしれません。ChatGPTに聞いて都度対応して下さい。また、HyperAPIには今回のようなREADだけでなく、Create, Update, Deleteなどもできますので、公式ドキュメントを調べてトライしてみて下さい。

これで悔しい思いを少しでもせずに済めば幸いです。

以上

この記事が気に入ったらサポートをしてみませんか?