Cloud Spanner Avro-Dateien importieren

Auf dieser Seite wird beschrieben, wie Sie Cloud Spanner-Datenbanken über die Google Cloud Console in Spanner importieren. Informationen zum Importieren von Avro-Dateien aus einer anderen Quelle finden Sie unter Daten aus Nicht-Spanner-Datenbanken importieren.

In diesem Vorgang wird Dataflow zum Importieren von Daten aus einem Cloud Storage-Bucket-Ordner verwendet, der eine Reihe von Avro-Dateien und JSON-Manifestdateien enthält. Der Importvorgang unterstützt nur Avro-Dateien, die aus Spanner exportiert wurden.

Führen Sie die Schritte im Abschnitt Vorbereitung auf dieser Seite aus, um eine Spanner-Datenbank mit der REST API oder dem gcloud CLI zu importieren. Lesen Sie dann die detaillierte Anleitung unter Cloud Storage Avro für Cloud Spanner.

Hinweise

Zum Importieren einer Spanner-Datenbank müssen Sie zuerst die Spanner API, Cloud Storage, Compute Engine und Dataflow APIs aktivieren:

Aktivieren Sie die APIs

Außerdem brauchen Sie ein ausreichend großes Kontingent und die erforderlichen IAM-Berechtigungen.

Kontingentanforderungen

Für Importjobs gelten folgende Kontingentanforderungen:

  • Spanner: Sie müssen genügend Rechenkapazität für die zu importierende Datenmenge haben. Für den Import einer Datenbank ist keine zusätzliche Rechenkapazität erforderlich. Allerdings benötigen Sie möglicherweise weitere Rechenkapazität, damit der Job in angemessener Zeit abgeschlossen werden kann. Weitere Informationen finden Sie unter Jobs optimieren.
  • Cloud Storage: Zum Importieren benötigen Sie einen Bucket mit Ihren zuvor exportierten Dateien. Für den Bucket muss keine Größe festgelegt werden.
  • Dataflow: Für Importjobs gelten dieselben Compute Engine-Kontingente für CPU, Laufwerksnutzung und IP-Adressen wie für andere Dataflow-Jobs.
  • Compute Engine: Bevor Sie den Importjob ausführen, müssen Sie zuerst Kontingente für Compute Engine einrichten, die von Dataflow verwendet werden. Diese Kontingente stellen die maximale Anzahl von Ressourcen dar, die Dataflow für Ihren Job verwenden darf. Empfohlene Anfangswerte sind:

    • CPUs: 200
    • Verwendete IP-Adressen: 200
    • Nichtflüchtiger Standardspeicher: 50 TB

    In der Regel sind keine weiteren Anpassungen erforderlich. Dataflow bietet Autoscaling, sodass Sie nur für die Ressourcen zahlen, die beim Import tatsächlich verwendet werden. Wenn Ihr Job mehr Ressourcen verwenden kann, wird in der Dataflow-UI ein Warnsymbol angezeigt. Der Job sollte trotz dieses Warnsymbols beendet werden.

IAM-Anforderungen

Für das Importieren einer Datenbank benötigen Sie außerdem IAM-Rollen mit ausreichenden Berechtigungen, um alle Dienste nutzen zu können, die für einen Importjob erforderlich sind. Informationen zum Zuweisen von Rollen und Berechtigungen finden Sie unter IAM-Rollen anwenden.

Zum Importieren einer Datenbank benötigen Sie folgende Rollen:

  • Auf Google Cloud-Projektebene:
    • Spanner-Betrachter
    • Dataflow-Administrator
    • Storage-Administrator
  • Auf der Spanner-Datenbank- oder Instanzebene oder auf Google Cloud-Projektebene:
    • Spanner-Leser
    • Spanner-Datenbankadministrator (nur für Importjobs erforderlich)

Optional: Datenbankordner in Cloud Storage suchen

Wenn Sie in der Google Cloud Console den Ordner mit der exportierten Datenbank finden möchten, rufen Sie den Cloud Storage-Browser auf und klicken Sie auf den Bucket, der den exportierten Ordner enthält.

