Daten importieren und exportieren

In diesem Dokument wird beschrieben, wie Sie Daten in Spanner Omni im Avro- und CSV-Format migrieren, sichern und übertragen. Mit der Spanner Omni-CLI können Sie Datenbankinhalte zwischen Spanner Omni und Speicherlösungen wie Cloud Storage, Amazon Simple Storage Service (Amazon S3), S3-kompatiblem lokalen Speicher oder lokalen Dateisystemen (NFS) verschieben. Die Datenflüsse für Import und Export in Spanner Omni unterstützen keine Modelle, Lokality Groups oder Platzierungen.

Import- und Exportvorgänge werden auf Spanner Omni-Servern ausgeführt und nutzen die verfügbaren Systemressourcen gemeinsam. Der Import ist ressourcenintensiv und kann zu einer hohen RAM-, CPU- und Festplattennutzung führen, was sich auf aktive Arbeitslasten auswirken kann. Diese Aufgaben werden in der Regel mit einer niedrigeren Priorität als der reguläre Traffic ausgeführt. Sie sollten Ihre Bereitstellung jedoch auf potenzielle Auswirkungen auf die Leistung überwachen.

Vergleich der Dateiformate

In der folgenden Tabelle werden die Funktionen der Avro- und CSV-Dateiformate für den Import und Export von Spanner-Daten verglichen.

Funktion Avro CSV
Gesamte Datenbank importieren oder exportieren Ja Nein
Zuvor exportierte Tabellen importieren Ja Ja
Zu einem früheren Zeitstempel exportieren Ja Ja
Mit Spanner importieren oder exportieren Ja Ja
Daten aus anderen Datenbanken importieren Nein Ja

Sowohl im Avro- als auch im CSV-Format werden alle Tabellen in der Datenbank exportiert. Im Avro-Format wird auch das Schema exportiert, sodass Sie es wieder importieren können. Im CSV-Format wird das Schema nicht exportiert.

Hinweis

Bevor Sie einen Import- oder Exportvorgang starten, prüfen Sie Ihre Berechtigungen und konfigurieren Sie den Zugriff auf Ihren Datenspeicherort.

Berechtigungen

Prüfen Sie, ob Sie die folgenden Berechtigungen haben, bevor Sie beginnen:

  • spanner.databases.import
  • spanner.databases.export

Weitere Informationen zu Identity and Access Management (IAM) in Spanner Omni, siehe IAM-Übersicht. Informationen zum Aktualisieren der Rollen eines Nutzers finden Sie unter Nutzer aktualisieren.

Datenquelle und ‑ziel

Sie können Daten in einem Amazon S3-Bucket (Amazon Simple Storage Service), einem Cloud Storage-Bucket, einem Amazon S3-kompatiblen lokalen Speicher (z. B. MinIO) oder einem lokalen Dateisystem (NFS) speichern. Wenn Sie ein lokales Dateisystem verwenden, müssen die Daten auf allen Servern in der Bereitstellung unter demselben Pfad verfügbar sein.

Sie haben zwei Möglichkeiten, Zugriff auf den Datenspeicher zu gewähren:

  • Fügen Sie der Bereitstellung externen Speicher hinzu: Dies ist die bevorzugte Methode, wenn Sie einen Bucket wiederverwenden möchten.

  • Erstellen Sie einmalige Anmeldedaten: Diese Anmeldedaten müssen länger gültig sein als die Dauer des Import- oder Exportvorgangs (z. B. 48 Stunden).

Die Anmeldedaten müssen Berechtigungen zum Auflisten und Lesen von Objekten im Bucket für Importe gewähren. Für Exporte nach Amazon S3 benötigen Sie die folgenden zusätzlichen Amazon S3-Berechtigungen:

  • s3:PutObject
  • s3:AbortMultipartUpload
  • s3:ListBucketMultipartUploads

Weitere Informationen finden Sie unter IAM-Berechtigungen.

Spanner-Avro-Dateien importieren

So importieren Sie Daten, die Sie zuvor aus einer anderen Spanner-Datenbank (Spanner oder Spanner Omni) im Avro-Format exportiert haben:

Voraussetzungen für den Avro-Import

Bevor Sie mit dem Avro-Import beginnen, müssen die folgenden Voraussetzungen erfüllt sein:

  • Sie haben die Zieldatenbank erstellt.

  • Die zu importierenden Schemaobjekte sind in der Datenbank noch nicht vorhanden. Beim Avro-Import werden diese Tabellen vor dem Importieren der Daten erstellt.

Anleitung für den Avro-Import

Suchen Sie den Pfad zum Ordner mit den exportierten Daten. Der Ordner enthält Folgendes:

  • Eine Datei spanner-export.json.

  • Eine Datei ENTITY_NAME-manifest.json für jede exportierte Entität (z. B. eine Tabelle, Sequenz oder ein Schema).

  • Alle in den Manifestdateien aufgeführten Avro-Dateien.

Wenn Sie den Datenspeicher bereits als externen Speicher hinzugefügt haben, müssen Sie keine Anmeldedaten in den Pfad aufnehmen. Sie können den Pfad direkt angeben. Wenn Sie einmalige Anmeldedaten verwenden, verwenden Sie die folgenden URL-Formate:

  • Cloud Storage: gs://BUCKET_NAME/BASE_FOLDER[?accesskey=ACCESS_KEY&secret=SECRET_KEY]. Verwenden Sie HMAC-Anmeldedaten. Weitere Informationen finden Sie unter HMAC Schlüssel.

  • Amazon S3: s3://S3_BUCKET/BASE_FOLDER[?accesskey=ACCESS_KEY&secret=SECRET_KEY[&sessiontoken=SESSION_TOKEN]]

  • Lokaler Dateipfad*: file:///PATH_TO_DIR

