Data Catalog PostgreSQL コネクターを使用する

こんにちは、香田です。

今回はData Catalog PostgreSQL コネクターを使用するする方法について紹介していきます。

Data Catalogという名前の製品は複数存在してますが、今回紹介するのはGCPで提供されているData Catalogになります。

Data Catalogについて

はじめにData Catalogについて簡単に紹介すると、

Data CatalogはGCPで提供されているフルマネージドなメタデータ管理サービスで、メタデータ操作のためのUIやAPIアクセスを提供しており、データの検索、タグ付けなどをサポートしています。

GCPで提供されているBigQuery、Pub/Sub、Cloud StorageなどGCP データセットのメタデータ管理が可能です。GCP 以外のメタデータも対応しており、オープンソースのコネクターを使うことでRedshift、PostgreSQL、Hiveなどのメタデータ取り込みにも対応しています。

詳しくは下記のData Catalogの概要を参照してみてください。

検証用 PostgreSQL 環境の作成

まずはData Catalog PostgreSQL コネクターを検証できるよう、DockerでPostgreSQL環境を用意していきます。

下記のdocker-compose.ymlを用意します。

version: "3.3"
services:
  postgres:
    image: postgres:12
    container_name: postgres
    environment:
      - POSTGRES_PASSWORD=postgres
    ports:
      - "5432:5432"

PostgreSQLコンテナを起動します。

docker-compose up -d

検証用のサンプルデータベースをPostgreSQL Tutorialのサイトよりダウンロードします。

サイト内のPostgreSQL Sample Databaseへアクセスし、[Download DVD Rental Sample Database]をクリックします。

ダウンロードしたzipファイルを解凍します。

unzip dvdrental.zip

データベースを作成します。

export PGPASSWORD=postgres
psql -h 127.0.0.1 -U postgres -c "CREATE DATABASE dvdrental"

サンプルデータベースをリストアします。

pg_restore -h 127.0.0.1 -U postgres -d dvdrental ./dvdrental.tar

GCP サービスアカウントキーの作成

次にData Catalog PostgreSQL コネクターで利用するGCP サービスアカウントキーを作成します。

GCPコンソール画面より[IAMと管理]の[サービスアカウント]より[サービス アカウントの作成]をクリックします。

[サービスアカウント名]を入力し作成します。[DataCatalog 管理者]のロールを選択しアクセス権を付与し[完了]をクリックします。

作成したサービスアカウントを選択し、[鍵を追加]、[新しい鍵を作成]、キーのタイプとして[JSON]を選択し、サービスアカウントキーを作成します。

Data Catalog PostgreSQL コネクターのインストール

次にData Catalog PostgreSQL コネクターをインストールします。

python -m venv venv
source venv/bin/activate
pip install google-datacatalog-postgresql-connector

Data Catalog PostgreSQL コネクターのインストール確認

google-datacatalog-postgresql-connector --help

Data Catalog PostgreSQL コネクターの実行

次にData Catalog PostgreSQL コネクターを実行していきます。

コネクター実行時に利用する環境変数を設定します。

export GOOGLE_APPLICATION_CREDENTIALS="<サービスアカウントキー>"
export POSTGRESQL2DC_DATACATALOG_PROJECT_ID="<gcp project_id>"
export POSTGRESQL2DC_DATACATALOG_LOCATION_ID="<gcp location_id>"
export POSTGRESQL2DC_POSTGRESQL_SERVER=127.0.0.1
export POSTGRESQL2DC_POSTGRESQL_USERNAME=postgres
export POSTGRESQL2DC_POSTGRESQL_PASSWORD=postgres
export POSTGRESQL2DC_POSTGRESQL_DATABASE=dvdrental

Data Catalog PostgreSQL コネクターを実行します。

google-datacatalog-postgresql-connector \
--datacatalog-project-id=$POSTGRESQL2DC_DATACATALOG_PROJECT_ID \
--datacatalog-location-id=$POSTGRESQL2DC_DATACATALOG_LOCATION_ID \
--postgresql-host=$POSTGRESQL2DC_POSTGRESQL_SERVER \
--postgresql-user=$POSTGRESQL2DC_POSTGRESQL_USERNAME \
--postgresql-pass=$POSTGRESQL2DC_POSTGRESQL_PASSWORD \
--postgresql-database=$POSTGRESQL2DC_POSTGRESQL_DATABASE

GCPコンソール画面より[Data Catalog]へアクセスします。

検索ボックスへ[system=postgresql]と入力し[検索]をクリックすると下記のように表示されるとはずです。

テーブルに絞って検索する場合、下記のように選択するとこで絞り込み可能です。

検索クエリの詳細については下記を参考にしてみてください。

クリーンアップ

Data Catalog PostgreSQL コネクターの実行によって作成された、Data Catalogのタグ テンプレート、エントリ グループを削除していきます。

タグ テンプレート 削除

gcloud beta data-catalog tag-templates delete postgresql_table_metadata \
--location=<gcp location_id> --force --quiet

gcloud beta data-catalog tag-templates delete postgresql_column_metadata \
--location=<gcp location_id> --force --quiet

gcloud beta data-catalog tag-templates delete postgresql_schema_metadata \
--location=<gcp location_id> --force --quiet

エントリー グループ 削除

for i in $(gcloud beta data-catalog entries list \
    --entry-group postgresql \
    --location=<gcp location_id> \
    --format=json | jq -r .[].name); do

    gcloud beta data-catalog entries delete $i \
        --entry-group=postgresql \
        --location=<gcp location_id> \
        --quiet
done

gcloud beta data-catalog entry-groups delete postgresql \
--location=<gcp location_id> \
--quiet

最後にPostgreSQL コンテナを削除しクリーンアップ完了です。

docker-compose down --volumes

さいごに

Data Catalog PostgreSQL コネクターを使用するする方法いかがでしたでしょうか。

PostgreSQL コネクター以外にもData Catalogのコネクターは下記リポジトリに公開されている為、目的に応じて使用してみては如何でしょうか。

Data Catalog PostgreSQL コネクターを使用する上で本記事が参考になれば幸いです。

最後までご覧いただきありがとうございます。

SNSでもご購読できます。