Daten aus Nicht-Spanner-Datenbanken importieren

Auf dieser Seite wird beschrieben, wie Sie Avro-Dateien vorbereiten, die Sie aus Nicht-Cloud Spanner-Datenbanken exportiert und anschließend in Spanner importiert haben. Informationen zum Importieren einer Spanner-Datenbank, die Sie zuvor exportiert haben, finden Sie unter Spanner-Avro-Dateien importieren.

Der Vorgang verwendet Dataflow; Es importiert Daten aus einem Cloud Storage-Bucket, der eine Reihe von Avro-Dateien und eine JSON-Manifestdatei enthält, die die Zieltabellen und Avro-Dateien angibt, mit denen die einzelnen Tabellen gefüllt werden.

Hinweis

Für den Import 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

Die Kontingentanforderungen für Importjobs sind:

  • Spanner: Sie benötigen genügend Rechenkapazität, um die importierte Datenmenge zu unterstützen. Für den Import 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 Optimize-Jobs.
  • Cloud Storage: Zum Importieren benötigen Sie einen Bucket mit Ihren zuvor exportierten Dateien. Für den Bucket muss keine Größe festgelegt werden.
  • Dataflow: Für Importjobs gelten dieselben Compute Engine-Kontingente für CPU, Laufwerksnutzung und IP-Adressen wie für andere Dataflow-Jobs.
  • Compute Engine: Bevor Sie den Importjob ausführen, müssen Sie zuerst Kontingente für Compute Engine einrichten, die von Dataflow verwendet werden. Diese Kontingente stellen die maximale Anzahl von 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 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 Importieren einer Datenbank benötigen Sie außerdem IAM-Rollen mit ausreichenden Berechtigungen, um alle Dienste nutzen zu können, die für einen Importjob erforderlich sind. Informationen zum Gewähren von Rollen und Berechtigungen finden Sie unter IAM-Rollen anwenden.

Zum Importieren einer Datenbank benötigen Sie folgende Rollen:

  • Auf Google Cloud-Projektebene:
    • Spanner-Betrachter
    • Dataflow-Administrator
    • Storage-Administrator
  • Auf Spanner-Datenbank- oder -Instanzebene oder auf Google Cloud-Projektebene:
    • Spanner-Leser
    • Spanner-Datenbankadministrator (nur für Importjobs erforderlich)

Daten aus einer Nicht-Spanner-Datenbank in Avro-Dateien exportieren

Beim Importvorgang werden Daten aus Avro-Dateien in einem Cloud Storage-Bucket übernommen. Sie können Daten im Avro-Format aus jeder Quelle exportieren und dazu jede verfügbare Methode verwenden.

So exportieren Sie Daten aus einer Nicht-Spanner-Datenbank in Avro-Dateien:

Beachten Sie beim Exportieren Ihrer Daten folgende Punkte:

  • Der Export lässt sich mit einem der primitiven Avro-Typen sowie mit dem komplexen Array-Typ ausführen.
  • Jede Spalte der Avro-Dateien muss einen der folgenden Spaltentypen verwenden:

    • ARRAY
    • BOOL
    • BYTES*
    • DOUBLE
    • FLOAT
    • INT
    • LONG
    • STRING

    * Eine Spalte vom Typ BYTES wird zum Importieren einer Cloud Spanner-NUMERIC verwendet. Weitere Informationen finden Sie unten im Abschnitt Empfohlene Zuordnungen.

    †,‡ Sie können einen LONG importieren, der einen Zeitstempel speichert, oder einen STRING, in dem ein Zeitstempel als Spanner gespeichert wird. Weitere Informationen finden Sie unten unter Empfohlene Zuordnungen.

  • Beim Exportieren der Avro-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 in Cloud Storage exportieren, müssen Sie die Avro-Dateien in einen Cloud Storage-Bucket hochladen. Eine ausführliche Anleitung finden Sie unter Objekte in Cloud Storage hochladen.

Avro-Dateien aus Nicht-Spanner-Datenbanken in Spanner importieren

