Datenbanken aus Spanner nach Avro exportieren

Auf dieser Seite wird beschrieben, wie Sie Spanner-Datenbanken mit der Google Cloud Console exportieren. Führen Sie die Schritte im Abschnitt Vorbereitung auf dieser Seite aus, um eine Spanner-Datenbank mit der REST API oder dem gcloud spanner-Befehlszeilentool zu exportieren. Lesen Sie dann die detaillierte Anleitung unter Spanner zu Cloud Storage Avro in der Dataflow-Dokumentation. Beim Exportvorgang wird Dataflow verwendet und Daten in einen Ordner in einem Cloud Storage-Bucket geschrieben. Dieser Ordner enthält eine Reihe von Avro-Dateien und JSON-Manifestdateien.

Hinweise

Zum Exportieren einer Spanner-Datenbank müssen Sie zuerst die Spanner, 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 Exportjobs gelten folgende Kontingentanforderungen:

  • Spanner: Für den Export einer Datenbank ist keine zusätzliche Rechenkapazität erforderlich. Allerdings müssen Sie unter Umständen weitere Rechenkapazitäten hinzufügen, damit der Job in angemessener Zeit abgeschlossen wird. Weitere Informationen finden Sie unter Jobs optimieren.
  • Cloud Storage: Zum Exportieren müssen Sie einen Bucket für die exportierten Dateien erstellen, sofern noch keiner vorhanden ist. Das ist in der Google Cloud Console möglich – entweder über die Cloud Storage-Seite oder beim Erstellen des Exports auf der Spanner-Seite. Für den Bucket muss keine Größe festgelegt werden.
  • Dataflow: Bei Exportjobs gelten die gleichen Compute Engine-Kontingente für CPU, Laufwerksauslastung und IP-Adressen wie bei anderen Dataflow-Jobs.
  • Compute Engine: Bevor Sie den Exportjob ausführen, müssen Sie zuerst Kontingente für Compute Engine einrichten, die von Dataflow verwendet werden. Diese Kontingente stellen die maximale Anzahl an Ressourcen dar, die Dataflow für Ihren Job verwenden darf. Empfohlene Anfangswerte sind:

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

    Sie müssen in der Regel keine weiteren Anpassungen vornehmen. Dataflow bietet Autoscaling, sodass Sie nur für die Ressourcen zahlen, die beim Export 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 Exportieren einer Datenbank brauchen Sie außerdem IAM-Rollen mit ausreichenden Berechtigungen, damit alle für den Exportjob nötigen Dienste genutzt werden können. Informationen zum Gewähren von Rollen und Berechtigungen finden Sie unter IAM-Rollen anwenden.

Sie benötigen folgende Rollen für den Export einer Datenbank:

Wenn Sie während eines Exports die unabhängigen Rechenressourcen von Spanner Data Boost verwenden möchten, benötigen Sie außerdem die IAM-Berechtigung spanner.databases.useDataBoost. Weitere Informationen finden Sie unter Data Boost – Übersicht.

Datenbank exportieren

Wenn Sie die zuvor beschriebenen Kontingent- und IAM-Anforderungen erfüllen, können Sie eine vorhandene Spanner-Datenbank exportieren.

So exportieren Sie die Spanner-Datenbank in einen Cloud Storage-Bucket:

  1. Rufen Sie die Seite Spanner-Instanzen auf.

    Zur Seite "Instanzen"

  2. Klicken Sie auf den Namen der Instanz, die die Datenbank enthält.

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

  4. Klicken Sie unter Speicherort für den Export auswählen auf Durchsuchen.

  5. Wenn Sie noch keinen Cloud Storage-Bucket für den Export haben:

    1. Klicken Sie auf Neuer Bucket Screenshot des UI-Elements für einen neuen Bucket.
    2. Geben Sie einen Namen für den Bucket ein. Bucket-Namen in Cloud Storage dürfen nur einmal vorkommen.
    3. Wählen Sie eine Standardspeicherklasse und einen Speicherort aus und klicken Sie auf Erstellen.
    4. Klicken Sie auf den Bucket, um ihn auszuwählen.

    Wenn bereits ein Bucket vorhanden ist, wählen Sie ihn entweder aus der angezeigten Liste aus oder klicken Sie auf Suchen Screenshot des UI-Elements zum Suchen, damit Sie die Liste filtern können. Klicken Sie dann auf den entsprechenden Bucket, um ihn auszuwählen.

  6. Klicken Sie auf Auswählen.

  7. Wählen Sie im Drop-down-Menü Datenbank für den Export auswählen die zu exportierende Datenbank aus.

  8. Optional: Wenn Sie die Datenbank von einem früheren Zeitpunkt exportieren möchten, klicken Sie das Kästchen an und geben Sie einen Zeitstempel ein.

  9. Wählen Sie im Drop-down-Menü Region für den Exportjob auswählen eine Region aus.

  10. Optional: So verschlüsseln Sie den Dataflow-Pipelinestatus mit einem vom Kunden verwalteten Verschlüsselungsschlüssel:

    1. Klicken Sie auf Verschlüsselungsoptionen anzeigen.
    2. Wählen Sie Vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verwenden aus.
    3. Wählen Sie Ihren Schlüssel aus der Drop-down-Liste aus.

    Diese Option wirkt sich nicht auf die Verschlüsselung auf Cloud Storage-Zielebene aus. Informationen zum Aktivieren von CMEK für Ihren Cloud Storage-Bucket finden Sie unter CMEK mit Cloud Storage verwenden.

  11. Optional: Klicken Sie für den Export mit Spanner Data Boost das Kästchen Spanner Data Boost verwenden an. Weitere Informationen finden Sie unter Data Boost – Übersicht.

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

  13. Klicken Sie auf Exportieren.

    In der Google Cloud Console wird die Seite Datenbankimport/-export angezeigt, auf der jetzt eine Position für Ihren Exportjob in der Liste der Import-/Exportjobs einschließlich der verstrichenen Zeit des Jobs angezeigt wird:

    Screenshot eines laufenden Jobs

Wenn der Job beendet oder abgebrochen wird, wird der Status in der Import-/Exportliste aktualisiert. Wenn der Job erfolgreich ausgeführt wurde, wird der Status Succeeded (Erfolgreich) angezeigt:

Erfolgsmeldung für Exportjob

Wenn der Job fehlgeschlagen ist, wird der Status Fehlgeschlagen angezeigt:

Fehlermeldung für Exportjob

Klicken Sie auf den Namen des Jobs in der Spalte Dataflow-Jobname, um die Details des Dataflow-Vorgangs für Ihren Job aufzurufen.

Falls der Job fehlschlägt, sehen Sie sich die Fehlerdetails in den Dataflow-Logs des Jobs an.

Löschen Sie den Ordner und die Dateien, die durch den fehlgeschlagenen Exportjob erstellt wurden, um Cloud Storage-Gebühren für diese Dateien zu vermeiden. Unter Export ansehen erfahren Sie, wie Sie den Ordner finden.

Hinweis zum Exportieren generierter Spalten und Änderungsstreams

Die Werte in einer gespeicherten generierten Spalte werden nicht exportiert. Die Spaltendefinition wird als Eintragsfeld vom Typ Null als Teil des Avro-Schemas exportiert, wobei die Spaltendefinition als benutzerdefinierte Attribute des Felds angegeben wird. Bis der Backfill-Vorgang für eine neu hinzugefügte Spalte abgeschlossen ist, wird die generierte Spalte so ignoriert, als wäre sie im Schema nicht vorhanden.

Als Avro-Dateien exportierte Änderungsstreams enthalten nur das Schema der Änderungsstreams und keine Datenänderungseinträge.

Hinweis zum Exportieren von Sequenzen

Sequenzen (GoogleSQL, PostgreSQL) sind Schemaobjekte, mit denen Sie eindeutige Ganzzahlwerte generieren. Spanner exportiert jedes Schemaobjekt als Datensatzfeld in das Avro-Schema. Dabei werden die Sequenzart, der übersprungene Bereich und der Zähler als Attribute des Felds verwendet. Damit eine Sequenz nicht zurückgesetzt wird und nach dem Import doppelte Werte generiert werden, erfasst die Funktion GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) während des Schemaexports den Sequenzzähler. Spanner fügt dem Zähler einen Puffer von 1.000 hinzu und schreibt den neuen Zählerwert in das Eintragsfeld. Auf diese Weise werden Fehler durch doppelte Werte vermieden, die nach dem Import auftreten können. Wenn während des Datenexports mehr Schreibvorgänge in die Quelldatenbank auftreten, sollten Sie den tatsächlichen Sequenzzähler mithilfe der Anweisung ALTER SEQUENCE (GoogleSQL, PostgreSQL) anpassen.

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

Export in Cloud Storage ansehen

Wenn Sie den Ordner mit der exportierten Datenbank in der Google Cloud Console ansehen möchten, rufen Sie den Cloud Storage-Browser auf und wählen Sie den zuvor ausgewählten Bucket aus:

Zum Cloud Storage-Browser

Der Bucket enthält jetzt einen Ordner mit der exportierten Datenbank. Der Ordnername beginnt mit der ID Ihrer Instanz, dem Datenbanknamen und dem Zeitstempel des Exportjobs. Der Ordner enthält:

  • 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.

Region für den Importjob auswählen

Sie können je nach Standort Ihres Cloud Storage-Bucket eine andere Region 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 Standort Ihres Cloud Storage-Bucket eine Region ist, können Sie von der kostenlosen Netzwerknutzung profitieren. Dazu wählen Sie dieselbe Region auch für den Importjob aus, vorausgesetzt, diese Region ist verfügbar.

  • Wenn der Speicherort Ihres Cloud Storage-Bucket zwei Regionen ist, können Sie von der kostenlosen Netzwerknutzung profitieren. 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 wenn der Standort Ihres Cloud Storage-Bucket multiregional ist, 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.

Teilmenge von Tabellen exportieren

Wenn Sie nur die Daten aus bestimmten Tabellen und nicht die gesamte Datenbank exportieren möchten, können Sie diese Tabellen beim Export angeben. In diesem Fall exportiert Spanner das gesamte Schema der Datenbank, einschließlich der Daten der von Ihnen angegebenen Tabellen. Alle anderen Tabellen in der exportierten Datei sind vorhanden, aber leer.

Sie können eine Teilmenge der zu exportierenden Tabellen entweder über die Dataflow-Seite in der Google Cloud Console oder die Befehlszeile angeben. Auf der Seite „Spanner“ ist diese Aktion nicht möglich.

Wenn Sie die Daten einer Tabelle exportieren, die einer anderen Tabelle untergeordnet ist, sollten Sie auch die Daten der parent Tabelle exportieren. Wenn keine übergeordneten Elemente exportiert werden, schlägt der Exportjob fehl.

Wenn Sie eine Teilmenge von Tabellen exportieren möchten, starten Sie den Export mit der Dataflow-Vorlage Spanner zu Cloud Storage Avro und geben Sie die Tabellen entweder auf der Dataflow-Seite in der Google Cloud Console oder über die Google Cloud CLI an, wie unten beschrieben:

Google Cloud Console

Wenn Sie die Seite „Dataflow“ in der Google Cloud Console verwenden, finden Sie den Parameter Cloud Spanner-Tabellenname auf der Seite Job aus Vorlage erstellen im Abschnitt Optionale Parameter. Mehrere Tabellen können in einem durch Kommas getrennten Format angegeben werden.

gcloud-CLI

Wenn Sie die Google Cloud CLI verwenden, geben Sie die Tabelle mit dem Argument tableNames an. Beispiel:

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

Wenn Sie mehrere Tabellen in gcloud angeben, ist ein Escapezeichen für Argumente im Wörterbuchtyp erforderlich. Im folgenden Beispiel wird „|“ als Escapezeichen verwendet:

 gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='^|^instanceId=test-instance|databaseId=example-db|tableNames=table1,table2|outputDir=gs://my-gcs-bucket' \
--max-workers=10

Der Parameter shouldExportRelatedTables ist eine bequeme Option, um automatisch alle übergeordneten Tabellen der gewünschten Tabellen zu exportieren. In dieser Schemahierarchie mit den Tabellen Singers, Albums und Songs muss beispielsweise nur Songs angegeben werden. Mit der Option shouldExportRelatedTables werden auch Singers und Albums exportiert, da Songs ein Nachfolger von beiden ist.

gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=Songs,shouldExportRelatedTables=true,outputDir=gs://my-gcs-bucket' \
--max-workers=10

Jobs in der Dataflow-UI ansehen oder Fehler beheben

Nachdem Sie einen Exportjob gestartet haben, können Sie in der Google Cloud Console im Abschnitt „Dataflow“ Details zum Job, einschließlich 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 „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 Exportjobs

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 der Spanner-Datenbank die Leselatenz von 99%. Wenn hohe Werte angezeigt werden (mehrere Sekunden), bedeutet dies, dass die Instanz überlastet ist, was zu Lesefehlern 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 angeben möchten, müssen Sie den Export nicht in der Google Cloud Console auf der Seite mit den Instanzdetails der Spanner-Datenbank über den Tab „Import/Export“ verwenden. Stattdessen müssen Sie den Export mit der Vorlage Cloud Spanner für Cloud Storage Avro starten und die maximale Anzahl von Workern 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-export-job \
    --gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,outputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

Langsam ausgeführte Exportjobs 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 prüfen: Wenn die entsprechenden Compute Engine-Kontingente die Ressourcen Ihres Dataflow-Jobs einschränken, werden auf der Dataflow-Seite des Jobs in der Google Cloud Console ein Warnsymbol Warnungssymbol und Logeinträge 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 zusätzliche Spanner-Ressourcen hinzugefügt und der Job sollte beschleunigt werden, es entstehen aber höhere Kosten für Spanner.

Faktoren, die sich auf die Leistung von Exportjobs auswirken

Mehrere Faktoren beeinflussen die Zeit, die für einen Exportjob 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

  • 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.

  • Bestehende Auslastung von Spanner: Ein Exportjob stellt in der Regel eine geringe Last für eine Spanner-Instanz dar. 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.