Daten im CSV-Format importieren und exportieren

Auf dieser Seite wird beschrieben, wie Sie Daten aus Spanner in CSV-Dateien exportieren oder Daten aus CSV-Dateien in eine Spanner-Datenbank importieren.

Der Vorgang verwendet Dataflow. Sie können Daten aus Spanner in einen Cloud Storage-Container exportieren oder Daten aus einem Cloud Storage-Bucket mit einer JSON-Manifestdatei und einem Satz CSV-Dateien in Spanner importieren.

Hinweise

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

Enable the APIs

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

Kontingentanforderungen

Die Kontingentanforderungen für Import- oder Exportjobs sehen so aus:

  • Spanner: Sie müssen für die zu importierenden Daten ausreichend Rechenkapazität haben. 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. 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: 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 sind keine weiteren Anpassungen erforderlich. 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 das Dataflow-Arbeiterdienstkonto zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Exportieren einer Datenbank benötigen:

Spanner-Daten in CSV-Dateien exportieren

Zum Exportieren von Daten aus Spanner in CSV-Dateien in Cloud Storage folgen Sie der Anleitung zur Verwendung der Google Cloud CLI, um einen Job mit der Spanner für Cloud Storage-Text-Vorlage auszuführen.

Weitere Informationen finden Sie in diesem Dokument auch zum Ansehen oder Fehlerbeheben von Jobs, zum Optimieren langsamer Jobs und zu Faktoren, die die Jobleistung beeinflussen.

Daten aus CSV-Dateien in Spanner importieren

Der Vorgang zum Importieren von Daten aus CSV-Dateien umfasst die folgenden Schritte:

  1. Exportieren Sie Ihre Daten in CSV-Dateien und speichern Sie diese Dateien in Cloud Storage. Fügen Sie keine Headerzeile ein.
  2. Erstellen Sie eine JSON-Manifestdatei und speichern Sie die Datei zusammen mit Ihren CSV-Dateien.
  3. Erstellen Sie leere Zieltabellen in Ihrer Spanner-Datenbank oder sorgen Sie dafür, dass die Datentypen für Spalten in Ihren CSV-Dateien mit allen entsprechenden Spalten in Ihren vorhandenen Tabellen übereinstimmen.
  4. Führen Sie den Importjob aus.

Schritt 1: Daten aus einer nicht von Spanner stammenden 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
  • Beim Exportieren der CSV-Dateien müssen Sie Metadaten weder hinzufügen noch generieren.

  • Für Ihre Dateien müssen keine bestimmten Namenskonventionen eingehalten werden.

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 Datenbankdialekt der Empfängerdatenbank 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 Ihre Spanner-Datenbank erstellen

Bevor Sie den Import ausführen, müssen Sie die Zieltabellen in Ihrer Spanner-Datenbank erstellen. Wenn die Ziel-Spanner-Tabelle bereits ein Schema hat, müssen alle in der Manifestdatei angegebenen Spalten dieselben Datentypen wie die entsprechenden Spalten im Schema der Zieltabelle haben.

Wir empfehlen Ihnen, sekundäre Indexe, Fremdschlüssel und Änderungsstreams erst zu erstellen, nachdem Sie Ihre Daten in Spanner importiert haben, und nicht schon beim Erstellen der Tabelle. Wenn Ihre Tabelle diese Strukturen bereits enthält, sollten Sie sie nach dem Importieren der Daten löschen und dann neu erstellen.

Schritt 4: Dataflow-Importjob mit gcloud ausführen

Folgen Sie der Anleitung zum Ausführen eines Importvorgangs über die Google Cloud CLI mit der Vorlage „Cloud Storage Text für Spanner“, um einen Importjob zu starten.

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.

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.

Jobs in der Dataflow-UI ansehen und Probleme beheben

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

  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

    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:

  1. Rufen Sie in der Google Cloud -Console die Seite „Dataflow-Jobs“ auf.

    ZU JOBS

  2. 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:

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

So sehen Sie sich Jobfehler genauer an:

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

  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 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 in derGoogle Cloud -Console auf dem Tab Monitoring Ihrer Spanner-Datenbank. Wenn hohe Werte angezeigt werden (mehrere Sekunden), bedeutet dies, dass die Instanz überlastet ist, was zu Lese-/Schreibfehlern 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.

So legen Sie ein Limit für die Anzahl der Dataflow-Worker fest:

Console

Wenn Sie die Dataflow Console verwenden, befindet sich der Parameter Max. Worker im Abschnitt Optionale Parameter auf der Seite Job aus Vorlage erstellen.

Zu Dataflow

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 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 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 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 Warnsymbol und Logmeldungen zu sehen:

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

    • 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. Das automatische Skalieren kann Spanner überlasten und zu Fehlern führen, wenn eine große Datenmenge zum Importieren vorliegt.

  • Bestehende Auslastung von Spanner: Ein Importjob erhöht die CPU-Auslastung für eine Spanner-Instanz erheblich. Ein Exportjob steigert in der Regel die Auslastung für eine Spanner-Instanz nur wenig. 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 für eine gute Leistung auf einen optimalen Wert gesetzt sein. Eine zu große Anzahl von Workern überlastet Spanner und zu wenige Worker führen zu einer enttäuschenden 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.

Um dieses Auslastungsziel in der Mehrzahl der Schemas und Szenarien zu erreichen, empfehlen wir eine maximale Anzahl von Worker-vCPUs zwischen dem Vier- und Sechsfachen der Anzahl der Spanner-Knoten.

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