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-Befehlszeile 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, Lokalisierungsgruppen 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 regulärer Traffic ausgeführt. Sie sollten Ihre Bereitstellung jedoch auf mögliche Auswirkungen auf die Leistung überwachen.

Vergleich von Dateiformaten

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
Ganze 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

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

Hinweis

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

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 finden Sie in der IAM-Übersicht. Informationen zum Aktualisieren der Rollen eines Nutzers finden Sie unter Nutzer aktualisieren.

Datenquelle und ‑ziel

Sie können Daten in einem Amazon Simple Storage Service-Bucket (Amazon S3), 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, muss sichergestellt sein, dass die Daten auf allen Servern in der Bereitstellung unter demselben Pfad verfügbar sind.

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

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

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

Die Anmeldedaten müssen Berechtigungen zum Auflisten und Lesen von Objekten im Bucket für Importe enthalten. 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 Sie sicherstellen, dass Ihre Umgebung die folgenden Anforderungen erfüllt:

  • Sie haben die Zieldatenbank erstellt.

  • Die Schemaobjekte, die Sie importieren, sind noch nicht in der Datenbank vorhanden. Beim Avro-Import werden diese Tabellen vor dem Importieren von Daten erstellt.

Avro-Importanleitung

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

  • Eine spanner-export.json-Datei

  • Eine ENTITY_NAME-manifest.json-Datei für jede exportierte Einheit (z. B. Tabelle, Sequenz oder Schema).

  • Alle Avro-Dateien, die in den Manifestdateien aufgeführt sind.

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 Einmalanmeldedaten verwenden, nutzen Sie die folgenden URL-Formate:

  • Cloud Storage: gs://BUCKET_NAME/BASE_FOLDER[?accesskey=ACCESS_KEY&secret=SECRET_KEY]. HMAC-Anmeldedaten verwenden 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 Dateiordner*: 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 wird, wird eine ID für einen Vorgang 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:

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

  • Zieldatenbank erstellen

  • 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 zum CSV-Import

Wenn Sie CSV-Dateien importieren möchten, müssen Sie eine Manifestdatei erstellen, 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 Importbefehl muss auf den Ordner verweisen, der eine Manifestdatei im JSON-Format enthält, wie im Manifestbeispiel beschrieben. Diese Datei kann sich in Cloud Storage, Amazon S3 oder einem lokalen Dateiordner befinden. Dabei wird dasselbe URL-Format für Anmeldedaten verwendet, das in der Avro-Importanleitung beschrieben ist. 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

Verwenden Sie die folgenden Flags, um anzupassen, 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 nicht von Spanner Omni unterstützt wird. Beispiel: %d/%m/%Y %H:%M:%S%Ez.

  • --csv-delimiter: Überschreibt das Trennzeichen. Das Standardtrennzeichen ist ein Komma.

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

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

  • --csv-null-string: Überschreibt den String, der NULL-Werte darstellt. Die Standardeinstellung 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 unter Avro-Import.

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

Das System exportiert alle Tabellen und Einheiten 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 werden nur das Datenbankschema und die Supporttabellen exportiert. 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 rückgängig gemacht. Bereinigen Sie die Datenbank manuell, bevor Sie den Vorgang noch einmal versuchen.

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.