Zum Cloud Storage-Browser

Der Name des Ordners mit Ihren exportierten Daten beginnt mit der ID Ihrer Instanz, dem Datenbanknamen und dem Zeitstempel des Exportjobs. Der Ordner enthält Folgendes:

  • Eine spanner-export.json-Datei
  • Eine TableName-manifest.json-Datei für jede Tabelle in der Datenbank, die Sie exportiert haben
  • Mindestens eine TableName.avro-#####-of-#####-Datei Die erste Zahl in der Erweiterung .avro-#####-of-##### steht für den Index der Avro-Datei, beginnend bei null, und die zweite Zahl steht für die Anzahl der Avro-Dateien, die für jede Tabelle generiert werden.

    Songs.avro-00001-of-00002 ist beispielsweise die zweite von zwei Dateien, die die Daten der Tabelle Songs enthalten.

  • Eine ChangeStreamName-manifest.json-Datei für jeden Änderungsstream in der exportierten Datenbank.

  • Eine ChangeStreamName.avro-00000-of-00001-Datei für jeden Änderungsstream. Diese Datei enthält leere Daten nur mit dem Avro-Schema des Änderungsstreams.

Datenbank importieren

So importieren Sie die Spanner-Datenbank aus Cloud Storage in Ihre Instanz:

  1. Rufen Sie die Seite Spanner-Instanzen auf.

    Zur Seite "Instanzen"

  2. Klicken Sie auf den Namen der Instanz, in die die Datenbank zu importieren ist.

  3. Klicken Sie auf den Menüpunkt Import/Export im linken Bereich und anschließend auf die Schaltfläche Import.

  4. Klicken Sie unter Quellordner auswählen auf Durchsuchen.

  5. Suchen Sie in der angezeigten Liste den Bucket mit Ihrem Export oder klicken Sie auf Suchen Screenshot des UI-Elements zum Suchen, um die Liste zu filtern und den Bucket zu ermitteln. Doppelklicken Sie auf den Bucket, um die darin enthaltenen Ordner aufzurufen.

  6. Suchen Sie den Ordner mit den exportierten Dateien und klicken Sie darauf, um ihn auszuwählen.

  7. Klicken Sie auf Auswählen.

  8. Geben Sie einen Namen für die neue Datenbank ein, die Spanner während des Importvorgangs erstellt. Der Datenbankname darf in Ihrer Instanz nicht bereits vorhanden sein.

  9. Wählen Sie den Dialekt für die neue Datenbank aus (GoogleSQL oder PostgreSQL).

  10. Optional: Wenn Sie die neue Datenbank mit einem vom Kunden verwalteten Verschlüsselungsschlüssel schützen möchten, klicken Sie auf Verschlüsselungsoptionen einblenden und wählen Sie Vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verwenden aus. Wählen Sie dann einen Schlüssel aus der Drop-down-Liste aus.

  11. Wählen Sie aus dem Drop-down-Menü Region für den Importjob auswählen eine Region aus.

  12. (Optional) Wenn Sie den Dataflow-Pipelinestatus mit einem vom Kunden verwalteten Verschlüsselungsschlüssel verschlüsseln möchten, klicken Sie auf Verschlüsselungsoptionen einblenden und wählen Sie Vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verwenden aus. Wählen Sie dann einen Schlüssel aus der Dropdown-Liste aus.

  13. Klicken Sie auf das Kästchen unter Gebühren bestätigen, um zu bestätigen, dass zusätzlich zu den Kosten für die vorhandene Spanner-Instanz weitere Gebühren anfallen.

  14. Klicken Sie auf Import (Importieren).

    In der Google Cloud Console sehen Sie jetzt die Seite Datenbankdetails mit einem Feld, in dem der Importjob einschließlich der verstrichenen Zeit beschrieben wird:

    Screenshot eines laufenden Jobs

Wenn der Job abgeschlossen oder beendet wird, wird in der Google Cloud Console auf der Seite Datenbankdetails eine Meldung angezeigt. Wurde der Job erfolgreich beendet, lautet sie:

Erfolgsmeldung für Importjob

