GCP Data CatalogをMySQLと連携して3rd Party対応時の機能を追ってみた

以下の記事でAzure Data Catalogでやったような機能追いをGCPのData Catalogでも行ってみました。

yomon.hatenablog.com

2020/08/21時点の内容なのでご注意ください。

GCP Data Catalog

こちら、GCPで使う限りにおいては、BigQueryとは自動で連携してくれたり、DLPとも連携していたり、ポリシータグ利用できたり便利なのですが、3rd Party製品との連携はどのようになるかMySQLを例に使って機能追ってみました。

cloud.google.com

利用するデータ

こちらを利用します。

dev.mysql.com

サンプルDB動かすまでの手順はこちらの記事と同じです。

yomon.hatenablog.com

メタデータの登録方法

まず、メタデータの登録ですが、Azureの場合はGUIのツールが提供されていて、ある程度簡単に登録ができました。

GCPでの以下のリポジトリから自分でソースをダウンロードして、インストールして動かす必要があります。

今から手順を追っていきますが、先に書いてしまうと普通のエンジニアならできない話では無いですが、簡単とは言えない手順でした。

取り込みツールは以下のリポジトリから利用できます。。

github.com

書いている時点で以下のようなRDBMSに対応しているようです。

  • MySQL
  • PostgreSQL
  • SQLServer
  • Redshift
  • Oracle
  • Teradata
  • Vertica
  • Greenplum
  • CSV など

メタデータの登録手順

まず、以下の権限を持ったサービスアカウントを用意します。

  • DataCatalog entryGroup オーナー
  • DataCatalog 管理者

鍵を以下にダウンロードしておきます。

 ~/.config/gcloud/datacatalog_admin_credentials.json

次に取り込みツールのリポジトリをダウンロードしてきます。

git clone https://github.com/GoogleCloudPlatform/datacatalog-connectors-rdbms.git

# MySQL用コネクタのディレクトリに移動
cd datacatalog-connectors-rdbms/google-datacatalog-mysql-connector

Dockerfileが提供されているので、Dockerイメージをビルドします。

docker build -t mysql2datacatalog .

# 省略

Successfully tagged mysql2datacatalog:latest

本当はこのビルドしたイメージを直接実行すればMySQLのデータをData Catalogに登録できるはずなのですが、以下のようなエラーが出ました。

  File "/usr/local/lib/python3.7/site-packages/google/datacatalog_connectors/rdbms/prepare/datacatalog_entry_factory.py", line 149, in __format_entry_column_type
    formatted_name = source_name.replace('&', '_')
TypeError: a bytes-like object is required, not 'str'

https://github.com/GoogleCloudPlatform/datacatalog-connectors-rdbms/blob/89fdfa254f/google-datacatalog-rdbms-connector/src/google/datacatalog_connectors/rdbms/prepare/datacatalog_entry_factory.py#L149

とりあえず試したいので、エラー部分だけ直してツールを実行する手順にします。

ENTRYPOINT上書きしてBashでイメージに入ります。

GOOGLE_APPLICATION_CREDENTIALS=~/.config/gcloud/datacatalog_admin_credentials.json

docker run --rm -it \
-v ${GOOGLE_APPLICATION_CREDENTIALS}:/data/mysql2dc-credentials.json \
--entrypoint /bin/bash  mysql2datacatalog

sedで修正パッチ当てます。

sed -i -e "s/source_name\.replace/source_name\.decode\(\)\.replace/" /usr/local/lib/python3.7/site-packages/google/datacatalog_connectors/rdbms/prepare/datacatalog_entry_factory.py 

取り込みツールを実行します。

MY_GCP_PROJECT_ID=yusuke-otomo
MY_GCP_LOCATION_ID=asia-northeast1
MY_PC_IP=172.31.xxx.xxx
google-datacatalog-mysql-connector \
--datacatalog-project-id=${MY_GCP_PROJECT_ID} \
--datacatalog-location-id=${MY_GCP_LOCATION_ID} \
--mysql-host=${MY_PC_IP} \
--mysql-user=root \
--mysql-pass=root \
--mysql-database=sakila  

ツールが提供されているといっても、少しコード見る必要があったり、結構面倒な手順ではありました。

データカタログの内容を確認してみる

データカタログにMySQLのメタデータを入れたので見ていきます。

まずプロパティ情報ですが、最低限なイメージです。

外部URLも先程入れたPCのIPが入っているだけです。 f:id:yomon8:20200821210023p:plain

スキーマ情報は入っています。タグ付けて検索などにも使えます。 f:id:yomon8:20200821211037p:plain

データベース名のタグがついていますが、本当に最低限です。 f:id:yomon8:20200821210123p:plain

f:id:yomon8:20200821210139p:plain

検索は使いやすそう

Gmailの技術を使っていると書いてありますが、検索は良さそうです。

所謂オープンデータと呼ばれている、一般公開データセットをシームレスに連携できるのも面白いです。以下にはcovid19のデータが見えています。

f:id:yomon8:20200821210402p:plain

まとめ

DLPとの連携含め、BigQueryとの連携をするにはとても使えるのですが、3rd Partyとの連携に関しては現時点ではテクニカルなメタデータが入ってくるだけとういう、かなり限定的な機能という印象でした。

関連URL

qiita.com