[TiDB] 各種BIツールからTiDB Serverlessへの接続方法

# はじめに

TiDB ServerlessにはTiFlashがあるので、データ分析にも活用できます。
ここではBIツールからTiDB Serverlessに接続する方法について説明します。

## TiDB Serverlessの準備

### クラスタの作成
データベースが無いとはじまらないので適当なデータベースを作ります。クラスタを作成して、
右下の？メニューから、`Interactive Tutorials`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/85522b61-7c11-bdff-912b-75cfa9bc39d9.png)

`S&P 500 Analysis`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/7c7141d4-4872-e229-b005-b0d40840fe27.png)

データをインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/85230c43-2e35-aa3e-bf59-7fa35d1a783e.png)

データがインポートできたら以降のチュートリアルはスキップして構いません。

### 接続情報の取得
クラスタのOverviewに戻り、`connect`ボタンを押して接続情報を表示します。
パスワードを生成して、`Operating System`でWindowsを選択してください。

:::note
最新の接続画面では、CAファイルがダウンロードできるようになっています。
この機能を利用するためにOperating SystemをWindowsにします。
:::

CAファイルのダウンロードリンク（画像の赤丸部分）から、CAファイルを忘れずにダウンロードしてください。
![スクリーンショット 2023-12-13 9.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/6bc6b6b8-8a72-1eae-deb3-8463d0b5bcfa.png)

TiDB側の準備はこれで完了です。


## LookerStudioからTiDB Serverlessへの接続

[LookerStudio](https://lookerstudio.google.com/)はGoogleアカウントがあれば利用できる無料のBIツールです。利用者も多いのではないでしょうか。

トップ画面からブランクレポートを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/635e793e-bfc1-92a9-f18e-b0aa69ca349e.png)

データソースではMySQLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/9c316b8e-3ed2-2974-82a1-ceddf82eff3c.png)

接続情報画面で、ホスト名、ポート、ユーザー名、パスワードを指定し、SSLを有効にしてCAファイルをアップロードします。
![スクリーンショット 2023-12-13 9.38.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/0ea51112-3e7b-f99a-1c54-734267885a5e.png)

Authorizationがうまくいったら、CUSTOM QUERYで下記のSQLを貼り付けてデータソースを作成します。
```sql
SELECT sector,
       COUNT(*)                                                                      AS companies,
       ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC )                                   AS companies_ranking,
       SUM(market_cap)                                                               AS total_market_cap,
       ROW_NUMBER() OVER (ORDER BY SUM(market_cap) DESC )                            AS total_market_cap_ranking,
       SUM(revenue_growth * weight) / SUM(weight)                                    AS avg_revenue_growth,
       ROW_NUMBER() OVER (ORDER BY SUM(revenue_growth * weight) / SUM(weight) DESC ) AS avg_revenue_growth_ranking
FROM companies
       LEFT JOIN index_compositions ic ON companies.stock_symbol = ic.stock_symbol
GROUP BY sector
ORDER BY 5 ASC
```

後はデータソースを元にグラフを作成するだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/7d1ea482-ef94-f6e5-79c3-95ceb0f4f367.png)

## TableauからTiDB Serverlessへの接続

[Tableau Desktop](https://www.tableau.com/products/desktop)からTiDB Serverlessに接続します。MacOS上で試しています。

### ドライバのインストール

Tableau DesktopからMySQLに接続するためには、iODBCドライバとMySQL ODBCドライバをインストールする必要があります。それぞれ、下記のサイトからダウンロードしてインストールします。

* iODBC - https://www.iodbc.org/dataspace/doc/iodbc/wiki/iodbcWiki/Downloads#Mac%20OS%20X
* MySQL ODBCドライバ - https://dev.mysql.com/downloads/connector/odbc/

:::note alert
Apple SiliconのMacを使っている人も、X86用のドライバをダウンロードしてください。ARM版には下記のバグがありました。
https://community.tableau.com/s/question/0D58b0000AfZtGhCQK/mysql-versions-older-than-411-are-not-supported-by-this-version-of-tableau
:::

### 接続設定

MySQLを選択して、ホスト名、ポート、データベース、ユーザー名、パスワードを設定します。
SSLを有効にして、CAファイルを指定します。
![スクリーンショット 2023-12-13 14.37.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/e81ce0e3-0ff2-788c-8f13-4ca83c9069ec.png)


### クエリ

カスタムクエリでLooker Studio同様のクエリを設定し、ワークシートに移ってグラフを作成します。
![スクリーンショット 2023-12-13 14.45.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/c59a07d0-d58f-a2f4-fa8a-9d3225a0f434.png)

## PowerBIからTiDB Serverlessへの接続

[PowerBI Desktop](https://powerbi.microsoft.com/ja-jp/downloads/)で試しています。

### ドライバのインストール

MySQLに接続するためには、[Connector/Net](https://dev.mysql.com/downloads/connector/net/)のインストールが必要です。ダウンロードしてインストールします。

PowerBIで、`データを取得`から`MySQL データベース`を選択します。
![mysql.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/9f9b9ad0-999f-e2ec-190e-6d4e4617f55a.png)

### 接続設定

MySQLの接続を設定します。
1. ホスト名、データベース名を指定して、詳細設定で前述のクエリを設定します。
1. 資格情報では、`データベース` を選択して、ユーザー、パスワードを入力します。

![mysql4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/efe5e3c8-b126-2ef7-523a-5b7428fc457b.png)

### 利用

接続できたら、後は通常のデータソース同様に操作できます。
![mysql3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/d2f5dfc9-af1b-55d5-31a5-d434f18bae07.png)


## QuickSightからTiDB Serverlessへの接続

:::note alert
2023年12月現在、QuickSightからTiDB Serverlessに接続することはできません。
（TiDB Dedicatedは可能です)
::: 

QuickSightのMySQLアクセス(TLS)は、認定済みのCAから発行された証明書を利用している必要があります。
https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/configure-access.html#ca-certificates
これにはLet's EncryptのCAは含まれていないため、残念ながら現状ではTLS接続が必須のTiDB Serverlessに接続することはできません。

PowerBIも一緒だと思うのですが、　PowerBIはLet's Encryptの証明書に対応しているようなので、同じように対応してほしいところです。