Wenn der Job nicht erfolgreich war, wird eine Fehlermeldung angezeigt:

Fehlermeldung für Importjob

Wenn der Job fehlschlägt, sehen Sie sich die Fehlerdetails in den Dataflow-Logs des Jobs an und lesen Sie den Artikel Fehlerbehebung bei fehlgeschlagenen Importjobs.

Hinweis zum Importieren generierter Spalten und Änderungsstreams

Spanner verwendet die Definition jeder generierten Spalte im Avro-Schema, um diese Spalte neu zu erstellen. Spanner berechnet die generierten Spaltenwerte während des Imports automatisch.

Auf ähnliche Weise verwendet Spanner die Definition jedes Änderungsstreams im Avro-Schema, um ihn während des Imports neu zu erstellen. Änderungsstreamdaten werden weder exportiert noch über Avro importiert. Daher haben alle Änderungsstreams, die mit einer neu importierten Datenbank verknüpft sind, keine Änderungsdatendatensätze.

Hinweis zum Importieren von Sequenzen

Jede von Spanner exportierte Sequenz (GoogleSQL, PostgreSQL) verwendet die Funktion GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL), um ihren aktuellen Status zu erfassen. Spanner fügt dem Zähler einen Puffer von 1.000 hinzu und schreibt den neuen Zählerwert in die Attribute des Eintragsfelds. Beachten Sie, dass dies nur ein Best-Effort-Ansatz ist, um Fehler durch doppelte Werte zu vermeiden, die nach dem Import auftreten können. Passen Sie den tatsächlichen Sequenzzähler an, wenn während des Datenexports mehr Schreibvorgänge in die Quelldatenbank ausgeführt werden.

Beim Import beginnt die Sequenz mit diesem neuen Zähler und nicht mit dem im Schema gefundenen Zähler. Bei Bedarf können Sie die Anweisung ALTER SEQUENCE (GoogleSQL, PostgreSQL) verwenden, um auf einen neuen Zähler zu aktualisieren.

Region für den Importjob auswählen

Sie können auch eine andere Region basierend auf dem Standort Ihres Cloud Storage-Bucket auswählen. Wählen Sie eine Region aus, die dem Standort Ihres Cloud Storage-Bucket entspricht, um Gebühren für ausgehenden Datenverkehr zu vermeiden.

  • Wenn der Speicherort des Cloud Storage-Bucket eine Region ist, können Sie von der kostenlosen Netzwerknutzung profitieren. Dazu wählen Sie dieselbe Region für den Importjob aus, sofern diese Region verfügbar ist.

  • Wenn der Speicherort Ihres Cloud Storage-Bucket eine Dual-Region ist, können Sie die kostenlose Netzwerknutzung nutzen. Dazu wählen Sie eine der beiden Regionen aus, aus denen die Dual-Region für Ihren Importjob besteht, vorausgesetzt, eine der Regionen ist verfügbar.

  • Wenn für Ihren Importjob keine Region mit demselben Standort verfügbar ist oder der Speicherort des Cloud Storage-Bucket mehrere Regionen umfasst, fallen Gebühren für die ausgehende Datenübertragung an. Wählen Sie anhand der Preise für die Datenübertragung von Cloud Storage eine Region aus, in der die niedrigsten Gebühren für die Datenübertragung anfallen.

Jobs in der Dataflow-UI ansehen oder Fehler beheben

Nachdem Sie einen Importjob gestartet haben, können Sie in der Google Cloud Console im Abschnitt "Dataflow" Details zum Job, einschließlich der Logs, ansehen.

Dataflow-Jobdetails ansehen

So rufen Sie Details zu allen Import-/Exportjobs auf, die Sie in der letzten Woche ausgeführt haben, einschließlich aller derzeit ausgeführten Jobs:

  1. Wechseln Sie zur Seite Datenbanküberblick für die Datenbank.
  2. Klicken Sie im linken Bereich auf den Menüpunkt Import/Export. Auf der Datenbankseite Import/Export wird eine Liste der letzten Jobs angezeigt.
  3. Klicken Sie auf der Seite Import/Export der Datenbank in der Spalte Dataflow-Jobname auf den Jobnamen:

    Statusmeldung für laufende Jobs

    In der Google Cloud Console werden Details zum Dataflow-Job angezeigt.

