注釈

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-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
Copy

docker-compose.yaml の準備ができたら、次のステップに従います。

  1. ターミナルを開きます。

  2. docker-compose.yaml ファイルを含むディレクトリに移動します。

  3. 次のコマンドを実行して、コンテナ内のソースデータベースを起動します。

    docker compose up -d
    
    Copy

このコマンドを実行すると、ソースデータベースをアクティブに実行している2つのコンテナが表示されます。

データベースへの接続

IntelliJまたはVisual Studio Codeのデータベース接続を使用して、事前に構成されたデータベースに接続するには、提供された認証情報を使用して次のステップを実行します。

  1. MySQL に接続するために選択したツールを開きます。

  2. データソースを追加するには、「+」記号などをクリックします。

  3. 接続の詳細を次のように入力します。

    • ユーザー: root

    • パスワード: mysql

    • URL: jdbc:mysql://localhost:3306

  4. 接続をテストして保存します。

サンプルデータのロード

サンプルを初期化してロードするには、これらの接続で次のスクリプトを実行してください。

スクリプトを実行してサンプルデータを生成する

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;
Copy

入力された各データベースに3つの行が表示されます。

Native Appのインストールと構成

このステップでは、次を実行します。

Native Applicationsのインストール

次のステップに従って、Snowflake Native Apps Marketplaceからアプリケーションをインストールします。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data Products » Marketplace を選択します。

  3. Snowflake Connector for MySQL および Snowflake Connector for PostgreSQL アプリケーションをインストールします。

  4. 両方のアプリケーションをインストールします。

インストール後、新しいアプリケーションが Data Products » Apps に表示されます。

Native Applicationsの構成

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data Products » Apps を選択します。

  3. 各アプリケーションを開き、次を実行します。

  1. Download Driver ` を選択し、ファイルを保存します。ファイル名は、 mariadb-java-client-3.4.1.jar に似たものになるか、可能な場合は新しいバージョンになります。エージェント構成で使用するために、このファイルを保存します。

  2. ソースデータベースを最初から作成してデータを入力するため、 Mark all as done を選択します。

    注釈

    チュートリアルの後半でエージェントを構成するため、この時点では追加のネットワーク構成は必要ありません。

  3. Start configuration をクリックします。

  4. Configure Connector 画面で Configure を選択します。 Verify Agent Connection ページが表示されます。

  5. Generate file を選択してエージェント構成ファイルを生成します。ファイル名は snowflake.json に似たものになります。このファイルを保存して、後でエージェント構成セクションで使用できるようにします。

エージェントの構成

このセクションでは、ソースデータベースで動作するエージェントを構成します。

最初のステップは、ディレクトリ agent-mysqlagent-postgresql を作成することです。

各ディレクトリ内にサブディレクトリ agent-keysconfiguration を作成します。ディレクトリ構造は次のようになります。

.
├── agent-mysql
│   ├── agent-keys
│   └── configuration
└── agent-postgresql
    ├── agent-keys
    └── configuration

構成ファイルの作成

このセクションでは、各エージェントが正しく動作するように構成ファイルにコンテンツを追加します。構成ファイルには次が含まれます。

  • Snowflakeに接続するための snowflake.json ファイル。

  • ソースデータベースに接続するための datasources.json ファイル。

  • 追加のエージェント環境変数を含む postgresql.conf/mysql.conf ファイル。

  • MySQL エージェント用の JDBC ドライバーファイル。

  1. ターミナルで、 agent-mysql ディレクトリに移動します。

  2. 次の内容の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
    
    Copy
  3. 以前にダウンロードした snowflake.json ファイルを configuration ディレクトリに移動します。

  4. 以前にダウンロードした mariadb-java-client-3.4.1.jar ファイルを configuration ディレクトリに移動します。

  5. configuration ディレクトリに次の内容の datasources.json を作成します。

    {
      "MYSQLDS1": {
        "url": "jdbc:mariadb://host.docker.internal:3306/?allowPublicKeyRetrieval=true&useSSL=false",
        "username": "root",
        "password": "mysql",
        "ssl": false
      }
    }
    
    Copy
  6. configuration ディレクトリに次の内容の mysql.conf を作成します。

    JAVA_OPTS=-Xmx5g
    MYSQL_DATASOURCE_DRIVERPATH=/home/agent/libs/mariadb-java-client-3.4.1.jar
    
    Copy
  7. 次のコマンドを使用してエージェントを起動します。エラーメッセージは表示されず、エージェントにより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
    
    Copy
  8. driver jar file の名前は、 docker-compose.yaml および mysql.conf ファイルでダウンロードおよび使用されているものと 同一 の必要があることに注意してください。

完了すると、ディレクトリ構造は次のようになります。自動的に生成された秘密キーと公開キーが、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.
Copy

データインジェスチョンプロセスの構成と監視

このステップでは、選択したテーブルのレプリケーションを開始するようにコネクタに指示します。まず、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;
Copy

データベースの準備ができたら、構成プロセスに進むことができます。

  1. テーブルレプリケーションを開始するには、まずレプリケーション元のデータソースを追加し、次にレプリケーションするテーブルを指定する必要があります。

    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'));
    
    Copy
  2. レプリケーションを監視するには、次のクエリを実行します。

    SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.REPLICATION_STATE;
    SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.CONNECTOR_STATS;
    
    Copy

コネクタのステータスを理解する

REPLICATION_STATE ビューは、テーブルレプリケーションのステータスを監視するために重要です。このプロセスには、次の3つの異なるフェーズが含まれます。

  1. SCHEMA_INTROSPECTION: ソーステーブルのスキーマが正確にレプリケートされていることを確認します。

  2. INITIAL_LOAD: 既存のデータをソーステーブルから宛先に転送します。

  3. 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";
Copy

クリーンアップと追加のリソース

おめでとうございます。このチュートリアルを修了しました。

環境をクリーンアップするには、次のコマンドを実行します。クリーンアップしないと、コネクタが実行状態のままになり、コストが発生します。

ネイティブアプリの削除

DROP APPLICATION SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL CASCADE;
DROP APPLICATION SNOWFLAKE_CONNECTOR_FOR_MYSQL CASCADE;
Copy

ウェアハウス、ロール、ユーザーの削除

インストール中に、複数のウェアハウス、ロール、ユーザーが作成されました。次のクエリを実行して、これらのオブジェクトを削除します。

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;
Copy

データベースコンテナの停止

MySQL および PostgreSQL で実行中のコンテナを停止するには、 docker-compose.yaml ファイルを含むディレクトリに移動し、 docker compose down -v を実行します。

追加のリソース

次のリソースを使用して、コネクタについて引き続き学習しましょう。