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.importspanner.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:PutObjects3:AbortMultipartUploads3: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.jsonfü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:
Hinweis zum Importieren generierter Spalten und Änderungsstreams in der Spanner-Dokumentation.
Hinweis zum Importieren von Sequenzen in der Spanner-Dokumentation.
Hinweis zum Importieren von verschachtelten Tabellen und Fremdschlüsseln in der Spanner-Dokumentation.
Wenn Sie bestimmte Entitäten nicht importieren möchten, entfernen Sie sie aus der Datei
spanner-export.json.Die Indexerstellung kann bei großen Datasets viel Zeit in Anspruch nehmen. Wenn Sie nicht auf die Indexerstellung warten möchten, verwenden Sie das optionale Flag
--avro-skip-wait-for-index-creation.
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,BYTESundJSON.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, derNULL-Werte darstellt. Der Standardwert ist\N.--csv-has-trailing-delimiters: Gibt an, ob die CSV-Dateien nachgestellte Trennzeichen haben. Der Standardwert istfalse.
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.