Konfigurieren der Replikation für Snowflake Connector for MySQL

Bemerkung

Der Snowflake Connector for MySQL unterliegt den Nutzungsbedingungen für Konnektoren.

Die Konfiguration der Replikation für Snowflake Connector for MySQL umfasst die folgenden Schritte:

Und optional:

Hinzufügen einer Datenquelle

Eine Datenquelle ist eine Darstellung eines einzelnen MySQL-Servers. Snowflake Connector for MySQL kann Daten aus mehreren Datenquellen replizieren. Bevor Sie mit der Replikation beginnen, müssen Sie mindestens eine Datenquelle hinzufügen.

Snowflake Connector for MySQL repliziert die Daten von jeder Datenquelle in eine bestimmte Zieldatenbank in Snowflake. Dieselbe Zieldatenbank kann nicht von mehreren Datenquellen verwendet werden.

Um eine Datenquelle hinzuzufügen, führen Sie den folgenden Befehl aus:

CALL PUBLIC.ADD_DATA_SOURCE('<data_source_name>', '<dest_db>');
Copy

Wobei:

data_source_name

Gibt den eindeutigen Namen der Datenquelle an. Der Name sollte dem Namen einer in der Konfiguration des Agenten definierten Datenquelle entsprechen. Bitte stellen Sie sicher, dass der gewählte Name den folgenden Anforderungen entspricht:

  • Der Name enthält nur Großbuchstaben (A-Z) und Dezimalzahlen (0-9).

  • Der Name darf nicht länger als 50 Zeichen sein.

dest_db

Gibt den Namen der Zieldatenbank in Snowflake an. Wenn die Datenbank nicht existiert, wird sie von der Prozedur automatisch erstellt. Andernfalls verwendet der Konnektor eine vorhandene Datenbank. In diesem Fall müssen Sie dem Konnektor Berechtigungen für die Datenbank erteilen, bevor Sie eine Datenquelle hinzufügen.

Bemerkung

Einmal hinzugefügt, kann eine Datenquelle nicht mehr umbenannt oder gelöscht werden.

(Optional) Erteilen von Berechtigungen für die Zieldatenbank

Um eine vorhandene Datenbank als Zieldatenbank zu verwenden, benötigt Snowflake Connector for MySQL die Berechtigung CREATE SCHEMA für diese Datenbank. Der Konnektor ist der Eigentümer der Schemas und Tabellen, die die aufgenommenen MySQL-Daten enthalten.

Um die Berechtigung CREATE SCHEMA zu erteilen, führen Sie den folgenden Befehl aus:

GRANT CREATE SCHEMA ON DATABASE <dest_db> TO APPLICATION <app_db_name>;
Copy

Wobei:

dest_db

Gibt den Namen der Zieldatenbank für die Daten aus einer Datenquelle an.

app_db_name

Gibt den Namen der Datenbank des Konnektors an.

Hinzufügen anderer Datenquellen

Sie können jederzeit neue Datenquellen hinzufügen. Um eine neue Datenquelle hinzuzufügen, während der Agent bereits läuft, gehen Sie wie folgt vor:

  1. Fügen Sie eine Datenquelle hinzu.

  2. Stellen Sie sicher, dass der Agent gestoppt ist.

  3. Konfigurieren Sie die Verbindung des Agenten mit der neuen Datenquelle.

  4. Führen Sie den Docker-Container des Agenten aus.

Hinzufügen einer Quelltabelle für die Replikation

Um Quelltabellen für die Replikation hinzuzufügen, führen Sie den folgenden Befehl aus:

CALL PUBLIC.ADD_TABLES('<data_source_name>', '<schema_name>', <table_names_array>);
Copy

Wobei:

data_source_name

Gibt den Namen der Datenquelle an, die die Quelltabelle enthält.

schema_name

Gibt den Namen des Schemas der Quelltabelle an.

table_names_array
Gibt das Array mit den Tabellennamen an:

ARRAY_CONSTRUCT('<table_name>', '<other_table_name>', ...)

Das Hinzufügen einer Quelltabelle hat die folgenden Auswirkungen:

  • schema_name und table_name werden als Schema- bzw. Tabellenname für die Replikation von Quelldaten aus der Quelldatenbank verwendet.

Bemerkung

Mit einem einzigen Prozeduraufruf können Sie viele Tabellen aus derselben Datenquelle und demselben Schema hinzufügen.

Bemerkung

Schema und Tabellennamen müssen übereinstimmen

Sie müssen den exakten Namen der Tabelle und des Schemas (einschließlich Groß- und Kleinschreibung) verwenden, wie er in der Quelldatenbank definiert ist. Die von Ihnen angegebenen Namen werden wortwörtlich verwendet, um die SELECT-Abfrage in der Quelldatenbank zu erstellen. Bei MySQL-Servernamen kann die Groß-/Kleinschreibung eine Rolle spielen und die Verwendung einer anderen Schreibweise könnte zu der Ausnahme „Tabelle existiert nicht“ führen.

