Auf dieser Seite wird beschrieben, wie Sie Spanner-Datenbanken mit derGoogle Cloud -Console exportieren.
Führen Sie die Schritte im Abschnitt Vorbereitung auf dieser Seite aus, um eine Spanner-Datenbank mit der REST API oder der Google Cloud CLI zu exportieren. Lesen Sie dann die detaillierte Anleitung unter Spanner für Cloud Storage Avro in der Dataflow-Dokumentation. Dabei werden die Daten mit Dataflow 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 APIs für Spanner, Cloud Storage, Compute Engine und Dataflow aktivieren:
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 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 Exportieren müssen Sie einen Bucket für die exportierten Dateien erstellen, sofern noch keiner vorhanden ist. Das können Sie in der Google Cloud -Console erledigen – entweder auf der 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
In der Regel sind keine weiteren Anpassungen erforderlich. 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.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Dataflow-Arbeiterdienstkonto zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Exportieren einer Datenbank benötigen:
-
Cloud Spanner-Betrachter (
roles/spanner.viewer
) -
Dataflow-Worker (
roles/dataflow.worker
) -
Storage-Administrator (
roles/storage.admin
) -
Spanner-Datenbankleser (
roles/spanner.databaseReader
) -
Datenbankadministrator (
roles/spanner.databaseAdmin
)
Wenn Sie die unabhängigen Rechenressourcen von Spanner Data Boost während eines Exports 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 oben beschriebenen Kontingent- und IAM-Anforderungen erfüllen, können Sie eine vorhandene Spanner-Datenbank exportieren.
So exportieren Sie Ihre Spanner-Datenbank in einen Cloud Storage-Bucket:
Rufen Sie die Seite Spanner-Instanzen auf.
Klicken Sie auf den Namen der Instanz, die die Datenbank enthält.
Klicken Sie im linken Bereich auf den Menüpunkt Import/Export und dann auf die Schaltfläche Export.
Klicken Sie unter Speicherort für den Export auswählen auf Durchsuchen.
Wenn Sie noch keinen Cloud Storage-Bucket für den Export haben:
- Klicken Sie auf Neuer Bucket .
- Geben Sie einen Namen für den Bucket ein. Bucket-Namen in Cloud Storage dürfen nur einmal vorkommen.
- Wählen Sie eine Standardspeicherklasse und einen Speicherort aus und klicken Sie auf Erstellen.
- 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 , damit Sie die Liste filtern können. Klicken Sie dann auf den entsprechenden Bucket, um ihn auszuwählen.
Klicken Sie auf Auswählen.
Wählen Sie im Drop-down-Menü Datenbank für den Export auswählen die zu exportierende Datenbank aus.
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.
Wählen Sie im Drop-down-Menü Region für den Exportjob auswählen eine Region aus.
Optional: So verschlüsseln Sie den Dataflow-Pipelinestatus mit einem vom Kunden verwalteten Verschlüsselungsschlüssel:
- Klicken Sie auf Verschlüsselungsoptionen anzeigen.
- Wählen Sie Vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verwenden aus.
- 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 den Cloud Storage-Bucket finden Sie unter CMEK mit Cloud Storage verwenden.
Optional: Wenn Sie mit Spanner Data Boost exportieren möchten, setzen Sie ein Häkchen in das Kästchen Spanner Data Boost verwenden. Weitere Informationen finden Sie unter Data Boost-Übersicht.
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.
Klicken Sie auf Exportieren.
In der Google Cloud -Console wird die Seite Datenbankimport/-export angezeigt. In der Liste der Import-/Exportjobs ist jetzt eine Position für Ihren Exportjob zu sehen, einschließlich der verstrichenen Zeit:
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:
Wenn der Job fehlgeschlagen ist, wird der Status Fehlgeschlagen angezeigt:
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. Informationen zum Suchen des Ordners finden Sie unter Export ansehen.
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 zum Abschluss des Backfill-Vorgangs für eine neu hinzugefügte Spalte wird die generierte Spalte ignoriert, als wäre sie im Schema nicht vorhanden.
Als Avro-Dateien exportierte Änderungsstreams enthalten nur das Schema der Änderungsstreams und keine Datenänderungssätze.
Hinweis zum Exportieren von Sequenzen
Sequenzen (GoogleSQL, PostgreSQL) sind Schemaobjekte, mit denen Sie eindeutige Ganzzahlwerte generieren.
Spanner exportiert jedes Schemaobjekt als Eintragsfeld in das Avro-Schema, wobei die Sequenzsorte, der übersprungene Bereich und der Zähler als Eigenschaften des Felds angegeben werden. Damit eine Sequenz nach dem Import nicht zurückgesetzt wird und es zu doppelten Werten kommt, wird beim Schemaexport die Funktion GET_INTERNAL_SEQUENCE_STATE()
(GoogleSQL, PostgreSQL) verwendet, um den Sequenzzähler zu erfassen. Spanner fügt dem Zähler einen Puffer von 1.000 hinzu und schreibt den neuen Zählerwert in das Datensatzfeld. So lassen sich Fehler bei doppelten Werten vermeiden, die nach dem Import auftreten können.
Wenn während des Datenexports mehr Schreibvorgänge in der Quelldatenbank ausgeführt werden, sollten Sie den tatsächlichen Sequenzzähler mithilfe der Anweisung ALTER SEQUENCE
(GoogleSQL, PostgreSQL) anpassen.
Beim Import beginnt die Sequenz mit diesem neuen Zähler anstelle des im Schema gefundenen Zählers. 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
Wechseln Sie zum Cloud Storage-Browser und wählen Sie den Bucket aus, den Sie zuvor ausgewählt haben, um in derGoogle Cloud -Console den Ordner anzusehen, der die exportierte Datenbank enthält:
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 TabelleSongs
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 nur leere Daten mit dem Avro-Schema des Änderungsstreams.
Region für Importjob auswählen
Welche Region Sie auswählen, hängt vom Speicherort Ihres Cloud Storage-Bucket ab. Um Kosten für ausgehende Datenübertragungen zu vermeiden, wählen Sie eine Region aus, die mit dem Speicherort Ihres Cloud Storage-Bucket übereinstimmt.
Wenn der Speicherort Ihres Cloud Storage-Bucket eine Region ist, können Sie von der kostenlosen Netzwerknutzung profitieren, indem Sie dieselbe Region auch für den Importjob auswählen, sofern diese Region verfügbar ist.
Wenn sich der Speicherort Ihres Cloud Storage-Bucket in einer Region mit zwei Speicherorten befindet, können Sie von der kostenlosen Netzwerknutzung profitieren, indem Sie eine der beiden Regionen für Ihren Importjob auswählen, sofern eine der Regionen verfügbar ist.
Wenn für Ihren Importjob keine Region mit demselben Standort verfügbar ist oder sich der Speicherort Ihres Cloud Storage-Bucket in einer multiregionalen Region befindet, fallen Gebühren für ausgehende Datenübertragungen an. Wählen Sie anhand der Cloud Storage-Preisliste für Datenübertragungen eine Region aus, in der die Gebühren für die Datenübertragung möglichst gering sind.
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 sind in der exportierten Datei vorhanden, aber leer.
Sie können entweder über die Seite „Dataflow“ in der Google Cloud -Konsole oder über die gcloud CLI eine Teilmenge der Tabellen angeben, die exportiert werden sollen. Auf der Spanner-Seite ist diese Aktion nicht verfügbar.
Wenn Sie die Daten einer Tabelle exportieren, die einer anderen Tabelle untergeordnet ist, sollten Sie auch die Daten der übergeordneten Tabelle exportieren. Wenn übergeordnete Elemente nicht exportiert werden, schlägt der Exportjob fehl.
Wenn Sie eine Teilmenge von Tabellen exportieren möchten, starten Sie den Export mit der Spanner to Cloud Storage Avro-Vorlage von Dataflow und geben Sie die Tabellen entweder auf der Dataflow-Seite in der Google Cloud -Konsole oder mit der gcloud CLI an, wie unten beschrieben:
Console
Wenn Sie die Dataflow-Seite in der Google Cloud -Console verwenden, befindet sich der Parameter Name(n) der Cloud Spanner-Tabelle(n) im Abschnitt Optionale Parameter auf der Seite Job aus Vorlage erstellen. Mehrere Tabellen können in einem kommagetrennten Format angegeben werden.
gcloud
Führen Sie den Befehl gcloud dataflow jobs run
aus und geben Sie das 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 \
--network=network-123
Wenn Sie mehrere Tabellen in gcloud angeben möchten, müssen Sie Argumente vom Typ „Dictionary“ aussparen.
Im folgenden Beispiel wird |
als Escape-Zeichen 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 \
--network=network-123
Der Parameter shouldExportRelatedTables
ist eine praktische Option, um alle übergeordneten Tabellen der ausgewählten Tabellen automatisch zu exportieren. In dieser Schemahierarchie mit den Tabellen Singers
, Albums
und Songs
müssen Sie beispielsweise nur Songs
angeben. Mit der Option shouldExportRelatedTables
werden auch Singers
und Albums
exportiert, da Songs
ein Abkömmling beider 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 \
--network=network-123
Jobs in der Dataflow-UI ansehen und Probleme beheben
Nachdem Sie einen Exportjob gestartet haben, können Sie Details zum Job, einschließlich der Logs, im Bereich „Dataflow“ der Google Cloud -Konsole ansehen.
Dataflow-Jobdetails ansehen
So rufen Sie Details zu allen Import- oder Exportjobs auf, die Sie in der letzten Woche ausgeführt haben, einschließlich aller derzeit ausgeführten Jobs:
- Wechseln Sie zur Seite Datenbanküberblick für die Datenbank.
- Klicken Sie im linken Bereich auf den Menüpunkt Import/Export. Auf der Datenbankseite Import/Export wird eine Liste der letzten Jobs angezeigt.
Klicken Sie auf der Seite Import/Export der Datenbank in der Spalte Dataflow-Jobname auf den Jobnamen:
Die Google Cloud -Console zeigt Details des Dataflow-Jobs an.
So rufen Sie einen Job auf, den Sie vor mehr als einer Woche ausgeführt haben:
Rufen Sie in der Google Cloud -Console die Seite „Dataflow-Jobs“ auf.
Suchen Sie den Job in der Liste und klicken Sie auf seinen Namen.
Die Google Cloud -Console zeigt Details des Dataflow-Jobs an.
Dataflow-Logs für einen Job aufrufen
Rufen Sie die Detailseite des Jobs auf und klicken Sie rechts neben dem Jobnamen auf Protokolle, 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:
So sehen Sie sich Jobfehler genauer an:
Klicken Sie auf die Fehleranzahl neben Protokolle.
In der Google Cloud -Console können Sie die Logs des Jobs ansehen. Unter Umständen müssen Sie scrollen, um die Fehler einzublenden.
Suchen Sie nach Einträgen mit dem Fehlersymbol .
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 die 99 %-Leselatenz auf dem Tab Monitoring Ihrer Spanner-Datenbank in derGoogle Cloud -Console. Wenn hohe Werte angezeigt werden (mehrere Sekunden), bedeutet dies, dass die Instanz überlastet ist, was zu Lesefehlern führt.
Eine Ursache für eine hohe Latenz ist, dass der Dataflow-Job mit zu vielen Workern ausgeführt wird und die Spanner-Instanz zu stark belastet wird.
Wenn Sie die Anzahl der Dataflow-Worker begrenzen möchten, anstatt den Tab „Import/Export“ auf der Seite mit den Instanzdetails Ihrer Spanner-Datenbank in der Google Cloud -Konsole zu verwenden, müssen Sie den Export mit der Dataflow-Vorlage Spanner in Cloud Storage Avro starten und die maximale Anzahl der Worker angeben, wie unten beschrieben:Console
Wenn Sie die Dataflow Console verwenden, befindet sich der Parameter Max. Worker im Abschnitt Optionale Parameter auf der Seite Job aus Vorlage erstellen.
gcloud
Führen Sie den Befehl gcloud dataflow jobs run
aus und 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 \
--network=network-123
Netzwerkfehler beheben
Der folgende Fehler kann auftreten, wenn Sie Ihre Spanner-Datenbanken exportieren:
Workflow failed. Causes: Error: Message: Invalid value for field 'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface must specify a subnet if the network resource is in custom subnet mode. HTTP Code: 400
Dieser Fehler tritt auf, weil Spanner davon ausgeht, dass Sie im selben Projekt wie der Dataflow-Job ein VPC-Netzwerk im automatischen Modus namens default
verwenden möchten. Wenn Sie im Projekt kein Standard-VPC-Netzwerk haben oder für Ihr VPC-Netzwerk der benutzerdefinierte Modus gilt, müssen Sie einen Dataflow-Job erstellen und ein alternatives Netzwerk oder Subnetzwerk angeben.
Langsam laufende 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 der Region der Spanner-Instanz und des Cloud Storage-Bucket aus.
Ausreichende Dataflow-Ressourcen bereitstellen: Sind die Ressourcen für den Dataflow-Job durch die entsprechenden Compute Engine-Kontingente eingeschränkt, sind auf der Dataflow-Seite des Jobs in der Google Cloud -Konsole ein Warnsymbol und Logmeldungen zu sehen:
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. Die zusätzliche Kapazität liefert mehr Spanner-Ressourcen, damit der Job schneller ausgeführt wird, aber es fallen auch höhere Spanner-Gebühren an.
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:
- Anzahl der Tabellen
- Größe der Zeilen
- Anzahl der sekundären Indexe
- Die Anzahl der Fremdschlüssel
- 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 normalerweise 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.