So rufen Sie einen Job auf, den Sie vor mehr als einer Woche ausgeführt haben:

  1. Rufen Sie in der Google Cloud Console die Seite mit den Dataflow-Jobs auf.

    Zur Jobseite

  2. Suchen Sie den Job in der Liste und klicken Sie auf seinen Namen.

    In der Google Cloud Console werden Details zum Dataflow-Job angezeigt.

Dataflow-Logs für den Job ansehen

Rufen Sie wie oben beschrieben die Detailseite des Jobs auf und klicken Sie rechts neben dem Jobnamen auf Logs, um die Logs eines Dataflow-Jobs anzusehen.

Wenn ein Job fehlschlägt, suchen Sie in den Logs nach Fehlern. Falls Fehler aufgetreten sind, ist neben Logs die Fehleranzahl zu sehen:

Beispiel für Fehleranzahl neben der Schaltfläche "Logs"

So sehen Sie sich Jobfehler genauer an:

  1. Klicken Sie auf die Fehleranzahl neben Logs.

    In der Google Cloud Console werden die Logs des Jobs angezeigt. Unter Umständen müssen Sie scrollen, um die Fehler einzublenden.

  2. Suchen Sie nach Einträgen mit dem Fehlersymbol Fehlersymbol.

  3. Klicken Sie auf einen Logeintrag, um ihn zu maximieren.

Weitere Informationen zur Fehlerbehebung bei Dataflow-Jobs finden Sie unter Pipelinefehler beheben.

Fehlerbehebung bei fehlgeschlagenen Importjobs

Wenn in Ihren Joblogs die folgenden Fehler angezeigt werden:

com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found

--or--

com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.

Prüfen Sie in der Google Cloud Console auf dem Tab Monitoring Ihrer Spanner-Datenbank die Schreiblatenz von 99%. Wenn hohe Werte angezeigt werden (mehrere Sekunden), bedeutet dies, dass die Instanz überlastet ist, was zu Schreibfehlern führt.

Eine Ursache für die hohe Latenz ist, dass der Dataflow-Job mit zu vielen Workern ausgeführt wird und die Spanner-Instanz zu stark belastet.

Wenn Sie ein Limit für die Anzahl der Dataflow-Worker festlegen möchten, müssen Sie den Import nicht über den Tab „Import/Export“ auf der Seite mit den Instanzdetails der Spanner-Datenbank in der Google Cloud Console starten. Stattdessen müssen Sie den Import mit der Dataflow-Vorlage Cloud Storage Avro für Cloud Spanner starten und die maximale Anzahl der Worker wie unten beschrieben angeben:
  • Wenn Sie die Dataflow Console verwenden, befindet sich der Parameter Max. Worker im Abschnitt Optionale Parameter auf der Seite Job aus Vorlage erstellen.

  • Wenn Sie gcloud verwenden, geben Sie das Argument max-workers an. Beispiel:

    gcloud dataflow jobs run my-import-job \
    --gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

Langsam laufende Importjobs optimieren

Wenn Sie die Vorschläge für die Anfangseinstellungen befolgt haben, sollten in der Regel keine weiteren Anpassungen nötig sein. Falls der Job jedoch langsam ausgeführt wird, können Sie einige andere Optimierungen versuchen:

  • Job- und Datenspeicherort optimieren: Führen Sie den Dataflow-Job in derselben Region aus, in der sich die Spanner-Instanz und der Cloud Storage-Bucket befinden.

  • Ausreichende Dataflow-Ressourcen gewährleisten: Wenn die Ressourcen Ihres Dataflow-Jobs durch die relevanten Compute Engine-Kontingente eingeschränkt werden, werden auf der Dataflow-Seite des Jobs in der Google Cloud Console ein Warnsymbol Warnungssymbol und Logmeldungen angezeigt:

    Screenshot der Kontingentlimitwarnung

    In diesem Fall kann das Erhöhen der Kontingente für CPUs, verwendete IP-Adressen und nichtflüchtigen Standardspeicher die Ausführungszeit des Jobs verkürzen, aber auch höhere Compute Engine-Gebühren zur Folge haben.

  • Spanner-CPU-Auslastung prüfen: Wenn die CPU-Auslastung für die Instanz über 65 % liegt, können Sie die Rechenkapazität in dieser Instanz erhöhen. Durch die Kapazität werden mehr Spanner-Ressourcen hinzugefügt und der Job sollte beschleunigt werden, aber es fallen höhere Spanner-Gebühren an.