Kürzlich entfernte Tabellen

Wenn Tabellen vor Kurzem entfernt wurden (Eine Tabelle aus der Replikation entfernen), ist es möglicherweise nicht möglich, sie an diesem Punkt der Konfiguration wieder hinzuzufügen. Wenn ein Fehler mit der Meldung Tables are not ready to be re-added erscheint, warten Sie einige Minuten, bevor Sie es erneut versuchen.

Hinzufügen einer Quelltabelle mit Spaltenfiltern

Um eine Quelltabelle mit gefilterten Spalten hinzuzufügen, führen Sie den folgenden Befehl aus:

CALL PUBLIC.ADD_TABLE_WITH_COLUMNS('<data_source_name>', '<schema_name>', '<table_name>', <included_columns_array>, <excluded_columns_array>);
Copy

Wobei:

data_source_name

Gibt den Namen der Datenquelle an, die die Quelltabelle enthält.

schema_name

Gibt den Namen des Schemas der Quelltabelle an.

table_name

Gibt den Namen der Quelltabelle an.

included_columns
Gibt das Array der Spaltennamen an, die repliziert werden sollen:

ARRAY_CONSTRUCT('<column_name>', '<other_column_name>', ...)

excluded_columns
Gibt das Array der Spaltennamen an, die ignoriert werden sollen:

ARRAY_CONSTRUCT('<column_name>', '<other_column_name>', ...)

Achtung

Bei der Übergabe von Spaltennamen an die Prozedur muss die Groß- und Kleinschreibung beachtet werden, und zwar genau so, wie sie in der Quelldatenbank dargestellt ist.

Für die oben genannte Prozedur gelten die folgenden Regeln:

  • Die Filterung erfolgt, bevor die Daten in Snowflake aufgenommen werden – nur die Daten aus den ausgewählten Spalten werden in Snowflake gestreamt, sowohl bei Snapshots als auch bei inkrementellen Ladungen.

  • included_columns und excluded_columns sind nur Maskierungen. Auf diese Weise wird der Konnektor keinen Fehler ausgeben, wenn die angegebene Spalte nicht existiert. Die Maskierung der nicht existierenden Spalte wird einfach ignoriert.

  • Sie sollten nicht sowohl included_columns als auch excluded_columns angeben. Wenn Sie included_columns auflisten möchten, müssen Sie excluded_columns leer lassen, und umgekehrt.

  • Wenn beide Arrays nicht leer sind und es keine kollidierenden Spalten gibt, hat included_columns Vorrang vor excluded_columns.

  • Wenn eine Spalte sowohl in included_columns als auch in excluded_columns angezeigt wird, gibt die Prozedur einen Fehler aus.

  • Wenn sowohl included_columns als auch excluded_columns leere Arrays sind, werden alle verfügbaren Spalten eingelesen.

  • Unabhängig von der Konfiguration werden die Spalten des Primärschlüssels immer repliziert.

Nehmen wir zum Beispiel an, wir haben eine Quelltabelle mit bestimmten Spalten: A, B, C, D, wobei A eine Primärschlüsselspalte ist, dann:

Enthaltene Spalten

Ausgeschlossene Spalten

Erwartetes Ergebnis

[]

[]

[A, B, C, D]

[A, B]

[]

[A, B]

[B]

[]

[A, B]

[]

[C, D]

[A, B]

[]

[A, B]

[A, C, D]

[A, B, Z]

[]

[A, B]

[A]

[A]

Fehler

Eine Tabelle aus der Replikation entfernen

Um eine Quelltabelle aus der Replikation zu entfernen, führen Sie den folgenden Befehl aus:

CALL PUBLIC.REMOVE_TABLE('<data_source_name>', '<schema_name>', '<table_name>');
Copy

Wobei:

data_source_name

Gibt den Namen der Datenquelle an, die die Quelltabelle enthält.

schema_name

Gibt den Namen des Schemas der Quelltabelle an.

table_name

Gibt den Namen der Quelltabelle an.

Bemerkung

Das Entfernen einer Tabelle aus der Replikation dauert ein paar Minuten. Sobald dies geschehen ist, wird die Tabelle aus der Ansicht PUBLIC.REPLICATION_STATE im Konnektor verschwinden (siehe Überwachen des Snowflake Connector for MySQL). Erst dann kann er wieder für die Replikation aktiviert werden.

Zu diesem Zeitpunkt ist die Zieltabelle noch im Besitz der Konnektor-Anwendung. Wenn Sie die Zieltabelle löschen oder anderweitig ändern möchten, müssen Sie zunächst ihre Eigentümerschaft auf eine Rolle in Ihrem Konto übertragen. Führen Sie die folgende Abfrage als ACCOUNTADMIN aus:

