Bemerkung
Snowflake Connector for PostgreSQL und Snowflake Connector for MySQL unterliegen den Nutzungsbedingungen für Konnektoren.
Verwenden von MySQL- und PostgreSQL-Konnektoren für Snowflake¶
Einführung¶
Willkommen bei unserem Tutorial zur Verwendung der Snowflake Database Connectors. Diese Anleitung hilft Ihnen, Daten aus relationalen Datenbanken nahtlos in Snowflake zu übertragen.
In diesem Tutorial lernen Sie, wie Sie:
MySQL und PostgreSQL in Docker einrichten, vollständig mit Beispieldaten für die Datenaufnahme.
Installieren und konfigurieren Sie zwei native Anwendungen, eine für jede Datenbank.
Richten Sie zwei Agenten ein, und nehmen Sie eine Feinabstimmung vor, wiederum einen für jede Datenbank.
Initiieren und verwalten Sie die Datenaufnahmeprozesse.
Überwachen Sie den Workflow der Datenaufnahme.
Fangen wir an!
Voraussetzungen¶
Bevor Sie mit diesem Tutorial beginnen, sollten Sie sicherstellen, dass Sie die folgenden Anforderungen erfüllen:
Docker ist auf Ihrem lokalen Rechner installiert und betriebsbereit.
Sie haben ein Tool zur Verbindung mit der Datenbank zur Verfügung. Dies kann ein datenbankspezifisches Tool oder ein allgemeines Tool wie IntelliJ oder Visual Studio Code sein.
Erstellen von MySQL- und PostgreSQL-Quelldatenbanken¶
In diesem Abschnitt werden wir Sie durch die folgenden Schritte führen:
Starten der Datenbank-Instanzen – Erfahren Sie, wie Sie Ihre MySQL- und PostgreSQL-Instanzen mit Docker starten.
Verbindung zur Datenbank – Anweisungen, wie Sie eine Verbindung zu Ihren Datenbanken herstellen können.
Laden von Beispieldaten – Eine Anleitung, wie Sie Ihre Datenbanken mit Beispieldaten füllen können.
Starten der Datenbank-Instanzen¶
Um die Konfiguration der MySQL- und PostgreSQL-Datenbanken mit Docker zu beginnen, erstellen Sie die Datei docker-compose.yaml
. Der Inhalt der Datei sollte so aussehen:
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
Sobald Ihre docker-compose.yaml
fertig ist, folgen Sie diesen Schritten:
Öffnen Sie ein Terminal.
Navigieren Sie zu dem Verzeichnis, das die Datei
docker-compose.yaml
enthält.Führen Sie den folgenden Befehl aus, um Quelldatenbanken in Containern zu starten:
docker compose up -d
Nachdem Sie diesen Befehl ausgeführt haben, sollten Sie zwei Container sehen, in denen die Quelldatenbanken aktiv ausgeführt werden.
Verbindung zur Datenbank herstellen¶
Um eine Verbindung zu den vorkonfigurierten Datenbanken herzustellen, indem Sie die Datenbankverbindungen von IntelliJ oder Visual Studio Code verwenden, führen Sie die folgenden Schritte mit den bereitgestellten Anmeldeinformationen aus:
Öffnen Sie das Tool Ihrer Wahl für die Verbindung mit MySQL.
Klicken Sie auf das ‚+‘-Zeichen oder Ähnliches, um eine Datenquelle hinzuzufügen.
Geben Sie die Details der Verbindung ein:
Benutzer:
root
Kennwort:
mysql
URL:
jdbc:mysql://localhost:3306
Testen Sie die Verbindung, und speichern Sie.
Öffnen Sie das Tool Ihrer Wahl für die Verbindung mit PostgreSQL.
Klicken Sie auf das ‚+‘-Zeichen oder Ähnliches, um eine Datenquelle hinzuzufügen.
Geben Sie die Details der Verbindung ein:
Benutzer:
postgres
Kennwort:
postgres
Datenbank:
postgres
URL:
jdbc:postgresql://localhost:5432
Testen Sie die Verbindung, und speichern Sie.
Laden von Beispieldaten¶
Um das Beispiel zu initialisieren und zu laden, führen Sie diese Skripte in diesen Verbindungen aus.
Führen Sie das Skript aus, um Beispieldaten zu erzeugen
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;
Führen Sie das Skript aus, um Beispieldaten zu erzeugen
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;
Sie sollten drei Zeilen in jeder befüllten Datenbank sehen.
Installieren und konfigurieren Sie die Native App¶
Während dieses Schritts werden Sie:
Native Applications installieren¶
Folgen Sie diesen Schritten, um die Anwendung vom Snowflake Native Apps Marketplace zu installieren:
Melden Sie sich bei Snowsight an.
Wählen Sie im Navigationsmenü die Option Data Products » Marketplace aus.
Installieren Sie die Anwendungen Snowflake Connector für MySQL und Snowflake Connector für PostgreSQL.
Installieren Sie beide Anwendungen.
Nach der Installation sehen Sie die neuen Anwendungen in der Liste unter Data Products » Apps.
Native Applications konfigurieren¶
Melden Sie sich bei Snowsight an.
Wählen Sie im Navigationsmenü die Option Data Products » Apps aus.
Öffnen Sie jede Anwendung, und gehen Sie wie folgt vor:
Wählen Sie Download Driver
, und speichern Sie die Datei. Der Name der Datei ähnelt :file:`mariadb-java-client-3.4.1.jar
oder einer neueren Version, sofern verfügbar. Speichern Sie diese Datei zur Verwendung bei der Konfiguration des Agenten.Wählen Sie Mark all as done, da wir die Quelldatenbanken von Grund auf neu erstellen und befüllen werden.
Bemerkung
An dieser Stelle ist keine zusätzliche Konfiguration des Netzwerks erforderlich, da wir den Agenten später im Tutorial konfigurieren werden.
Klicken Sie auf Start configuration.
Wählen Sie auf dem Bildschirm Configure Connector die Option Configure aus. Die Seite Verify Agent Connection wird angezeigt.
Wählen Sie Generate file, um eine Datei für die Konfiguration des Agenten zu erstellen. Der Name der Datei sollte
snowflake.json
ähneln. Speichern Sie diese Datei zur späteren Verwendung im Abschnitt zur Konfiguration der Agenten.
Wählen Sie Mark all as done, da wir die Quelldatenbanken von Grund auf neu erstellen und befüllen werden.
Bemerkung
An dieser Stelle ist keine zusätzliche Konfiguration des Netzwerks erforderlich, da wir den Agenten später im Tutorial konfigurieren werden.
Klicken Sie auf Start configuration.
Wählen Sie auf dem Bildschirm Konnektor konfigurieren die Option Konfigurieren.
Wählen Sie auf der Seite Verify Agent Connection die Option Generate file, um die Datei für die Konfiguration des Agenten zu erstellen. Der Name der Datei sollte
snowflake.json
ähneln. Speichern Sie diese Datei zur Verwendung im Abschnitt zur Konfiguration der Agenten.
Konfigurieren der Agenten¶
In diesem Abschnitt konfigurieren wir den Agenten, der mit Ihren Quelldatenbanken arbeiten soll.
Der erste Schritt besteht darin, die Verzeichnisse agent-mysql
und agent-postgresql
zu erstellen.
Erstellen Sie innerhalb jedes Verzeichnisses die Unterverzeichnisse agent-keys
und configuration
. Die Struktur Ihres Verzeichnisses sollte folgendermaßen aussehen:
.
├── agent-mysql
│ ├── agent-keys
│ └── configuration
└── agent-postgresql
├── agent-keys
└── configuration
Erstellen von Dateien für die Konfiguration¶
In diesem Abschnitt fügen wir den Konfigurationsdateien Inhalte hinzu, damit die einzelnen Agenten korrekt funktionieren. Die Dateien für die Konfiguration umfassen:
snowflake.json
-Datei, um eine Verbindung zu Snowflake herzustellen.datasources.json
-Datei, um eine Verbindung zu den Quelldatenbanken herzustellen.postgresql.conf/mysql.conf
-Dateien mit zusätzlichen Umgebungsvariablen des Agenten.JDBC-Datei mit Treibern für den MySQL-Agenten.
Navigieren Sie in einem Terminal zum Verzeichnis
agent-mysql
.Erstellen Sie die Docker Compose-Datei
docker-compose.yaml
mit dem folgenden Inhalt: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
Verschieben Sie die zuvor heruntergeladene
snowflake.json
-Datei in das Verzeichnisconfiguration
.Verschieben Sie die zuvor heruntergeladene
mariadb-java-client-3.4.1.jar
-Datei in das Verzeichnisconfiguration
.Erstellen Sie im Verzeichnis
configuration
datasources.json
mit dem Inhalt:{ "MYSQLDS1": { "url": "jdbc:mariadb://host.docker.internal:3306/?allowPublicKeyRetrieval=true&useSSL=false", "username": "root", "password": "mysql", "ssl": false } }
Erstellen Sie im Verzeichnis
configuration
mysql.conf
mit dem Inhalt:JAVA_OPTS=-Xmx5g MYSQL_DATASOURCE_DRIVERPATH=/home/agent/libs/mariadb-java-client-3.4.1.jar
Starten Sie den Agenten mit folgendem Befehl. Es sollte zu keiner Fehlermeldung kommen, und der Agent sollte ein Schlüsselpaar aus öffentlichem und privatem Schlüssel für die Authentifizierung bei Snowflake erzeugen.
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
Bitte beachten Sie, dass der Name der Treiber jar-Datei identisch sein muss mit dem Namen, der in den Dateien
docker-compose.yaml
undmysql.conf
verwendet wird.
Navigieren Sie in der Befehlszeile zum Verzeichnis
agent-postgresql
.Erstellen Sie die Docker Compose-Datei
docker-compose.yaml
mit dem folgenden Inhalt: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
Verschieben Sie die zuvor heruntergeladene
snowflake.json
-Datei in das Verzeichnisconfiguration
.Erstellen Sie im Verzeichnis
configuration
datasources.json
mit dem Inhalt:{ "PSQLDS1": { "url": "jdbc:postgresql://host.docker.internal:5432/postgres", "username": "postgres", "password": "postgres", "publication": "agent_postgres_publication", "ssl": false } }
Erstellen Sie im Verzeichnis
configuration
postgresql.conf
mit dem folgenden Inhalt:JAVA_OPTS=-Xmx5g
Starten Sie den Agenten mit folgendem Befehl. Es sollte zu keiner Fehlermeldung kommen, und der Agent sollte ein Schlüsselpaar aus öffentlichem und privatem Schlüssel für die Authentifizierung bei Snowflake erzeugen.
docker compose up -d
Wenn Sie fertig sind, sollte Ihre Verzeichnisstruktur wie folgt aussehen. Bitte beachten Sie die Aufnahme der automatisch generierten privaten und öffentlichen Schlüssel in die Verzeichnisse der Agent-Schlüssel.
.
├── 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
Überprüfen der Verbindung mit Snowflake¶
Gehen Sie zurück zu Ihren zuvor erstellten Native Apps. Klicken Sie auf die Schaltfläche Aktualisieren im Abschnitt Agent-Verbindung.
Nach erfolgreicher Konfiguration sollten Sie sehen:
Agent is fully set up and connected. To select data to ingest Open Worksheet.
Konfigurieren und überwachen Sie den Datenaufnahmeprozess¶
In diesem Schritt weisen wir den Konnektor an, mit der Replikation der ausgewählten Tabellen zu beginnen. Lassen Sie uns zunächst eine gemeinsame Datenbank in Snowflake erstellen.
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;
Sobald die Datenbank fertig ist, können wir mit der Konfiguration fortfahren.
Um mit der Replikation von Tabellen zu beginnen, müssen Sie zunächst eine Datenquelle hinzufügen, von der aus repliziert werden soll, und dann die Tabelle angeben, die repliziert werden soll.
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'));
Um die Replikation zu überwachen, führen Sie die folgenden Abfragen aus:
SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.REPLICATION_STATE; SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_MYSQL.PUBLIC.CONNECTOR_STATS;
Um mit der Replikation von Tabellen zu beginnen, müssen Sie zunächst eine Datenquelle hinzufügen, aus der repliziert werden soll, und dann die zu replizierende Tabelle angeben.
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'));
Um die Replikation zu überwachen, können Sie die folgenden Abfragen ausführen
SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL.PUBLIC.REPLICATION_STATE; SELECT * FROM SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL.PUBLIC.CONNECTOR_STATS;
Erläuterungen zum Status des Konnektors¶
Die Ansicht REPLICATION_STATE
ist entscheidend für die Überwachung des Status der Tabellenreplikation. Dieser Prozess besteht aus drei verschiedenen Phasen:
SCHEMA_INTROSPECTION
: Stellt sicher, dass das Schema der Quelltabelle genau repliziert wird.INITIAL_LOAD
: Überträgt die vorhandenen Daten aus der Quelltabelle in die Zieltabelle.INCREMENTAL_LOAD
: Repliziert fortlaufend die laufenden Änderungen von der Quelle.
Nach erfolgreicher Replikation sieht die Statusanzeige wie folgt aus:
REPLICATION_PHASE
SCHEMA_INTROSPECTION_STATUS
SNAPSHOT_REPLICATION_STATUS
INCREMENTAL_REPLICATION_STATUS
INCREMENTAL_LOAD
DONE
DONE
IN PROGRESS
Mehr dazu finden Sie in der offiziellen Dokumentation zum Konnektor .
Daten anzeigen¶
Führen Sie die folgenden Befehle aus, um die Daten anzuzeigen, die etwa 3 Zeilen pro Datenbank umfassen sollten.
SELECT * FROM CONNECTORS_DEST_DB."psql_rows_schema"."postgres_rows";
SELECT * FROM CONNECTORS_DEST_DB."mysql_ingest_database"."mysql_rows";
Bereinigen und zusätzliche Ressourcen¶
Herzlichen Glückwunsch! Sie haben dieses Tutorial erfolgreich abgeschlossen.
Um Ihre Umgebung zu bereinigen, führen Sie die unten aufgeführten Befehle aus. Wenn Sie dies nicht tun, bleibt der Konnektor in Betrieb und verursacht Kosten.
Entfernen der Native App¶
DROP APPLICATION SNOWFLAKE_CONNECTOR_FOR_POSTGRESQL CASCADE;
DROP APPLICATION SNOWFLAKE_CONNECTOR_FOR_MYSQL CASCADE;
Entfernen von Warehouses, Rollen und Benutzern¶
Während der Installation wurden mehrere Warehouses, Rollen und Benutzer erstellt. Führen Sie die folgenden Abfragen aus, um diese Objekte zu löschen.
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;
Anhalten von Datenbank-Containern¶
Um die laufenden Container mit MySQL und PostgreSQL zu stoppen, navigieren Sie zu dem Verzeichnis, das die Dateien docker-compose.yaml
enthält, und führen Sie dann docker compose down -v
aus.
Zusätzliche Ressourcen¶
Erfahren Sie mehr über Konnektoren mithilfe der folgenden Ressourcen: