Daten im CSV-Format importieren und exportieren

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

Der Vorgang verwendet Dataflow. Sie können Daten aus folgenden Quellen exportieren: in einen Cloud Storage-Bucket verschieben oder Daten in Spanner aus einem Cloud Storage-Bucket, der eine JSON-Datei enthält Manifestdatei und eine Reihe von CSV-Dateien.

Hinweise

So importieren oder exportieren Sie eine Spanner-Datenbank: Zuerst müssen Sie Spanner, Cloud Storage Compute Engine und Dataflow APIs:

Aktivieren Sie die APIs

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

Kontingentanforderungen

Für Import- oder Exportjobs gelten folgende Kontingentanforderungen:

  • Spanner Sie müssen genügend Rechenkapazität haben. um die zu importierenden Daten 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. Zum Exportieren müssen Sie einen Bucket für die exportierten Dateien erstellen, sofern noch keiner vorhanden ist. 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. 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.

IAM-Anforderungen

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

Zum Importieren oder Exportieren einer Datenbank benötigen Sie die folgenden Rollen:

Spanner-Daten in CSV-Dateien exportieren

So exportieren Sie Daten aus Spanner in CSV-Dateien in Cloud Storage: folgen Sie der Anleitung zum Ausführen eines Jobs über die Google Cloud CLI Vorlage für Spanner zu Cloud Storage Text.

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 achten Sie darauf, dass Die Datentypen für Spalten in Ihren CSV-Dateien stimmen mit den entsprechenden Spalten überein vorhandenen Tabellen angewendet.
  4. 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
  • 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 empfangende Datenbankdialekt 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 zum Importieren von Tabellen mit dem Namen Albums und Singers in eine GoogleSQL-Dialect-Datenbank. 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 Ihrem Spanner-Datenbank. Wenn die Ziel-Spanner-Tabelle bereits eine Schema, müssen alle in der Manifest-Datei angegebenen Spalten die gleichen Daten enthalten. Typen als entsprechende Spalten im Schema der Zieltabelle ein.

Wir empfehlen, sekundäre Indexe und Fremdschlüssel zu erstellen und nach dem Datenimport in Spanner streamt, nicht, wenn erstellen Sie die Tabelle. Wenn Ihre Tabelle diese sollten Sie sie entfernen und später neu erstellen. wenn Sie Ihre Daten importieren.

Schritt 4: Dataflow-Importjob mit gcloud ausführen

Folgen Sie der Anleitung zum Verwenden der Google Cloud CLI, um den Importjob zu starten um einen Job mit der Vorlage „Cloud Storage Text für Spanner“ auszuführen.

Nachdem Sie einen Importjob gestartet haben, können Sie Details zum Job in in der Google Cloud Console.

Fügen Sie nach Abschluss des Importjobs alle erforderlichen sekundären Indexe hinzu. Fremdschlüssel und Änderungsstreams.

Region für den Importjob auswählen

Sie können eine andere Region auf Grundlage des Standorts Ihres Cloud Storage-Bucket. Um dies zu vermeiden Gebühren für ausgehende Datenübertragung angegeben werden, wählen Sie eine Region aus, mit dem Speicherort Ihres Cloud Storage-Bucket übereinstimmt.

  • Wenn der Speicherort Ihres Cloud Storage-Bucket eine Region ist, gilt Folgendes: können Sie die kostenlose Netzwerknutzung nutzen, indem Sie die dieselbe Region für Ihren Importjob, sofern diese Region verfügbar ist.

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

  • Wenn für Ihren Importjob keine am selben Standort befindliche Region verfügbar ist oder Ihr Der Speicherort des Cloud Storage-Bucket ist multiregional Es fallen Gebühren für ausgehende Datenübertragungen an. Weitere Informationen finden Sie unter „Cloud Storage“. Datenübertragungspreise, um eine Region auszuwählen, in der der die niedrigsten Kosten für die Datenübertragung.

Jobs in der Dataflow-UI ansehen oder Fehler beheben

Nachdem Sie einen Import- oder Exportjob gestartet haben, können Sie die Details des Jobs aufrufen, einschließlich Logs im Abschnitt "Dataflow" der Google Cloud Console.

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 angezeigt. Job.

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 angezeigt. Job.

Dataflow-Logs für Ihren 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 Fehler in der Pipeline 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.

Überprüfen Sie die 99% Lese-/Schreiblatenz in der Tab Monitoring Ihrer Spanner-Datenbank in der Google Cloud Console Werden hohe Werte (mehrere Sekunden) angezeigt, dass die Instanz überlastet ist, Lese-/Schreibvorgänge für und schlagen fehl.

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

So legen Sie ein Limit für die Anzahl der Dataflow-Worker fest:
  • 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_Text_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

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: Dataflow-Job ausführen in derselben Region, in der sich auch die Spanner-Instanz und Cloud Storage-Bucket befinden.

  • Auf ausreichende Dataflow-Ressourcen achten: Wenn der relevante Compute Engine-Kontingente die Ressourcen Ihres Dataflow-Jobs, die Seite „Dataflow“ in der Google Cloud Console zeigt ein Warnsymbol an Warnsymbol und protokollieren Nachrichten:

    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 Sie feststellen, dass die CPU-Auslastung Auslastung der Instanz über 65 % liegt, können Sie Erhöhen Sie die Rechenkapazität in dieser Instanz. Die Kapazität erhöht die Kapazität Spanner-Ressourcen und der Job sollten schneller ausgeführt werden. Spanner-Gebühren.

Faktoren, die sich auf die Leistung von Import- oder Exportjobs auswirken

Die Zeit für einen Import- oder Exportjob wird von mehreren Faktoren beeinflusst.

  • Spanner-Datenbankgröße: Die Verarbeitung von mehr Daten nimmt mehr Zeit in Anspruch. 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
    • Anzahl der Änderungsstreams

  • Datenspeicherort: Daten werden zwischen Spanner und Cloud Storage mit Dataflow. 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, große Datenmengen importieren können.

  • Bestehende Auslastung von Spanner: Ein Importjob fügt erheblich CPU-Last auf einer Spanner-Instanz. Ein Exportjob stellt in der Regel eine geringe Last für einen Spanner dar. 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 bei über 65 % liegt, wird der Job langsamer ausgeführt.

Feinabstimmung der Worker für eine gute Importleistung

Beim Starten eines Spanner-Importjobs muss auf einen optimalen Wert eingestellt werden, um eine gute Leistung zu erzielen. Zu viele Worker überlastet, und zu wenige Worker führt zu einer der Importleistung.

Die maximale Anzahl von Workern hängt stark von der Datengröße ab, Idealerweise sollte die gesamte Spanner-CPU-Auslastung 70% bis 90%. Dies bietet ein ausgewogenes Verhältnis zwischen Spanner und und fehlerfreie Auftragserledigung.

Um dieses Nutzungsziel in den meisten Schemas und Szenarien zu erreichen, empfehlen eine maximale Anzahl von Worker-vCPUs, die im 4- bis 6-Fachen der Anzahl der Spanner-Knoten.

Beispiel: Für eine Spanner-Instanz mit 10 Knoten mit n1-standard-2 würden Sie die maximale Anzahl der Worker auf 25 festlegen, was 50 vCPUs ergibt.