Daten nach Spanner exportieren (umgekehrte ETL)

Wenn Sie Feedback geben oder Support für dieses Feature anfordern möchten, senden Sie eine E-Mail an bq-cloud-spanner-federation-preview@google.com.

In diesem Dokument wird beschrieben, wie Sie einen Workflow für Reverse Extrahieren, Transformieren und Laden (Reverse ETL) von BigQuery nach Spanner einrichten. Dazu verwenden Sie die Anweisung EXPORT DATA, um Daten aus einer BigQuery-Tabelle in eine Spanner-Tabelle zu exportieren.

Dieser umgekehrte ETL-Workflow kombiniert Analysefunktionen in BigQuery mit niedriger Latenz und hohem Durchsatz in Spanner. Mit diesem Workflow können Sie Daten für Anwendungsnutzer bereitstellen, ohne dabei Kontingente und Limits in BigQuery aufzubrauchen.

Hinweise

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Exportieren von BigQuery-Daten nach Spanner benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Beschränkungen

  • Für die folgenden BigQuery-Datentypen gibt es keine Entsprechungen in Spanner und werden nicht unterstützt:
Spanner-Datenbankdialekt Nicht unterstützte BigQuery-Typen
Alle Dialekte
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: Der unterstützte NUMERIC-Typ ist nicht breit genug. Sie können dem Typ NUMERIC in der Abfrage explizite Umwandlungen hinzufügen.
  • Die maximale Größe einer exportierten Zeile darf 1 MiB nicht überschreiten.

  • Spanner erzwingt während des Exports die referenzielle Integrität. Wenn die Zieltabelle einer anderen Tabelle untergeordnet ist (INTERLEAVE IN PARENT) oder wenn die Zieltabelle Fremdschlüsseleinschränkungen hat, werden die Fremdschlüssel und der übergeordnete Schlüssel während des Exports geprüft. Wenn eine exportierte Zeile in eine Tabelle mit INTERLEAVE IN PARENT geschrieben wird und die übergeordnete Zeile nicht vorhanden ist, schlägt der Export fehl und es wird die Meldung „Übergeordnete Zeile fehlt. Zeile kann nicht geschrieben werden“ angegeben. Wenn die exportierte Zeile in eine Tabelle mit Fremdschlüsseleinschränkungen geschrieben wird und auf einen nicht vorhandenen Schlüssel verweist, schlägt der Export mit dem Fehler „Fremdschlüsseleinschränkung verletzt“ fehl. Wenn Sie in mehrere Tabellen exportieren, sollten Sie den Export so sequenzieren, dass die referenzielle Integrität erhalten bleibt. Das bedeutet in der Regel, dass übergeordnete Tabellen und Tabellen, auf die über Fremdschlüssel verwiesen wird, vor Tabellen exportiert werden müssen, die auf diese verweisen.

    Wenn die Tabelle, die das Ziel des Exports ist, Fremdschlüsseleinschränkungen hat oder eine untergeordnete Tabelle einer anderen Tabelle ist (INTERLEAVE IN PARENT), muss die übergeordnete Tabelle vor dem Export der untergeordneten Tabelle ausgefüllt werden und alle entsprechenden Schlüssel enthalten. Wenn Sie versuchen, eine untergeordnete Tabelle zu exportieren, während eine übergeordnete Tabelle nicht alle relevanten Schlüssel enthält, schlägt der Export fehl.

  • Ein Exportjob in Spanner hat eine maximale Dauer von 6 Stunden. Informationen zur Optimierung großer Exportjobs finden Sie unter Exportoptimierung. Alternativ können Sie die Eingabe in einzelne Datenblöcke aufteilen, die als einzelne Exportjobs exportiert werden können.

  • Exporte nach Spanner werden nur für die Versionen BigQuery Enterprise oder Enterprise Plus unterstützt. BigQuery Standard und On-Demand-Computing werden nicht unterstützt.

Exporte mit der Option spanner_options konfigurieren

Mit der Option spanner_options können Sie eine Spanner-Zieldatenbank und -tabelle angeben. Die Konfiguration wird in Form eines JSON-Strings ausgedrückt, wie im folgenden Beispiel gezeigt:

EXPORT DATA OPTIONS(
   uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
   spanner_options = """{
      "table": "TABLE_NAME",
      "priority": "PRIORITY",
      "tag": "TAG",
   }"""
)

