TableauからHiRDBに接続する(第3回)

# はじめに

### HiRDB Version 10 10-09

2025年1月リリースのHiRDB Version 10 10-09から正式にTableauに対応しました。

https://www.hitachi.co.jp/Prod/comp/soft1/hirdb/files/topics/index.html#hirdb_1009

これまでの検証をもとに、Dialectなどを新規に作成し、テストにより品質を確保した製品版のコネクターをHiRDBに同梱しています。本記事の後半では製品版のコネクターの使用方法などを解説しています。

# 本題

前回、コネクターの主要な構成ファイルであるDialectとManifest file(capabilityを記述するファイル)を作成しました。

https://qiita.com/Hitachi_Kazuaki/items/7525e9f6bd87a0d4d711

コネクターの完成には残りの構成ファイルの作成と構成ファイルのTACOファイルへのパッケージ化が必要になります。
<br>
第1回でご説明した通り、コネクターの作成には以下の手順が必要です。

手順1:Tableau Connector SDKをインストールする
手順2:設定用ファイルを作成する
手順3:テストツールによりTableauとDBの接続～クエリなどの処理が実行できることを確認する
手順4:作成したファイルをパッケージ(TACOファイル)にまとめる

<br>
第2回までで、手順2のManifest file(capability)とDailectファイルの作成まで行いました。

今回は以下を行いコネクターを完成させていきます。
・接続時の画面のカスタマイズに関するファイルなど残りの構成ファイルの作成（上記の手順2）
・作成したファイルのパッケージ化（上記の手順4）

コネクターの完成後、HiRDBに接続し正しく動作するか確認します。

# 残りの構成ファイルを作成する

残りのファイルはいくつかありますが、特に重要で接続時画面のカスタマイズに関わる「connectionFields」と接続時画面で入力された値に基づき、DB接続用のJDBCのURLを作成する「connectionBuilder」について作成・確認していきます。
#### コネクターの主要な構成ファイル
<table>
            <tr>
              <th align="center">ファイル</th>
              <th>役割</th>
            </tr>
            <tr>
              <td>Manifest file&emsp;&emsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue">✓</td>
              <td>コネクターの名前や、コネクター・DBの仕様についてTableauに連携する</td>
            </tr>
            <tr>
                <td>Tableau Dialect file <font color="blue">✓</td>
                <td>Tableau側からDBのデータを取得する際のSQLの記述を定義</td>
              </tr>
            <tr>
              <td>Connector Resolver file&emsp;</td>
              <td>設定用スクリプトの呼び出しなどを行う</td>
            </tr>
            <tr>
                <td>connectionFields &nbsp;&nbsp;&nbsp;<font color="red">※</td>
                <td>コネクションダイアログで受け取る入力情報について設定</td>
            </tr>
            <tr>
                <td>connectionBuilder&nbsp;&nbsp;<font color="red">※</td>
                <td>JDBC利用時のURL作成</td>
            </tr>
</table>

<font color="red">※今回の説明対象
<font color="blue">✓第2回で作成

「Connector Resolver file」などについては、PostgreSQL用のものでHiRDBの接続に必要な最低限の情報は揃うので代用可能です。今回はお試し版ということでPostgreSQL用のコネクターのものを代用して検証を進めていきます。

実際の内容は下記URLを参照してください。

https://github.com/tableau/connector-plugin-sdk/tree/master/samples/plugins/postgres_jdbc

### 接続に関するカスタマイズ

TableauからDBに接続する際、以下のような画面が表示されユーザー名など接続に必要な情報を入力します。

コネクターの構成ファイルであるconnectionFieldsなどを編集することで、追加の入力情報を受け付けられるようにするなど、カスタマイズすることが可能です。

![signin4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/95b4d9c5-bd65-480c-8c80-ff78a95f473e.png)