Faktoren, die sich auf die Leistung von Importjobs auswirken

Mehrere Faktoren beeinflussen die Zeit, die für einen Importjob benötigt wird.

  • Größe der Spanner-Datenbank: Die Verarbeitung von mehr Daten erfordert mehr Zeit und Ressourcen.

  • Spanner-Datenbankschema, einschließlich:

    • Die Anzahl der Tabellen
    • Die Größe der Zeilen
    • Anzahl der sekundären Indexe
    • Anzahl der Fremdschlüssel
    • Die Anzahl der Änderungsstreams

Beachten Sie, dass die Index- und Fremdschlüsselerstellung nach Abschluss des Dataflow-Importjobs fortgesetzt wird. Änderungsstreams werden erstellt, bevor der Importjob abgeschlossen ist, aber nachdem alle Daten importiert wurden.

  • Datenspeicherort: Daten werden mit Dataflow zwischen Spanner und Cloud Storage übertragen. Idealerweise befinden sich alle drei Komponenten in derselben Region. Wenn das nicht der Fall ist, dauert das regionsübergreifende Verschieben der Daten länger.

  • Anzahl der Dataflow-Worker: Optimale Dataflow-Worker sind für eine gute Leistung erforderlich. Mithilfe von Autoscaling wählt Dataflow die Anzahl der Worker für einen Job abhängig vom Arbeitsumfang aus. Diese Anzahl wird jedoch durch die Kontingente für CPUs, verwendete IP-Adressen und nichtflüchtigen Standardspeicher begrenzt. In der Dataflow-UI ist ein Warnsymbol zu sehen, wenn Kontingentobergrenzen erreicht werden. In diesem Fall dauert die Verarbeitung länger, aber der Job sollte dennoch abgeschlossen werden. Autoscaling kann Spanner überlasten, was zu Fehlern führt, wenn eine große Datenmenge importiert wird.

  • Bestehende Auslastung von Spanner: Ein Importjob erhöht die CPU-Auslastung für eine Spanner-Instanz erheblich. Wenn die Instanz jedoch bereits eine erhebliche bestehende Auslastung aufweist, wird der Job langsamer ausgeführt.

  • Menge der Spanner-Rechenkapazität: Wenn die CPU-Auslastung für die Instanz über 65 % liegt, wird der Job langsamer ausgeführt.

Worker auf eine gute Importleistung abstimmen

Beim Starten eines Spanner-Importjobs müssen Dataflow-Worker auf einen optimalen Wert für eine gute Leistung gesetzt werden. Zu viele Worker überlasten Spanner und zu wenige Worker führen zu einer überfordernden Importleistung.

Die maximale Anzahl von Workern hängt stark von der Datengröße ab. Im Idealfall sollte die gesamte CPU-Auslastung von Spanner zwischen 70 % und 90 % liegen. Dies bietet ein gutes Gleichgewicht zwischen Spanner-Effizienz und fehlerfreier Jobvervollständigung.

Damit dieses Auslastungsziel bei den meisten Schemas/Szenarien erreicht wird, empfehlen wir eine maximale Anzahl von Worker-vCPUs zwischen dem Vier- und Sechsfachen der Anzahl der Spanner-Knoten.

Beispiel: Für eine 10-Knoten-Schlüsselinstanz, die n1-Standard-2-Worker verwendet, würden Sie die maximale Anzahl an Workern auf 25 setzen, was 50 vCPUs ergibt.