Ersetzen Sie Folgendes:

  • PROJECT_ID: der Name Ihres Google Cloud-Projekts
  • INSTANCE_ID: der Name Ihrer Datenbankinstanz
  • DATABASE_ID: der Name Ihrer Datenbank
  • TABLE_NAME: der Name einer vorhandenen Zieltabelle
  • PRIORITY (optional): Priorität der Schreibanfragen Zulässige Werte: LOW, MEDIUM, HIGH Standardwert: MEDIUM
  • TAG (optional): Anfrage-Tag, um den Exporter-Traffic im Spanner-Monitoring zu identifizieren. Standardwert: bq_export

Anforderungen für Exportabfragen

Für den Export von Abfrageergebnissen nach Spanner müssen die Ergebnisse die folgenden Voraussetzungen erfüllen:

  • Alle Spalten in der Ergebnismenge müssen in der Zieltabelle vorhanden sein und ihre Typen müssen übereinstimmen.
  • Die Ergebnismenge muss alle NOT NULL-Spalten für die Zieltabelle enthalten.
  • Spaltenwerte dürfen die Spanner-Datengrößenlimits in Tabellen nicht überschreiten.
  • Nicht unterstützte Spaltentypen müssen vor dem Export in Spanner in einen der unterstützten Typen konvertiert werden.

Daten exportieren

Mit der Anweisung EXPORT DATA können Sie Daten aus einer BigQuery-Tabelle in eine Spanner-Tabelle exportieren.

Im folgenden Beispiel werden ausgewählte Felder aus einer Tabelle mit dem Namen mydataset.table1 exportiert:

EXPORT DATA OPTIONS (
  uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
  spanner_options="""{ "table": "TABLE_NAME" }"""
)
AS SELECT * FROM mydataset.table1;

Ersetzen Sie Folgendes:

  • PROJECT_ID: der Name Ihres Google Cloud-Projekts
  • INSTANCE_ID: der Name Ihrer Datenbankinstanz
  • DATABASE_ID: der Name Ihrer Datenbank
  • TABLE_NAME: der Name einer vorhandenen Zieltabelle

Mehrere Ergebnisse mit demselben rowkey-Wert exportieren

Wenn Sie ein Ergebnis exportieren, das mehrere Zeilen mit demselben rowkey-Wert enthält, enden die in Spanner geschriebenen Werte in derselben Spanner-Zeile. Im durch den Export erstellten Spanner-Zeilensatz ist nur eine übereinstimmende BigQuery-Zeile enthalten (es kann nicht garantiert werden, welche).

Exportoptimierung

Versuchen Sie Folgendes, um den Export von Datensätzen von BigQuery nach Spanner zu optimieren:

  • Anzahl der Knoten in der Spanner-Zielinstanz erhöhen Beachten Sie, dass die Erhöhung der Anzahl der Knoten in der Instanz in den frühen Phasen des Exports nicht sofort zu einer Steigerung des Exportdurchsatzes führt. Es kann zu einer leichten Verzögerung kommen, da Spanner eine lastbasierte Aufteilung durchführt. Bei der lastbasierten Aufteilung steigt der Exportdurchsatz an und stabilisiert sich kurz darauf. Weitere Informationen zum Maximieren des Schreibdurchsatzes finden Sie unter Leistungsübersicht.

  • Geben Sie die Priorität HIGH in spanner_options an. Dies kann jedoch zu einer erheblichen Leistungseinbuße bei anderen Arbeitslasten führen, die von derselben Instanz ausgeführt werden.

  • Vermeiden Sie die Sortierung der Abfrageergebnisse. Wenn die Ergebnismenge alle Primärschlüsselspalten enthält, sortiert der Exporter die Primärschlüssel der Zieltabelle automatisch, um Schreibvorgänge zu optimieren und Konflikte zu minimieren.

    Wenn der Primärschlüssel der Zieltabelle generierte Spalten enthält, sollten Sie die Ausdrücke der generierten Spalten der Abfrage hinzufügen, damit die exportierten Daten korrekt sortiert werden.

Preise

Die Preise für den Datenexport finden Sie unter BigQuery-Preise.

Nachdem die Daten exportiert wurden, wird das Speichern der Daten in Spanner in Rechnung gestellt. Weitere Informationen finden Sie unter Spanner-Preise.