<p>こちらもお試し版としてはPostgreSQL用のもので代用可能なため、PostgreSQL用のconnectionFieldsで検証を進めていきます。</p>
        <p>今回使用したPostgreSQL用コネクターのconnectionFieldsは以下になります。</p>

https://github.com/tableau/connector-plugin-sdk/blob/master/samples/plugins/postgres_jdbc/connectionFields.xml

### 接続時のJDBCに関するファイル

第1回でご説明したように、TableauからDBへの接続はTableau側の処理をコネクターによりSQLへ変換し、DBに対し実行することで行われます。

![jdbc2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/592c8e1f-0355-4209-a8f0-6ad66a813182.png)

コネクターの変換により得られたSQLはJDBCを介してDBに渡されます。
そのため、JDBC利用時のURLの組み立てに関する設定用ファイルも作成する必要があります。

JDBC利用時のURLの組み立てはコネクターの構成ファイルである、connectionBuilderで行われます。

connectionBuilderはTableauからDBに接続する際に入力された情報をもとに、JDBC利用時のURLを組み立てます。接続時に入力された、接続先のホスト名とポート番号をもとにURLを組み立てる場合は以下のようになります。

```connectionBuilder.js
(function dsbuilder(attr) {
    var urlBuilder = "jdbc:hitachi:hirdb://DBID=" + attr[connectionHelper.attributePort] 
                    + ",DBHOST=" + attr[connectionHelper.attributeServer];
    return [urlBuilder];
})
```

接続時に入力されたポート番号、接続先ホスト情報をそれぞれHiRDBにおけるJDBC利用時のURLの要素であるDBID、DBHOSTの指定値として代入されるように文字列を結合させています。

https://itpfdoc.hitachi.co.jp/manuals/3020/3020656090/W5600578.HTM

<br>
先程の接続時の画面との関係は下の通りで、Serverの項目に入力したものがJDBC接続時URLのDBHOSTに、Portに入力したものがDBIDにそれぞれ設定されます。

![connect_url.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/1ef8be92-7793-4545-8e10-17c052c95233.png)

 Usernameなどに入力した値についてはJDBC接続時のURLには直接使用されず、内部的に接続時の処理などに使用されます。

<br>
その他、カスタマイズできる要素もありますが、お試し版コネクターとしてはひとまず構成ファイルの作成は完了です。

# コネクターのパッケージ化

<p>ここまで作成してきたファイルを専用のツールによりパッケージ化していきます。</p>
<p>詳細な手順は公式ページをご参照ください。</p>

https://tableau.github.io/connector-plugin-sdk/docs/package-sign

### 手順1.環境の構築

Tableau Connector SDKやPythonなど必要なソフトをインストールします。
インストールしたTableau Connector SDKの配下にあるconnector-packager内に、venvコマンドで仮想環境を作成します。

```:venvコマンド
> python -m venv .venv
```

作成した仮想環境を有効化します。

```:activateコマンド
> .¥.venv¥Scripts¥activate
```

pipコマンドで必要なパッケージをインストールします。

```:pipコマンド
> pip install -e .
```

### 手順2.パッケージ化
コネクターの構成ファイルがそろっていることを確認し、次のコマンドを実行することでパッケージ化されたコネクターが作成されます。

```:パッケージ化
> python -m connector_packager.package [コネクターの構成ファイルの格納フォルダのパス]
```

### 完成

パッケージ化されたコネクターは、connector-packager下のpackaged-connectorフォルダに作成されます。

「.taco」の形式で作成されていることが確認できました。
        
![packcaged.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/5a39aa6c-f00a-4cd5-9ef1-221ad6830dc9.png)

これでコネクターが完成しました。続いて、実際にコネクターを使ってみます。

# 接続してみる
### 製品版

冒頭で記載の通り、本記事の作成中に製品版としてのコネクターが完成しリリースされましたので、製品版のコネクターを使って接続していきます。

### 環境
なお、今回の環境は以下の通りです。クライアントとサーバーについては同一マシン上に構築しています。
・HiRDB Server Version 10 10-09
・Tableau 2024.1.0

