참고
Snowflake Connector for PostgreSQL 및 Snowflake Connector for MySQL 는 커넥터 약관 을 따릅니다.
Snowflake용 MySQL 및 PostgreSQL Connector 사용하기¶
소개¶
Snowflake Database Connector 사용에 대한 자습서입니다. 이 가이드를 통해 관계형 데이터베이스에서 Snowflake로 데이터를 원활하게 이전하는 데 도움을 받을 수 있습니다.
이 자습서를 통해 다음과 같은 기술을 습득할 수 있습니다.
수집을 위해 샘플 데이터를 완비한 상태로 Docker에서 MySQL과 PostgreSQL을 설정합니다.
각 데이터베이스에 하나씩, 두 개의 네이티브 애플리케이션을 설치하고 구성합니다.
다시 각 데이터베이스에 하나씩, 두 개의 에이전트를 설정하고 미세 조정합니다.
데이터 수집 프로세스를 시작하고 관리합니다.
데이터 수집 워크플로를 모니터링합니다.
시작해 보겠습니다!
전제 조건¶
이 자습서를 시작하기 전에 다음 요구 사항을 충족하는지 확인하십시오.
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
이 명령을 실행하면 두 개의 컨테이너가 원본 데이터베이스를 능동적으로 실행하는 것을 볼 수 있습니다.
데이터베이스에 연결하기¶
IntelliJ 또는 Visual Studio Code 데이터베이스 연결을 사용해 미리 구성된 데이터베이스에 연결하려면 제공된 자격 증명을 사용하여 다음 단계를 수행합니다.
원하는 도구를 열어 MySQL에 연결합니다.
‘+’ 기호나 비슷한 기호를 클릭하여 데이터 원본을 추가합니다.
다음 연결 세부 정보를 입력합니다.
User:
root
Password:
mysql
URL:
jdbc:mysql://localhost:3306
연결을 테스트하고 저장합니다.
원하는 도구를 열어 PostgreSQL에 연결합니다.
‘+’ 기호나 비슷한 기호를 클릭하여 데이터 원본을 추가합니다.
다음 연결 세부 정보를 입력합니다.
User:
postgres
Password:
postgres
Database:
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 Application 설치하기¶
다음 단계에 따라 Snowflake Native Apps Marketplace에서 Application을 설치합니다.
Snowsight 에 로그인합니다.
탐색 메뉴에서 Data Products » Marketplace 를 선택합니다.
Snowflake Connector for MySQL 및 Snowflake Connector for PostgreSQL 애플리케이션을 설치합니다.
두 애플리케이션을 모두 설치합니다.
설치하면 Data Products » Apps 에 새 애플리케이션이 나열됩니다.
Native Application 구성하기¶
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 Driver 파일.
터미널에서
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
드라이버 jar 파일 이름은
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.
데이터 수집 프로세스 구성 및 모니터링하기¶
이 단계에서는 선택한 테이블 복제를 시작하도록 Connector에 지시합니다. 먼저, 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
뷰는 테이블 복제 상태를 모니터링하는 데 매우 중요합니다. 이 과정은 다음 세 가지 단계로 구성됩니다.
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
를 실행합니다.
추가 리소스¶
다음 리소스를 활용하여 커넥터에 대해 계속 알아보십시오.