Führen Sie den folgenden Befehl aus, um den Import zu starten:

spanner databases import DATABASE_ID --url="URL" --format=avro [--avro-skip-wait-for-index-creation]

Zusätzliche Hinweise

Beachten Sie beim Importieren von Avro-Dateien Folgendes:

Wenn der Importvorgang erfolgreich gestartet wurde, wird eine Vorgangs-ID mit langer Ausführungszeit zurückgegeben. Mit dieser ID können Sie den Status des Vorgangs verfolgen.

CSV-Dateien importieren

So importieren Sie Textdaten, die Sie aus einer anderen Datenbank exportiert haben:

Voraussetzungen für den CSV-Import

Bevor Sie mit dem CSV-Import beginnen, müssen Sie Folgendes tun:

  • Die Tabellen müssen einen der folgenden unterstützten Datentypen haben: BOOL, INT64, FLOAT64, NUMERIC, STRING, DATE, TIMESTAMP, BYTES und JSON.

  • Erstellen Sie die Zieldatenbank.

  • Erstellen Sie alle Tabellen, in die Sie Daten importieren möchten. Beim CSV-Import werden keine Tabellen erstellt.

  • Die CSV-Datei darf keine Kopfzeile enthalten.

Anleitung für den CSV-Import

Wenn Sie CSV-Dateien importieren möchten, erstellen Sie eine Manifestdatei, in der die zu importierenden Daten beschrieben werden. Die Manifestdatei hat die folgende Struktur, die hier im Protobuf-Format definiert ist:

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 path 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;
}

Hier sehen Sie ein Beispiel für ein Manifest:

{
  "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"}
      ]
    }
  ]
}

Die URL im folgenden Befehl zum Importieren von CSV-Dateien darf keine Kopfzeile enthalten muss auf den Ordner verweisen, der eine Manifestdatei im JSON-Format enthält, wie im Beispielmanifest beschrieben. Diese Datei kann sich in Cloud Storage, Amazon S3 oder einem lokalen Dateipfad befinden. Verwenden Sie dabei dasselbe URL Format für Anmeldedaten wie in der Anleitung für den Avro-Import beschrieben. Führen Sie den folgenden Befehl aus, um den Import zu starten:

spanner databases import DATABASE_ID --url="URL" --format=csv

Optionen für den CSV-Import

Mit den folgenden Flags können Sie anpassen, wie Spanner Omni Textdateien verarbeitet:

  • --csv-date-format: Überschreibt das Format für Datumsspalten. Der Standardwert ist %Y-%m-%d. Beispiel: %d/%m/%Y.

  • --csv-timestamp-format: Überschreibt das Format für Zeitstempelspalten. Verwenden Sie diese Option nur, wenn das Format in der CSV-Datei von Spanner Omni nicht unterstützt wird. Beispiel: %d/%m/%Y %H:%M:%S%Ez.

  • --csv-delimiter: Überschreibt das Trennzeichen. Der Standardwert ist ein Komma.

  • --csv-quote-char: Überschreibt das Anführungszeichen. Der Standardwert ist ein doppeltes Anführungszeichen.

  • --csv-escape-char: Überschreibt das Escapezeichen. Der Standardwert ist ein doppeltes Anführungszeichen.

  • --csv-null-string: Überschreibt den String, der NULL-Werte darstellt. Der Standardwert ist \N.

  • --csv-has-trailing-delimiters: Gibt an, ob die CSV-Dateien nachgestellte Trennzeichen haben. Der Standardwert ist false.

In Avro-Dateien exportieren

Wenn Sie Daten in Avro-Dateien exportieren möchten, folgen Sie der Anleitung zum URL-Format in der Anleitung für den Avro-Import.

Jeder Server in der Bereitstellung kann Daten in den angegebenen Datenspeicher schreiben. Wenn Sie einen lokalen Dateipfad als Ziel verwenden, müssen alle Server Zugriff auf denselben Pfad haben und parallel in diesen schreiben können.

Das System exportiert alle Tabellen und Entitäten in der Datenbank. Geben Sie einen neuen, leeren Ordnerpfad für die exportierten Daten an.

Führen Sie den folgenden Befehl aus, um den Export zu starten:

spanner databases export DATABASE_ID --url="URL" --format=avro

CSV-Exporte unterstützen nur Tabellen und exportieren nicht das Datenbankschema.

In CSV-Dateien exportieren

Beim CSV-Export wird das Datenbankschema nicht exportiert. Es werden nur Tabellen unterstützt. Führen Sie den folgenden Befehl aus, um Daten in CSV-Dateien zu exportieren:

spanner databases export DATABASE_ID --url="URL" --format=csv

Fehlerbehebung

Wenn ein Import fehlschlägt, werden Schemaaktualisierungen und importierte Daten nicht automatisch zurückgesetzt. Bereinigen Sie die Datenbank manuell, bevor Sie den Vorgang wiederholen.

Die Geschwindigkeit eines Importvorgangs hängt von mehreren Faktoren ab, z. B. von der Anzahl der Dateien im Ordner, den verfügbaren Rechenressourcen in der Bereitstellung und der Festplattengeschwindigkeit. Wenn genügend Ressourcen verfügbar sind, importiert das System Dateien parallel.