Auf dieser Seite wird beschrieben, wie Sie Daten aus Cloud Spanner in CSV-Dateien exportieren oder Daten aus CSV-Dateien in Cloud Spanner-Datenbanken mit GoogleSQL-Dialekt oder PostgreSQL-Dialekt importieren.
- Wenn Sie eine Spanner-Datenbank importieren möchten, die Sie zuvor in Avro-Dateien in Cloud Storage exportiert haben, lesen Sie den Abschnitt Spanner-Avro-Dateien importieren.
- Wenn Sie Avro-Dateien aus einer Nicht-Spanner-Datenbank importieren möchten, lesen Sie den Abschnitt Daten aus Nicht-Spanner-Datenbanken importieren.
Der Vorgang verwendet Dataflow. Sie können Daten aus Spanner in einen Cloud Storage-Bucket exportieren oder Daten aus einem Cloud Storage-Bucket, der eine JSON-Manifestdatei und eine Reihe von CSV-Dateien enthält, in Spanner importieren.
Hinweis
Wenn Sie eine Spanner-Datenbank importieren oder exportieren möchten, müssen Sie zuerst die APIs für Spanner, Cloud Storage, Compute Engine und Dataflow API aktivieren:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten.
Informationen zum Zuweisen von Rollen
Außerdem brauchen Sie ein ausreichend großes Kontingent und die erforderlichen IAM-Berechtigungen.
Kontingentanforderungen
Für Import- oder Exportjobs gelten die folgenden Kontingentanforderungen:
- Spanner: Sie müssen über genügend Rechenkapazität verfügen, um die zu importierende Datenmenge zu unterstützen. Für den Import oder 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 Importieren benötigen Sie einen Bucket mit Ihren zuvor exportierten Dateien. Für den Export müssen Sie einen Bucket für Ihre exportierten Dateien erstellen, falls Sie noch keinen haben. Sie können dies in der Google Cloud Console tun, entweder über die Cloud Storage-Seite oder beim Erstellen des Exports über die Spanner-Seite. Sie müssen keine Größe für Ihren Bucket festlegen.
- Dataflow: Für Importjobs gelten die gleichen Compute Engine-Kontingente für CPU, Laufwerksnutzung und IP-Adressen wie für andere Dataflow-Jobs.
Compute Engine: Bevor Sie den Import- oder Exportjob ausführen, müssen Sie 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 müssen Sie keine weiteren Anpassungen vornehmen. Dataflow bietet Autoscaling, sodass Sie nur für die Ressourcen zahlen, die beim Import oder Export tatsächlich verwendet werden. Wenn Ihr Job mehr Ressourcen verwenden kann, ist in der Dataflow-UI ein Warnsymbol zu sehen. Der Job sollte trotz dieses Warnsymbols beendet werden.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Dataflow-Worker-Dienstkonto zuzuweisen, 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) - Database Admin (
roles/spanner.databaseAdmin)
Spanner-Daten in CSV-Dateien exportieren
Wenn Sie Daten aus Spanner in CSV-Dateien in Cloud Storage exportieren möchten, folgen Sie der Anleitung zur Verwendung der Google Cloud CLI, um einen Job mit der Vorlage „Spanner für Cloud Storage Text“ auszuführen.
Sie können auch die Informationen auf dieser Seite zur Optimierung langsamer Jobs und zu Faktoren, die sich auf die Jobleistung auswirken, lesen.
Daten aus CSV-Dateien in Cloud Spanner importieren
Der Vorgang zum Importieren von Daten aus CSV-Dateien umfasst die folgenden Schritte:
- Exportieren Sie Ihre Daten in CSV-Dateien und speichern Sie diese in Cloud Storage. Fügen Sie keine Kopfzeile ein.
- Erstellen Sie eine JSON-Manifestdatei und speichern Sie die Datei zusammen mit Ihren CSV-Dateien.
- Erstellen Sie leere Zieltabellen in Ihrer Spanner-Datenbank oder achten Sie darauf, dass die Datentypen für Spalten in Ihren CSV-Dateien mit den entsprechenden Spalten in Ihren vorhandenen Tabellen übereinstimmen.
- Führen Sie den Importjob aus.
Schritt 1: Daten aus einer Nicht-Spanner-Datenbank in CSV-Dateien exportieren
Beim Importieren werden Daten aus CSV-Dateien, die sich in einem Cloud Storage-Bucket befinden, geholt. Sie können Daten aus jeder Quelle im CSV-Format exportieren.
Beachten Sie beim Exportieren Ihrer Daten folgende Punkte:
- Zu importierende Textdateien müssen im CSV-Format vorliegen.
Die Daten müssen einem der folgenden Typen entsprechen:
GoogleSQL
BOOL INT64 FLOAT64 NUMERIC STRING DATE TIMESTAMP BYTES JSON
PostgreSQL
boolean bigint double precision numeric character varying, text date timestamp with time zone bytea
Sie müssen beim Exportieren der CSV-Dateien keine Metadaten einfügen oder generieren.
Sie müssen für Ihre Dateien keine bestimmte Namenskonvention einhalten.
Wenn Sie Ihre Dateien nicht direkt nach Cloud Storage exportieren, müssen Sie die CSV-Dateien in einen Cloud Storage-Bucket hochladen.
Schritt 2: JSON-Manifestdatei erstellen
Außerdem müssen Sie eine Manifestdatei mit einer JSON-Beschreibung der zu importierenden Dateien erstellen und in demselben Cloud Storage-Bucket speichern, in dem Sie Ihre CSV-Dateien gespeichert haben. Diese Manifestdatei enthält ein tables-Array, in dem Name und Speicherort der Datendatei für jede Tabelle aufgeführt sind. In der Datei wird auch der Dialekt der Zieldatenbank angegeben.
Wenn der Dialekt weggelassen wird, wird standardmäßig GoogleSQL verwendet.
Das Format der Manifestdatei entspricht dem folgenden Nachrichtentyp, der hier im Protokollpufferformat dargestellt wird:
message ImportManifest {
// The per-table import manifest.
message TableManifest {
// Required. The name of the destination table.
string table_name = 1;
// Required. The CSV files to import. This value can be either a filepath or a glob pattern.
repeated string file_patterns = 2;
// The schema for a table column.
message Column {
// Required for each Column that you specify. The name of the column in the
// destination table.
string column_name = 1;
// Required for each Column that you specify. The type of the column.
string type_name = 2;
}
// Optional. The schema for the table columns.
repeated Column columns = 3;
}
// Required. The TableManifest of the tables to be imported.
repeated TableManifest tables = 1;
enum ProtoDialect {
GOOGLE_STANDARD_SQL = 0;
POSTGRESQL = 1;
}
// Optional. The dialect of the receiving database. Defaults to GOOGLE_STANDARD_SQL.
ProtoDialect dialect = 2;
}
Das folgende Beispiel zeigt eine Manifestdatei für den Import von Tabellen mit den Namen Albums und Singers in eine Datenbank im GoogleSQL-Dialekt. Die Tabelle Albums verwendet das Spaltenschema, das der Job aus der Datenbank abruft. Die Tabelle Singers verwendet das Schema, das in der Manifestdatei angegeben ist:
{
"tables": [
{
"table_name": "Albums",
"file_patterns": [
"gs://bucket1/Albums_1.csv",
"gs://bucket1/Albums_2.csv"
]
},
{
"table_name": "Singers",
"file_patterns": [
"gs://bucket1/Singers*.csv"
],
"columns": [
{"column_name": "SingerId", "type_name": "INT64"},
{"column_name": "FirstName", "type_name": "STRING"},
{"column_name": "LastName", "type_name": "STRING"}
]
}
]
}Schritt 3: Tabelle für die Spanner-Datenbank erstellen
Bevor Sie den Import ausführen, müssen Sie die Zieltabellen in Ihrer Spanner-Datenbank erstellen. Wenn die Spanner-Zieltabelle bereits über ein Schema verfügt, müssen alle in der Manifestdatei angegebenen Spalten dieselben Datentypen wie die entsprechenden Spalten im Schema der Zieltabelle haben.
Wir empfehlen, sekundäre Indexe, Fremdschlüssel und Änderungsstreams nach dem Importieren der Daten in Spanner zu erstellen, nicht beim ersten Erstellen der Tabelle. Wenn Ihre Tabelle diese Strukturen bereits enthält, empfehlen wir, sie zu löschen und nach dem Importieren der Daten neu zu erstellen.
Schritt 4: Dataflow-Importjob mit gcloud ausführen
Wenn Sie den Importjob starten möchten, folgen Sie der Anleitung zur Verwendung der gcloud CLI, um einen Job mit der Cloud Storage-Vorlage „Text zu Spanner“ auszuführen.
Nachdem Sie einen Importjob gestartet haben, können Sie in der Google Cloud Console Details zum Job aufrufen.
Fügen Sie nach Abschluss des Importjobs alle erforderlichen sekundären Indexe, Fremdschlüssel und Änderungsstreams hinzu.
Wählen Sie eine Region für den Importjob aus.
Je nach Standort Ihres Cloud Storage-Bucket sollten Sie eventuell eine andere Region auswählen. Wählen Sie eine Region aus, die dem Standort Ihres Cloud Storage-Bucket entspricht, um Gebühren für die ausgehende Datenübertragung zu vermeiden.
Wenn der Standort Ihres Cloud Storage-Bucket eine Region ist, können Sie die kostenlose Netzwerknutzung nutzen, indem Sie dieselbe Region für Ihren Importjob auswählen, sofern diese Region verfügbar ist.
Wenn sich Ihr Cloud Storage-Bucket in einer Dual-Region befindet, können Sie die kostenlose Netzwerknutzung in Anspruch nehmen, indem Sie eine der beiden Regionen, aus denen die Dual-Region besteht, für Ihren Importjob auswählen, sofern eine der Regionen verfügbar ist.
- Wenn für Ihren Importjob keine Region am selben Standort verfügbar ist oder wenn sich Ihr Cloud Storage-Bucket an einem multiregionalen Standort befindet, fallen Gebühren für die ausgehende Datenübertragung an. Informationen zu den Preisen für die Datenübertragung in Cloud Storage finden Sie unter „Cloud Storage – Preise“. Wählen Sie eine Region aus, für die die niedrigsten Gebühren für die Datenübertragung anfallen.
Jobs in der Dataflow-Benutzeroberfläche ansehen oder Fehler beheben
Nachdem Sie einen Import- oder Exportjob gestartet haben, können Sie im Dataflow-Bereich der Google Cloud Console Details zum Job, einschließlich Logs, aufrufen.
Details zum Dataflow-Job ansehen
So rufen Sie Details zu Import- oder Exportjobs auf, die Sie in der letzten Woche ausgeführt haben, einschließlich aller Jobs, die gerade ausgeführt werden:
- 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:

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:
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.
In der Google Cloud Console werden Details zum Dataflow-Job angezeigt.
Dataflow-Logs für Ihren Job ansehen
Wenn Sie die Logs eines Dataflow-Jobs aufrufen möchten, rufen Sie die Detailseite des Jobs auf und klicken Sie rechts neben dem Jobnamen auf Logs.
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 neben Logs auf die Anzahl der Fehler.
In der Google Cloud Console werden die Logs des Jobs angezeigt. Unter Umständen müssen Sie scrollen, um die Fehler einzublenden.
Suchen Sie nach Einträgen mit dem Fehlersymbol
.Klicken Sie auf einen einzelnen Logeintrag, um seinen Inhalt zu maximieren.
Weitere Informationen zur Fehlerbehebung bei Dataflow-Jobs finden Sie unter Fehlerbehebung bei Pipelines.
Fehlerbehebung bei fehlgeschlagenen Import- oder 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 % Lese-/Schreiblatenz auf dem Tab Monitoring Ihrer Spanner-Datenbank in derGoogle Cloud Console. Wenn hohe Werte (mehrere Sekunden) angezeigt werden, deutet dies darauf hin, dass die Instanz überlastet ist, was zu Zeitüberschreitungen und Fehlern bei Lese-/Schreibvorgängen führt.
Eine Ursache für eine hohe Latenz ist, dass der Dataflow-Job mit zu vielen Workern ausgeführt wird, was die Spanner-Instanz zu stark belastet.
So legen Sie ein Limit für die Anzahl der Dataflow-Worker fest:Console
Wenn Sie die Dataflow-Konsole verwenden, befindet sich der Parameter Maximale Anzahl von Workern im Abschnitt Optionale Parameter 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-import-job \
--gcs-location='gs://dataflow-templates/latest/GCS_Text_to_Cloud_Spanner' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,inputDir=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 Cloud 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 Ihr VPC-Netzwerk ein VPC-Netzwerk im benutzerdefinierten Modus ist, müssen Sie einen Dataflow-Job erstellen und ein alternatives Netzwerk oder Subnetzwerk angeben.
Langsam ausgeführte Import- oder 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 Datenstandort optimieren: Führen Sie Ihren Dataflow-Job in derselben Region aus, in der sich Ihre Spanner-Instanz und Ihr Cloud Storage-Bucket befinden.
Ausreichende Dataflow-Ressourcen sicherstellen: Wenn die relevanten Compute Engine-Kontingente die Ressourcen Ihres Dataflow-Jobs einschränken, wird auf der Dataflow-Seite des Jobs in der Google Cloud -Console ein Warnsymbol
und Logeinträge angezeigt:
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 schneller ausgeführt werden. Es fallen jedoch mehr Spanner-Gebühren an.
Faktoren, die sich auf die Leistung von Import- oder Exportjobs auswirken
Die Zeit für einen Import- oder Exportjob wird von mehreren Faktoren beeinflusst.
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
- Die Anzahl der sekundären Indexe
- Die Anzahl der Fremdschlüssel
- Die Anzahl der Änderungsstreams
Speicherort der Daten: Daten werden mithilfe von 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 werden muss.
Vorhandene Last auf Spanner: Ein Importjob verursacht eine erhebliche CPU-Last auf einer Spanner-Instanz. Ein Exportjob verursacht in der Regel eine geringe Last auf einer Spanner-Instanz. 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 für eine gute Importleistung optimieren
Beim Starten eines Spanner-Importjobs müssen Dataflow-Worker auf einen optimalen Wert für eine gute Leistung festgelegt werden. Zu viele Worker überlasten Spanner und zu wenige Worker führen zu einer unzureichenden Importleistung.
Die maximale Anzahl von Workern hängt stark von der Datengröße ab. Idealerweise sollte die gesamte Spanner-CPU-Auslastung jedoch zwischen 70 % und 90 % liegen. Dies bietet ein gutes Gleichgewicht zwischen Spanner-Effizienz und fehlerfreiem Jobabschluss.
Um dieses Auslastungsziel in den meisten Schemas und Szenarien zu erreichen, empfehlen wir eine maximale Anzahl von Worker-vCPUs, die dem 4- bis 6-Fachen der Anzahl der Spanner-Knoten entspricht.
Für eine Spanner-Instanz mit 10 Knoten und n1-standard-2-Workern würden Sie beispielsweise die maximale Anzahl von Workern auf 25 festlegen, was 50 vCPUs ergibt.