以下の記事でAzure Data Catalogでやったような機能追いをGCPのData Catalogでも行ってみました。
2020/08/21時点の内容なのでご注意ください。
GCP Data Catalog
こちら、GCPで使う限りにおいては、BigQueryとは自動で連携してくれたり、DLPとも連携していたり、ポリシータグ利用できたり便利なのですが、3rd Party製品との連携はどのようになるかMySQLを例に使って機能追ってみました。
利用するデータ
こちらを利用します。
サンプルDB動かすまでの手順はこちらの記事と同じです。
メタデータの登録方法
まず、メタデータの登録ですが、Azureの場合はGUIのツールが提供されていて、ある程度簡単に登録ができました。
GCPでの以下のリポジトリから自分でソースをダウンロードして、インストールして動かす必要があります。
今から手順を追っていきますが、先に書いてしまうと普通のエンジニアならできない話では無いですが、簡単とは言えない手順でした。
取り込みツールは以下のリポジトリから利用できます。。
書いている時点で以下のような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'
とりあえず試したいので、エラー部分だけ直してツールを実行する手順にします。
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が入っているだけです。
スキーマ情報は入っています。タグ付けて検索などにも使えます。
データベース名のタグがついていますが、本当に最低限です。
検索は使いやすそう
Gmailの技術を使っていると書いてありますが、検索は良さそうです。
所謂オープンデータと呼ばれている、一般公開データセットをシームレスに連携できるのも面白いです。以下にはcovid19のデータが見えています。
まとめ
DLPとの連携含め、BigQueryとの連携をするにはとても使えるのですが、3rd Partyとの連携に関しては現時点ではテクニカルなメタデータが入ってくるだけとういう、かなり限定的な機能という印象でした。