※TableauやHiRDBのバージョンにより手順が異なる場合があります。

### 手順1.コネクターの格納
HiRDBに同梱のコネクターを以下の場所に格納します。
「C:¥Users¥[Windows ユーザー]¥Documents¥My Tableau Repository¥Connectors」

![connector_folder2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/56cf76ff-3ce3-43e0-b53b-f0894780b63c.png)

### 手順2.JDBCドライバの格納
続いて、同じくHiRDBに同梱されているType4 JDBCドライバを以下のフォルダに格納します。
「C:¥Program Files¥Tableau¥Drivers」

![jdbc_folder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/339396c2-14ad-45d0-b92a-d2bb8748bf6c.png)

### 手順3.サインイン
Tableauを起動します。

Tableau起動後の画面左側に接続先を選択するバーが表示されます。バーの「サーバーへ」の「その他…」を選択すると利用可能なコネクターの一覧が表示されます。

その中から、使用したいコネクター（今回は「HITACHIによるHiRDB JDBC」）を選択します。
接続に必要な情報を入力する画面が表示されます。

![signin3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/fb012b61-d3c0-4ff5-8f98-59f247c900d6.png)

以下を入力し「サインイン」を押下することでHiRDBに接続することができます。

<table>
                <tr>
                  <th width="35%">項目</th>
                  <th>指定内容</th>
                </tr>
                <tr>
                  <td>Server</td>
                  <td>接続先HiRDBのIPアドレス、PDHOSTに相当するもの</td>
                </tr>
                <tr>
                    <td>Port</td>
                    <td>接続先HiRDBのポート番号、PDNAMEPORTに相当するもの</td>
                  </tr>
                <tr>
                  <td>データベース</td>
                  <td>Tableauの画面上に表示したいデータベース名称</td>
                </tr>
                <tr>
                  <td>Username</td>
                  <td>HiRDB接続時のユーザー名、PDUSERに相当するもの</td>
                </tr>
                <tr>
                    <td>Password</td>
                    <td>上記ユーザーのパスワード</td>
                </tr>
                <tr>
                    <td>HiRDB.iniの格納ディレクトリ</td>
                    <td>HiRDB.iniによるクライアント環境変数を定義したい場合、HiRDB.iniの格納ディレクトリを指定</td>
                </tr>
                <tr>
                    <td>接続先HiRDBサーバの文字コード</td>
                    <td>接続先HiRDBサーバの文字コードについて入力する場合に指定</td>
                </tr>
            </table>

接続に成功すると、接続先DBについての情報やテーブルの一覧が表示されます。

![connect3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896270/3f66011c-fd7b-4d10-b88c-55e9674540b7.jpeg)

接続に成功し、テスト用に作成したテーブルなどが表示されていることを確認できました。

分析したいテーブルを画面中央部にドラッグ＆ドロップすることで、データの可視化や分析など様々な操作を始めることができます。

# 次回
実際にTableauを操作し、HiRDBに格納されているデータの可視化や分析を行ってみます。

# 商標など
Tableauは、Salesforce, Inc.の商標です。

PostgreSQLは、PostgreSQL Community Association of Canadaのカナダにおける登録商標およびその他の国における商標です。

"Python" is a registered trademark of the Python Software Foundation.

その他記載の会社名、製品名は、それぞれの会社の商標もしくは登録商標です。
製品の改良により予告なく記載されている仕様が変更になることがあります。

# 参考
https://github.com/tableau/connector-plugin-sdk/tree/master/samples/plugins/postgres_jdbc

https://www.hitachi.co.jp/Prod/comp/soft1/hirdb/files/topics/index.html#hirdb_1009

https://itpfdoc.hitachi.co.jp/manuals/3020/3020656090/W5600578.HTM

https://tableau.github.io/connector-plugin-sdk/docs/package-sign