注釈
Snowflake Connector for PostgreSQL および Snowflake Connector for MySQL は、 コネクタ規約 に従います。
Snowflakeの MySQL および PostgreSQL コネクタの操作¶
概要¶
Snowflakeデータベースコネクタの使用についてのチュートリアルへようこそ。このガイドは、リレーショナルデータベースからSnowflakeにデータをシームレスに転送するのに役立ちます。
このチュートリアルでは、次のスキルを習得します。
Dockerで MySQL と PostgreSQL を設定し、インジェスチョン用のサンプルデータを取得します。
各データベースに1つずつ、2つのネイティブアプリケーションをインストールして構成します。
各データベースに1つずつ、合計2つのエージェントを設定して微調整します。
データのインジェスチョンプロセスを開始および管理します。
データのインジェスチョンワークフローを監視します。
チュートリアルを始めましょう
前提条件¶
このチュートリアルを始める前に、次の要件を満たしていることを確認してください。
Dockerがローカルマシンにインストールされ、動作している。
データベースに接続するためのツールが用意されている。これは、データベース固有のツールでも、 IntelliJ またはVisual Studio Codeなどの汎用ツールでもかまいません。
MySQL および PostgreSQL ソースデータベースを作成する¶
このセクションでは、次のステップについて説明します。
データベースインスタンスの起動 - Dockerを使用して、 MySQL および PostgreSQL インスタンスを起動する方法について説明します。
データベースへの接続 - データベースへの接続を確立する方法を説明します。
サンプルデータのロード - サンプルデータをデータベースに取り込む方法のチュートリアルです。
データベースインスタンスの起動¶
Dockerを使用して MySQL および PostgreSQL データベースの構成プロセスを開始するには、ファイル docker-compose.yaml
を作成します。ファイルの内容は次のようになります。
services:
mysql:
container_name: mysql8
restart: always
image: mysql:8.0.28-oracle
command: --log-bin=/var/lib/mysql/mysql-bin
--max-binlog-size=4096
--binlog-format=ROW
--binlog-row-image=FULL
--binlog-row-metadata=FULL
--sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH"
environment:
MYSQL_ROOT_PASSWORD: 'mysql'
volumes:
- ./mysql-data:/var/lib/mysql
ports:
- "3306:3306"
postgres:
image: "postgres:11"
container_name: "postgres11"
environment:
POSTGRES_USER: 'postgres'
POSTGRES_PASSWORD: 'postgres'
ports:
- "5432:5432"
command:
- "postgres"
- "-c"
- "wal_level=logical"
volumes:
- ./postgres-data:/var/lib/postgresql/data
docker-compose.yaml
の準備ができたら、次のステップに従います。
ターミナルを開きます。
docker-compose.yaml
ファイルを含むディレクトリに移動します。次のコマンドを実行して、コンテナ内のソースデータベースを起動します。
docker compose up -d
このコマンドを実行すると、ソースデータベースをアクティブに実行している2つのコンテナが表示されます。
データベースへの接続¶
IntelliJまたはVisual Studio Codeのデータベース接続を使用して、事前に構成されたデータベースに接続するには、提供された認証情報を使用して次のステップを実行します。
MySQL に接続するために選択したツールを開きます。
データソースを追加するには、「+」記号などをクリックします。
接続の詳細を次のように入力します。
ユーザー:
root
パスワード:
mysql
URL:
jdbc:mysql://localhost:3306
接続をテストして保存します。
PostgreSQL に接続するために選択したツールを開きます。
データソースを追加するには、「+」記号などをクリックします。
接続の詳細を次のように入力します。
ユーザー:
postgres
パスワード:
postgres
データベース:
postgres
URL:
jdbc:postgresql://localhost:5432
接続をテストして保存します。
サンプルデータのロード¶
サンプルを初期化してロードするには、これらの接続で次のスクリプトを実行してください。
スクリプトを実行してサンプルデータを生成する
CREATE DATABASE mysql_ingest_database;
USE mysql_ingest_database;
CREATE TABLE mysql_rows(
id INT AUTO_INCREMENT PRIMARY KEY,
random_string VARCHAR(255),
random_number INT);
INSERT INTO mysql_rows (random_string, random_number) VALUES
('fukjxyiteb', 100),
('ndhbbipodi', 37),
('laebpztxzh', 83);
SELECT * FROM mysql_ingest_database.mysql_rows;
スクリプトを実行してサンプルデータを生成する
CREATE SCHEMA psql_rows_schema;
SET search_path TO psql_rows_schema;
CREATE TABLE psql_rows_schema.postgres_rows (
id SERIAL PRIMARY KEY,
a_text TEXT,
a_boolean BOOLEAN,
a_number INTEGER,
a_decimal DOUBLE PRECISION);
INSERT INTO psql_rows_schema.postgres_rows (a_text, a_boolean, a_number, a_decimal) VALUES
('QfJhyWwFuC', True, 37, 15.46),
('GwmIFgwvFy', True, 14, 13.21),
('jYvqOSEtam', True, 25, 20.85);
-- The publication is required to start the replication progress as the Connector is based on PostgreSQL Logical Replication
CREATE PUBLICATION agent_postgres_publication FOR ALL TABLES;
SELECT * FROM psql_rows_schema.postgres_rows;
入力された各データベースに3つの行が表示されます。
Native Appのインストールと構成¶
このステップでは、次を実行します。
Native Applicationsのインストール¶
次のステップに従って、Snowflake Native Apps Marketplaceからアプリケーションをインストールします。
Snowsight にサインインします。
ナビゲーションメニューで Data Products » Marketplace を選択します。
Snowflake Connector for MySQL および Snowflake Connector for PostgreSQL アプリケーションをインストールします。
両方のアプリケーションをインストールします。
インストール後、新しいアプリケーションが Data Products » Apps に表示されます。
Native Applicationsの構成¶
Snowsight にサインインします。
ナビゲーションメニューで Data Products » Apps を選択します。
各アプリケーションを開き、次を実行します。
Download Driver ` を選択し、ファイルを保存します。ファイル名は、
mariadb-java-client-3.4.1.jar
に似たものになるか、可能な場合は新しいバージョンになります。エージェント構成で使用するために、このファイルを保存します。ソースデータベースを最初から作成してデータを入力するため、 Mark all as done を選択します。
注釈
チュートリアルの後半でエージェントを構成するため、この時点では追加のネットワーク構成は必要ありません。
Start configuration をクリックします。
Configure Connector 画面で Configure を選択します。 Verify Agent Connection ページが表示されます。
Generate file を選択してエージェント構成ファイルを生成します。ファイル名は
snowflake.json
に似たものになります。このファイルを保存して、後でエージェント構成セクションで使用できるようにします。
ソースデータベースを最初から作成してデータを入力するため、 Mark all as done を選択します。
注釈
チュートリアルの後半でエージェントを構成するため、この時点では追加のネットワーク構成は必要ありません。
Start configuration をクリックします
コネクタを構成 画面で、 構成 を選択します。
Verify Agent Connection ページで Generate file を選択し、エージェント構成ファイルを生成します。ファイル名は
snowflake.json
に似たものになります。エージェント構成セクションで使用するために、このファイルを保存します。
エージェントの構成¶
このセクションでは、ソースデータベースで動作するエージェントを構成します。
最初のステップは、ディレクトリ agent-mysql
と agent-postgresql
を作成することです。
各ディレクトリ内にサブディレクトリ agent-keys
と configuration
を作成します。ディレクトリ構造は次のようになります。
.
├── agent-mysql
│ ├── agent-keys
│ └── configuration
└── agent-postgresql
├── agent-keys
└── configuration
構成ファイルの作成¶
このセクションでは、各エージェントが正しく動作するように構成ファイルにコンテンツを追加します。構成ファイルには次が含まれます。
Snowflakeに接続するための
snowflake.json
ファイル。ソースデータベースに接続するための
datasources.json
ファイル。追加のエージェント環境変数を含む
postgresql.conf/mysql.conf
ファイル。MySQL エージェント用の JDBC ドライバーファイル。
ターミナルで、
agent-mysql
ディレクトリに移動します。次の内容のDocker Composeファイル
docker-compose.yaml
を作成します。services: mysql-agent: container_name: mysql-agent image: snowflakedb/database-connector-agent:latest volumes: - ./agent-keys:/home/agent/.ssh - ./configuration/snowflake.json:/home/agent/snowflake.json - ./configuration/datasources.json:/home/agent/datasources.json - ./configuration/mariadb-java-client-3.4.1.jar:/home/agent/libs/mariadb-java-client-3.4.1.jar env_file: - configuration/mysql.conf mem_limit: 6g
以前にダウンロードした
snowflake.json
ファイルをconfiguration
ディレクトリに移動します。以前にダウンロードした
mariadb-java-client-3.4.1.jar
ファイルをconfiguration
ディレクトリに移動します。configuration
ディレクトリに次の内容のdatasources.json
を作成します。{ "MYSQLDS1": { "url": "jdbc:mariadb://host.docker.internal:3306/?allowPublicKeyRetrieval=true&useSSL=false", "username": "root", "password": "mysql", "ssl": false } }
configuration
ディレクトリに次の内容のmysql.conf
を作成します。JAVA_OPTS=-Xmx5g MYSQL_DATASOURCE_DRIVERPATH=/home/agent/libs/mariadb-java-client-3.4.1.jar
次のコマンドを使用してエージェントを起動します。エラーメッセージは表示されず、エージェントによりSnowflakeへの認証用の公開キーと秘密キーのペアが生成されます。
docker compose stop # stops the previous container in case you've launched it before docker compose rm -f # removes the agent container to recreate it with the latest image in case you had one before docker compose pull # refresh remote latest tag in case you have cached previous version docker compose up -d # run the agent
driver jar file の名前は、
docker-compose.yaml
およびmysql.conf
ファイルでダウンロードおよび使用されているものと 同一 の必要があることに注意してください。
コマンドラインで、
agent-postgresql
ディレクトリに移動します。次の内容のDocker Composeファイル
docker-compose.yaml
を作成します。services: postgresql-agent: container_name: postgresql-agent image: snowflakedb/database-connector-agent:latest volumes: - ./agent-keys:/home/agent/.ssh - ./configuration/snowflake.json:/home/agent/snowflake.json - ./configuration/datasources.json:/home/agent/datasources.json env_file: - configuration/postgresql.conf mem_limit: 6g
以前にダウンロードした
snowflake.json
ファイルをconfiguration
ディレクトリに移動します。configuration
ディレクトリに次の内容のdatasources.json
を作成します。{ "PSQLDS1": { "url": "jdbc:postgresql://host.docker.internal:5432/postgres", "username": "postgres", "password": "postgres", "publication": "agent_postgres_publication", "ssl": false } }
configuration
ディレクトリに、次の内容のpostgresql.conf
を作成します。JAVA_OPTS=-Xmx5g
次のコマンドを使用してエージェントを起動します。エラーメッセージは表示されず、エージェントによりSnowflakeへの認証用の公開キーと秘密キーのペアが生成されます。
docker compose up -d
完了すると、ディレクトリ構造は次のようになります。自動的に生成された秘密キーと公開キーが、agent-keysディレクトリ内に含まれていることに注意してください。
.
├── agent-mysql
│ ├── agent-keys
│ │ ├── database-connector-agent-app-private-key.p8
│ │ └── database-connector-agent-app-public-key.pub
│ ├── configuration
│ │ ├── datasources.json
│ │ ├── mariadb-java-client-3.4.1.jar
│ │ ├── mysql.conf
│ │ └── snowflake.json
│ └── docker-compose.yaml
└── agent-postgresql
├── agent-keys
│ ├── database-connector-agent-app-private-key.p8
│ └── database-connector-agent-app-public-key.pub
├── configuration
│ ├── datasources.json
│ ├── postgresql.conf
│ └── snowflake.json
└── docker-compose.yaml
Snowflakeとの接続を確認する¶
以前作成したネイティブアプリに戻ります。エージェント接続セクションの 更新 ボタンをクリックします。
正常に構成されると、次のように表示されます。
Agent is fully set up and connected. To select data to ingest Open Worksheet.
データインジェスチョンプロセスの構成と監視¶
このステップでは、選択したテーブルのレプリケーションを開始するようにコネクタに指示します。まず、Snowflakeで共有シンクデータベースを作成します。
CREATE DATABASE CONNECTORS_DEST_DB;
GRANT CREATE SCHEMA ON DATABASE CONNECTORS_DEST_DB TO APPLICATION SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL;
GRANT CREATE SCHEMA ON DATABASE CONNECTORS_DEST_DB TO APPLICATION SNOWFLAKE_CONNECTOR_FOR_MYSQL;
データベースの準備ができたら、構成プロセスに進むことができます。
テーブルレプリケーションを開始するには、まずレプリケーション元のデータソースを追加し、次にレプリケーションするテーブルを指定する必要があります。
CALL SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.ADD_DATA_SOURCE('MYSQLDS1', 'CONNECTORS_DEST_DB'); CALL SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.ADD_TABLES('MYSQLDS1', 'mysql_ingest_database', ARRAY_CONSTRUCT('mysql_rows'));
レプリケーションを監視するには、次のクエリを実行します。
SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.REPLICATION_STATE; SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.CONNECTOR_STATS;
テーブルレプリケーションを開始するには、まずレプリケーション元のデータソースを追加し、次にレプリケーションするテーブルを指定する必要があります。
CALL SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL.PUBLIC.ADD_DATA_SOURCE('PSQLDS1', 'CONNECTORS_DEST_DB'); CALL SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL.PUBLIC.ADD_TABLES('PSQLDS1', 'psql_rows_schema', ARRAY_CONSTRUCT('postgres_rows'));
レプリケーションを監視するには、次のクエリを実行します
SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL.PUBLIC.REPLICATION_STATE; SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL.PUBLIC.CONNECTOR_STATS;
コネクタのステータスを理解する¶
REPLICATION_STATE
ビューは、テーブルレプリケーションのステータスを監視するために重要です。このプロセスには、次の3つの異なるフェーズが含まれます。
SCHEMA_INTROSPECTION
: ソーステーブルのスキーマが正確にレプリケートされていることを確認します。INITIAL_LOAD
: 既存のデータをソーステーブルから宛先に転送します。INCREMENTAL_LOAD
: ソースからの進行中の変更を継続的にレプリケートします。
レプリケーションが成功すると、ステータス表示は次のようになります。
REPLICATION_PHASE
SCHEMA_INTROSPECTION_STATUS
SNAPSHOT_REPLICATION_STATUS
INCREMENTAL_REPLICATION_STATUS
INCREMENTAL_LOAD
DONE
DONE
IN PROGRESS
詳細については、 公式のコネクタドキュメント をご参照ください。
データの表示¶
次のコマンドを実行してデータを表示します。データベースごとにおよそ3行が含まれます。
SELECT * FROM CONNECTORS_DEST_DB."psql_rows_schema"."postgres_rows";
SELECT * FROM CONNECTORS_DEST_DB."mysql_ingest_database"."mysql_rows";
クリーンアップと追加のリソース¶
おめでとうございます。このチュートリアルを修了しました。
環境をクリーンアップするには、次のコマンドを実行します。クリーンアップしないと、コネクタが実行状態のままになり、コストが発生します。
ネイティブアプリの削除¶
DROP APPLICATION SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL CASCADE;
DROP APPLICATION SNOWFLAKE_CONNECTOR_FOR_MYSQL CASCADE;
ウェアハウス、ロール、ユーザーの削除¶
インストール中に、複数のウェアハウス、ロール、ユーザーが作成されました。次のクエリを実行して、これらのオブジェクトを削除します。
DROP ROLE MYSQL_ADMINISTRATIVE_AGENT_ROLE;
DROP ROLE MYSQL_AGENT_ROLE;
DROP USER MYSQL_AGENT_USER;
DROP WAREHOUSE MYSQL_COMPUTE_WH;
DROP WAREHOUSE MYSQL_OPS_WH;
DROP ROLE POSTGRESQL_ADMINISTRATIVE_AGENT_ROLE;
DROP ROLE POSTGRESQL_AGENT_ROLE;
DROP USER POSTGRESQL_AGENT_USER;
DROP WAREHOUSE POSTGRESQL_COMPUTE_WH;
DROP WAREHOUSE POSTGRESQL_OPS_WH;
データベースコンテナの停止¶
MySQL および PostgreSQL で実行中のコンテナを停止するには、 docker-compose.yaml
ファイルを含むディレクトリに移動し、 docker compose down -v
を実行します。
追加のリソース¶
次のリソースを使用して、コネクタについて引き続き学習しましょう。