So importieren Sie Avro-Dateien aus einer Nicht-Spanner-Datenbank in Spanner:

  1. Erstellen Sie Zieltabellen und definieren Sie das Schema für Ihre Spanner-Datenbank.
  2. Erstellen Sie eine Datei spanner-export.json in Ihrem Cloud Storage-Bucket.
  3. Dataflow-Importjob mit gcloud-Befehlszeile ausführen.

Schritt 1: Schema für die Spanner-Datenbank erstellen

Bevor Sie den Import ausführen, müssen Sie die Zieltabelle in Spanner erstellen und sein Schema definieren.

Sie müssen ein Schema erstellen, das den entsprechenden Spaltentyp für jede Spalte in den Avro-Dateien verwendet.

Google-Standard-SQL

Avro-Spaltentyp Spanner-Spaltentyp
ARRAY ARRAY
BOOL BOOL
BYTES

BYTES

NUMERIC (wenn der Spaltentyp BYTES und logicalType=decimal, precision=38 und scale=9 ist. Wenn diese genauen Spezifikationen weggelassen werden, wird das Feld als BYTES-Wert in Cloud Spanner behandelt. Weitere Informationen finden Sie in der Dokumentation zum Logischen Avro-Dezimaltyp.)

DOUBLE FLOAT64
FLOAT FLOAT64
INT INT64
LONG

INT64

TIMESTAMP, wenn LONG einen Zeitstempel für die Anzahl der Mikrosekunden seit dem 01.01.1970, 00:00:00 Uhr (UTC) darstellt

STRING

STRING

TIMESTAMP, wenn STRING einen Zeitstempel im kanonischen Format für SQL-Abfragen darstellt

PostgreSQL

Avro-Spaltentyp Spanner-Spaltentyp
ARRAY ARRAY
BOOL BOOLEAN
BYTES

BYTEA

NUMERIC (wenn der Spaltentyp BYTEA und logicalType=decimal, precision=147455 und scale=16383 ist. Wenn Sie diese genauen Spezifikationen nicht angeben, wird das Feld als BYTEA-Wert behandelt. Weitere Informationen finden Sie in der Dokumentation zum Logischen Avro-Dezimaltyp.)

DOUBLE DOUBLE PRECISION
FLOAT DOUBLE PRECISION
INT BIGINT
LONG

BIGINT

TIMESTAMP, wenn LONG einen Zeitstempel für die Anzahl der Mikrosekunden seit dem 01.01.1970, 00:00:00 Uhr (UTC) darstellt

STRING

CHARACTER VARYING

TIMESTAMP, wenn STRING einen Zeitstempel im kanonischen Format für SQL-Abfragen darstellt, z. B. '2022-05-28T07:08:21.123456789Z' oder '2021-12-19T16:39:57-08:00'

Schritt 2: spanner-export.json-Datei erstellen

Außerdem müssen Sie in Ihrem Cloud Storage-Bucket eine Datei mit dem Namen spanner-export.json erstellen. Diese Datei gibt den Datenbankdialekt an und enthält ein tables-Array, in dem der Name und die Speicherorte der Datendateien für jede Tabelle aufgeführt sind.

Der Inhalt der Datei hat folgendes Format:

{
  "tables": [
   {
    "name": "TABLE1",
    "dataFiles": [
      "RELATIVE/PATH/TO/TABLE1_FILE1",
      "RELATIVE/PATH/TO/TABLE1_FILE2"
    ]
   },
   {
    "name": "TABLE2",
    "dataFiles": ["RELATIVE/PATH/TO/TABLE2_FILE1"]
   }
  ],
  "dialect":"DATABASE_DIALECT"
}

Wo ist DATABASE_DIALECT = {GOOGLE_STANDARD_SQL | POSTGRESQL}

Wenn das Dialektelement nicht angegeben wird, wird der Dialekt standardmäßig auf GOOGLE_STANDARD_SQL gesetzt.

Schritt 3: Dataflow-Importjob mit gcloud-Befehlszeile ausführen

Wenn Sie den Importjob starten möchten, folgen Sie der Anleitung zum Verwenden der Befehlszeile in Google Cloud, um einen Job mit der Vorlage „Avro zu Spanner“ auszuführen.

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

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

Region für den Importjob auswählen

Sie können abhängig vom Standort Ihres Cloud Storage-Buckets eine andere Region auswählen. Um Gebühren für ausgehenden Netzwerktraffic zu vermeiden, wählen Sie eine Region aus, die dem Standort Ihres Cloud Storage-Buckets entspricht.

  • Wenn der Speicherort Ihres Cloud Storage-Buckets eine Region ist, können Sie die kostenlose Netzwerknutzung nutzen, indem Sie dieselbe Region für den Importjob auswählen, sofern diese Region verfügbar ist.

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

  • Wenn sich keine standortbasierte Region für Ihren Importjob verfügbar ist oder der Standort Ihres Cloud Storage-Buckets eine mehrere Region ist, fallen Gebühren für ausgehenden Traffic an. Wählen Sie anhand der Cloud Storage-Preise für ausgehenden Netzwerktraffic eine Region aus, für die die niedrigsten Gebühren für ausgehenden Netzwerktraffic anfallen.

Jobs in der Dataflow-UI ansehen oder Fehler beheben

Nachdem Sie einen Importjob gestartet haben, können Sie sich die Details des Jobs, einschließlich der Logs, im Dataflow-Abschnitt der Google Cloud Console 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

    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.

    Zur Jobseite

  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 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 Pipelinefehler beheben.

Fehler bei fehlgeschlagenen Importjobs beheben

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 Ihrer Cloud Spanner-Datenbank die Latenz von 99% der Schreibvorgänge. Wenn hohe Werte angezeigt werden (mehrere Sekunden), bedeutet dies, dass die Instanz überlastet ist, was zu Schreibfehlern führt.

Eine Ursache für eine hohe Latenz ist, dass der Dataflow-Job mit zu vielen Workern ausgeführt wird und die Cloud Spanner-Instanz zu stark belastet wird.

Anstatt ein Limit für die Anzahl der Dataflow-Worker festzulegen, müssen Sie anstelle des Tabs „Importieren/Exportieren“ auf der Seite „Instanzdetails“ der Cloud Spanner-Datenbank in der Google Cloud Console mit der Dataflow-Vorlage Cloud Storage Avro für Cloud Spanner den Import 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-import-job \
    --gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

Optimize-Jobs mit langsamer Ausführung

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 Ihre Spanner-Instanz und Ihr Cloud Storage-Bucket befinden.

  • Ausreichende Dataflow-Ressourcen bereitstellen: Wenn die entsprechenden Compute Engine-Kontingente die Dataflow-Jobs einschränken, wird auf der Dataflow-Seite des Jobs in der Google Cloud Console ein Warnsymbol Warnungssymbol und eine Lognachricht 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.

  • Spannung der Spanner-CPU-Auslastung: Wenn Sie feststellen, dass die CPU-Auslastung für die Instanz über 65 % liegt, können Sie die Compute-Kapazität in dieser Instanz erhöhen. Durch die Kapazität werden mehr Spanner-Ressourcen hinzugefügt und der Job sollte schneller ausgeführt werden. Allerdings fallen höhere Spanner-Gebühren an.

Faktoren, die sich auf die Leistung von Importjobs auswirken

Mehrere Faktoren beeinflussen die Zeit, die für einen Importjob benötigt wird.

  • Spanner-Datenbankgröße: 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
    • Die Anzahl der Fremdschlüssel
    • Die Anzahl der Änderungsstreams

  • Datenspeicherort: Daten werden zwischen Spanner und Cloud Storage mithilfe von Dataflow ü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 zu importieren ist.

  • Vorhandene Last auf Spanner: Ein Importjob erhöht die CPU-Auslastung einer Spanner-Instanz erheblich. 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 auf gute Importleistung abstimmen

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 übermäßigen 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.

Damit dieses Auslastungsziel bei den meisten Schemas/Szenarien erreicht wird, empfehlen wir eine maximale Anzahl von Worker-vCPUs zwischen dem Vier- und Sechsfachen der Anzahl der Spanner-Knoten.

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