Azure Data CatalogにBigQueryのデータをRegistration Toolを使って登録する

# やりたいこと

BigQueryに登録したテーブルも[Azure Data Catalog](https://azure.microsoft.com/ja-jp/services/data-catalog/)に登録したい。

# 作業環境

- Windows Server または Windows 10
- Azure Data Catalog Registration Toolがインストール済み
- Google Cloud SDKがインストール済み

# 手順

## BigQuery向けODBCドライバーインストール
以下からインストーラーがダウンロードできます。

https://cloud.google.com/bigquery/providers/simba-drivers

画像のようなインストールが起動します。選択肢はインストール場所程度のなので、手順は省略します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/dae61221-9ece-47bc-55df-a8205906e0ea.png)


## Credentialファイルの取得
権限のあるユーザで以下のコマンドを実行します。

```sh
gcloud auth application-default login
```

ログの中に以下のような表示があると思いますが、このJSONファイルの場所と中身の情報をメモします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/43bf3c87-beb2-e6ed-740c-b6c1806ae2bf.png)

```
C:\Users\Administrator\AppData\Roaming\gcloud\application_default_credentials.json
```

```json
{
  "client_id": "xxxxxx.apps.googleusercontent.com",
  "client_secret": "xxxxxx",
  "quota_project_id": "your-project-name",
  "refresh_token": "xxxxxxxx",
  "type": "authorized_user"
}
```

## ODBCの接続文字列を準備
取得した情報を元に接続文字列を作成します。

|項目|値|備考|
|:--|:--|:--|
|Catalog|your-project-name|GCPプロジェクト名|
|OAuthMechanism|0|今回はServiceAccountでのアクセスを利用|
|Email|xxx.apps.googleusercontent.com|Credential JSONファイルの `client_id` の項目|
|KeyFilePath|C:\Users\xxxxx\AppData\Roaming\gcloud\application_default_credentials.json|上の手順で取得したCredential JSONファイルのパス|

上記の表から以下のような文字列を作成します。

```sh
OAuthMechanism=0;Catalog=your-project-name;Email=xxx.apps.googleusercontent.com;KeyFilePath=C:\Users\xxxxx\AppData\Roaming\gcloud\application_default_credentials.json
```

## Registration Toolの起動
Registration ToolにODBCがあるので、これを使ってBigQueryからODBC経由でカタログデータを取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/f5359f1e-db9a-badc-4513-2bb3dc08abf3.png)

ODBCデータベースを選択するとパラメータの入力画面に遷移します。そこで今までの情報合わせ以下のようにパラメータ入力します。

|項目|入力値|
|:--|:--|
|ドライバー|Simba ODBC Driver for Google BigQuery|
|接続文字列|上の手順で作成したODBC接続文字列|
|データベース|GCPプロジェクト名|
|ユーザ|Credential JSONファイルの `client_id` の項|
|パスワード|Credential JSONファイルの `client_secret` の項目|

実際に入力した画面は以下のようになります。「接続」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/cda72899-4cfb-d63e-454b-7fe059989e30.png)

いつものテーブル選択の画面になります。
BigQueryの場合はプロジェクト>データセット>テーブルという階層構造になります。

データプロファイルの取得は現時点（2020/11/28）では動かないようでした。原因と思われる部分は記事の最後に書いてます。

※ちなみにカタログ収集しているテーブルはSAP ERPのテーブルです。前に社内の検証環境から持ってきたものです。この辺りは[こちらのブログ](https://www.beex-inc.com/blog/sap-erp-pandas-bigquery/)に書いてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/a8da9497-204b-4832-88d9-0ec6fa0d38ad.png)

無事に同期完了しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/d83c6c9d-477b-d574-cbb5-bfa29abb884a.png)


## Azure DataCatalogで確認
データベース名がGCPのプロジェクト名になってしまうのが少し違和感ありますが、基本的なカタログ情報の取得はできました。
ちなみに、取得しているのは(こちらの記事)[https://www.beex-inc.com/blog/saperp-load-bigquery/]で取得したSAP ERPのものです。

なおBigQueryのデータセットはスキーマ名としてマッピングされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/acfb1829-cbe7-5e16-6124-e6bba3ae7276.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/04129e92-a142-7086-7d2b-25b4c4343160.png)

同様の情報ですがBigQuery上では以下のように見えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/ce149ad5-e6dc-701a-af51-ce8dcf5b3ad1.png)


# Tips
## BigQuery用のODBCドキュメントの場所
以下のインストールフォルダにあるものがBigQueryのODBCドキュメントです。ドライバのダウンロードページにあるものは汎用的なものでBigQueryの接続文字列パラメータ等の情報が記載ありませんでした。

```
C:\Program Files\Simba ODBC Driver for Google BigQuery
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/7479299e-df83-d134-98b4-e4ff90a26526.png)

## 「プロファイルを含める」オプションのエラー
`プロファイルを含める` オプションを有効にすると、列毎の統計情報などが取得できるのですが、発行されているSQLのSyntaxがBigQueryと合って無くエラーになってしまっています。
サポート対象のDBにBigQueryが入っているわけでも無く、たまたまODBCで一部データが取れる状態なので、このあたりはしょうが無い気もします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/76b02e3a-da3c-f262-c34e-391a7d304dd6.png)





# 関連記事

- [Azure DataCatalogの使い方書いた記事](https://yomon.hatenablog.com/entry/2020/08/azure_data_catalog)
- [AWS DataCatalogへの接続](https://qiita.com/yomon8/items/ed11fa751d4b820f6e07)