GRANT OWNERSHIP ON TABLE <destination_database_name>.<schema_name>.<table_name>
  TO ROLE <role_name>
  REVOKE CURRENT GRANTS;
Copy

Bemerkung

Wenn Sie eine Tabelle aus der Replikation entfernen, korrigieren Sie ihren FAILED Status. Sie müssen die Zieltabelle auch manuell umbenennen oder löschen, bevor Sie ihre Replikation wieder aktivieren.

Konfiguration der geplanten Replikation

Der Konnektor kann die Daten in zwei Modi replizieren: kontinuierlich oder geplant. Die Standardeinstellung ist ein kontinuierlicher Modus.

Im kontinuierlichen Modus werden die Daten so schnell wie möglich repliziert. Es erfordert die Ausführung eines operatives Warehouses rund um die Uhr, was unnötige Kosten verursachen kann, auch ohne laufende Replikation.

Im geplanten Modus werden die Daten nach einem konfigurierten Zeitplan repliziert. Es zielt darauf ab, die Kosten für die Replikation zu senken, wenn keine Notwendigkeit besteht, Daten kontinuierlich zu replizieren, oder das Datenvolumen gering ist (wodurch der Konnektor die meiste Zeit im Leerlauf ist).

Der geplante Modus führt das Konzept des Abschlusses der Replikation ein. Die Snapshot-Replikation beginnt, wenn die Ausführung der SELECT <Spalten> FROM <TABLE>-Abfrage beginnt, und sie endet, wenn die Daten in die Zieltabelle repliziert werden. Die inkrementelle Replikation beginnt mit dem zuvor gespeicherten Zeiger für die Erfassung von Änderungsdaten (CDC), hat aber kein Ende, da die Daten kontinuierlich aufgenommen werden. Daher repliziert der Konnektor die Daten vom zuvor gespeicherten CDC-Zeiger bis zum neuesten CDC-Zeiger (der zu Beginn der Replikation ermittelt wird). Auf diese Weise sorgt der Konnektor für den Abschluss der Replikation in einem geplanten Modus.

Der geplante Modus reduziert die Kosten für die Replikation, indem er die Operation des Warehouses aussetzt. Das Warehouse kann ausgesetzt werden, wenn die Replikation der einzelnen Quelltabellen abgeschlossen ist. Das Warehouse bleibt bis zum nächsten Lauf der Replikation gemäß dem Zeitplan ausgesetzt.

Bemerkung

Es kann jeweils nur eine Replikation laufen. Wenn eine Replikation zum Zeitpunkt der nächsten geplanten Ausführung noch läuft, wird dieser Zeitpunkt übersprungen.

Um den geplanten Modus zu aktivieren, führen Sie den folgenden Befehl aus:

CALL PUBLIC.ENABLE_SCHEDULED_REPLICATION('<data_source_name>', '<schedule>');
Copy

Wobei:

data_source_name

Gibt den Namen der Datenquelle an.

schedule

Legt den Zeitplan oder die Häufigkeit fest, mit der der Konnektor die Replikation der Datenquelle ausführt. Die zulässige Mindestfrequenz beträgt 10 Minuten. Einzelheiten zum Festlegen des Zeitplans oder der Häufigkeit finden Sie unter SCHEDULE-Parameter.

Beispiele für Zeitpläne:

  • 60 MINUTE

    Plant die Replikation auf alle 60 Minuten.

  • USING CRON 0 2 * * * UTC

    Plant die Replikation um 2 Uhr nachts. UTC täglich.

Um den geplanten Modus zu deaktivieren, führen Sie den folgenden Befehl aus:

CALL PUBLIC.DISABLE_SCHEDULED_REPLICATION('<data_source_name>');
Copy

Wobei:

data_source_name

Gibt den Namen der Datenquelle an.

Den aktuellen Zeitplan finden Sie unter Anzeigen von Datenquellen.

Bemerkung

Das operative Warehouse verarbeitet Replikationen aus allen Datenquellen. Das Warehouse kann nur ausgesetzt werden, wenn die Replikation jeder Quelltabelle aus jeder Datenquelle abgeschlossen ist. Mit anderen Worten: Der geplante Modus muss für alle Datenquellen aktiviert sein, damit die automatische Aussetzung richtig funktioniert.

Warnung

Um die geplante Ausführung abzuschließen und das operative Warehouse aussetzen zu lassen, benötigt der Konnektor eine kontinuierliche Aktivität in der Quelldatenbank. Jede Operation, die Daten in einer Datenbank einfügt, löscht und aktualisiert, erzeugt eine Aktivität. Die Operation kann auf jede Tabelle angewandt werden, nicht unbedingt auf Tabellen, die zur Replikation hinzugefügt wurden. Die Anzahl der eingefügten oder aktualisierten Zeilen spielt dabei keine Rolle.

Nächste Schritte

Führen Sie nach Beendigung dieser Prozeduren die unter Anzeigen von MySQL-Daten in Snowflake beschriebenen Schritte aus.