Vorlage „Cloud Storage Text für Spanner“

Die Vorlage "Cloud Storage Text für Spanner" ist eine Batchpipeline, die CSV-Textdateien aus Cloud Storage liest und in eine Spanner-Datenbank importiert.

Pipelineanforderungen

  • Die Spanner-Zieldatenbank und -tabelle müssen vorhanden sein.
  • Sie benötigen Leseberechtigungen für den Cloud Storage-Bucket und Schreibberechtigungen für die Spanner-Zieldatenbank.
  • Der Cloud Storage-Eingabepfad mit den CSV-Dateien muss vorhanden sein.
  • Sie müssen eine Importmanifestdatei mit einer JSON-Beschreibung der CSV-Dateien erstellen. Sie müssen diese Manifestdatei in Cloud Storage speichern.
  • Wenn die Spanner-Zieldatenbank bereits über ein Schema verfügt, müssen alle in der Manifestdatei angegebenen Spalten dieselben Datentypen wie die entsprechenden Spalten im Schema der Zieldatenbank haben.
  • Die ASCII- oder UTF-8-codierte Manifestdatei muss folgendem Format entsprechen:

  • Zu importierende Textdateien müssen im CSV-Format mit ASCII- oder UTF-8-Codierung vorliegen. Wir empfehlen, in UTF-8-codierten Dateien keine Bytereihenfolge-Marke (Byte Order Mark, BOM) zu verwenden.
  • Die Daten müssen einem der folgenden Typen entsprechen:

    GoogleSQL

        BOOL
        INT64
        FLOAT64
        NUMERIC
        STRING
        DATE
        TIMESTAMP
        BYTES
        JSON

    PostgreSQL

        boolean
        bigint
        double precision
        numeric
        character varying, text
        date
        timestamp with time zone
        bytea

Vorlagenparameter

Erforderliche Parameter

  • instanceId: Die Instanz-ID der Spanner-Datenbank.
  • databaseId: Die Datenbank-ID der Spanner-Datenbank.
  • importManifest: Der Pfad in Cloud Storage, der beim Importieren von Manifestdateien verwendet werden soll. Beispiel: gs://your-bucket/your-folder/your-manifest.json.

Optionale Parameter

  • spannerHost: Der Cloud Spanner-Endpunkt, der in der Vorlage aufgerufen werden soll. Wird nur zum Testen verwendet. Beispiel: https://batch-spanner.googleapis.com. Die Standardeinstellung ist https://batch-spanner.googleapis.com.
  • columnDelimiter: Das Spaltentrennzeichen, das in der Quelldatei verwendet wird. Der Standardwert ist ,. Beispiel: ,
  • fieldQualifier: Das Zeichen, das jeden Wert in der Quelldatei, die das Spaltentrennzeichen enthält, umgeben muss. Der Standardwert ist ein doppeltes Anführungszeichen.
  • trailingDelimiter: Gibt an, ob die Zeilen in den Quelldateien nachgestellte Trennzeichen haben (ob das Zeichen columnDelimiter also am Ende jeder Zeile nach dem letzten Spaltenwert erscheint). Der Standardwert ist true.
  • escape: Das von der Quelldatei verwendete Escapezeichen. Dieser Parameter ist standardmäßig nicht gesetzt und die Vorlage verwendet kein Escapezeichen.
  • nullString: Der String, der einen NULL-Wert darstellt. Dieser Parameter ist standardmäßig nicht gesetzt und die Vorlage verwendet den Null-String nicht.
  • dateFormat: Das zum Parsen der Datumsspalten verwendete Format. Standardmäßig versucht die Pipeline, die Datumsspalten als yyyy-M-d[' 00:00:00'] zu parsen, z. B. als 2019-01-31 oder 2019-1-1 00:00:00. Wenn sich Ihr Datumsformat unterscheidet, geben Sie es mit den Mustern java.time.format.DateTimeFormatter (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html) an.
  • timestampFormat: Das zum Parsen der Zeitstempelspalten verwendete Format. Ist der Zeitstempel eine lange Ganzzahl, wird er als UNIX-Epoche geparst. Andernfalls wird er als String mit dem Format java.time.format.DateTimeFormatter.ISO_INSTANT (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html#ISO_INSTANT) geparst. In anderen Fällen geben Sie Ihren eigenen Musterstring an, z. B. mithilfe von MMM dd yyyy HH:mm:ss.SSSVV für Zeitstempel im Format Jan 21 1998 01:02:03.456+08:00.
  • spannerProjectId: Die ID des Google Cloud-Projekts, das die Spanner-Datenbank enthält. Wenn nicht festgelegt, wird die Projekt-ID des Google Cloud-Standardprojekts verwendet.
  • spannerPriority: Die Anfragepriorität für Spanner-Aufrufe. Mögliche Werte sind HIGH, MEDIUM und LOW. Der Standardwert ist MEDIUM.
  • handleNewLine: Wenn true, können die Eingabedaten Zeilenumbruchzeichen enthalten. Andernfalls führen Zeilenumbruchzeichen zu einem Fehler. Der Standardwert ist false. Die Aktivierung der Neuzeilenbehandlung kann die Leistung beeinträchtigen.
  • invalidOutputPath: Der Cloud Storage-Pfad, der beim Schreiben von Zeilen verwendet werden soll, die nicht importiert werden können. Beispiel: gs://your-bucket/your-path. Die Standardeinstellung ist leer.

Wenn Sie benutzerdefinierte Datums- oder Zeitstempelformate verwenden müssen, stellen Sie sicher, dass sie gültige java.time.format.DateTimeFormatter-Muster haben. Die folgende Tabelle zeigt zusätzliche Beispiele für benutzerdefinierte Formate in den Datums- und Zeitstempelspalten:

Typ Eingabewert Format Bemerkung
DATE 2011-3-31 Die Vorlage kann dieses Format standardmäßig parsen. Sie müssen den Parameter dateFormat nicht angeben.
DATE 2011-3-31 00:00:00 Die Vorlage kann dieses Format standardmäßig parsen. Sie müssen das Format nicht angeben. Sie können yyyy-M-d' 00:00:00' verwenden.
DATE 01. Apr 18 tt. MMM jj
DATE Mittwoch, 3. April 2019 EEEE, d. MMMM jjjj
TIMESTAMP 2019-01-02T11:22:33Z
2019-01-02T11:22:33.123Z
2019-01-02T11:22:33.12356789Z
Das Standardformat ISO_INSTANT kann diese Art von Zeitstempel parsen. Sie müssen den Parameter timestampFormat nicht angeben.
TIMESTAMP 1568402363 Standardmäßig kann die Vorlage diese Art von Zeitstempel parsen und sie als Unix-Epochen-Zeit behandeln.
TIMESTAMP Di, 3. Jun 2008 11:05:30 GMT EEE, d. MMM jjjj HH:mm:ss VV
TIMESTAMP 31.12.2018 110530.123PST tt.MM.jjjj HHmmss.SSSSz
TIMESTAMP 2019-01-02T11:22:33Z oder 2019-01-02T11:22:33.123Z jjjj-MM-tt'T'HH:mm:ss[.SSS]VV Wenn die Eingabespalte eine Kombination aus 2019-01-02T11:22:33Z und 2019-01-02T11:22:33.123Z ist, kann das Standardformat diese Art von Zeitstempel parsen. Sie müssen keinen eigenen Formatparameter angeben. Sie können jedoch yyyy-MM-dd'T'HH:mm:ss[.SSS]VV verwenden, um beide Fälle zu verarbeiten. Beachten Sie, dass Sie yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z' nicht verwenden können, da das Postfix "Z" als Zeitzonen-ID und nicht als Zeichenliteral geparst werden muss. Intern wird die Zeitstempelspalte in eine java.time.Instant umgewandelt. Daher muss es in UTC angegeben werden oder mit Zeitzoneninformationen verknüpft sein. Lokales Datum, z. B. 2019-01-02 11:22:33, kann nicht als gültige java.time.Instant geparst werden.

Führen Sie die Vorlage aus.

Console

  1. Rufen Sie die Dataflow-Seite Job aus Vorlage erstellen auf.
  2. Zur Seite "Job aus Vorlage erstellen“
  3. Geben Sie im Feld Jobname einen eindeutigen Jobnamen ein.
  4. Optional: Wählen Sie für Regionaler Endpunkt einen Wert aus dem Drop-down-Menü aus. Die Standardregion ist us-central1.

    Eine Liste der Regionen, in denen Sie einen Dataflow-Job ausführen können, finden Sie unter Dataflow-Standorte.

  5. Wählen Sie im Drop-down-Menü Dataflow-Vorlage die Option the Text Files on Cloud Storage to Cloud Spanner templateaus.
  6. Geben Sie Ihre Parameterwerte in die Parameterfelder ein.
  7. Klicken Sie auf Job ausführen.

gcloud

Führen Sie die Vorlage in der Shell oder im Terminal aus:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/GCS_Text_to_Cloud_Spanner \
    --region REGION_NAME \
    --parameters \
instanceId=INSTANCE_ID,\
databaseId=DATABASE_ID,\
importManifest=GCS_PATH_TO_IMPORT_MANIFEST

Ersetzen Sie dabei Folgendes:

  • JOB_NAME: ein eindeutiger Jobname Ihrer Wahl
  • VERSION: Die Version der Vorlage, die Sie verwenden möchten

    Sie können die folgenden Werte verwenden:

    • latest zur Verwendung der neuesten Version der Vorlage, die im nicht datierten übergeordneten Ordner im Bucket verfügbar ist: gs://dataflow-templates-REGION_NAME/latest/
    • Den Versionsnamen wie 2023-09-12-00_RC00, um eine bestimmte Version der Vorlage zu verwenden. Diese ist verschachtelt im jeweiligen datierten übergeordneten Ordner im Bucket enthalten: gs://dataflow-templates-REGION_NAME/.
  • REGION_NAME: die Region, in der Sie Ihren Dataflow-Job bereitstellen möchten, z. B. us-central1
  • INSTANCE_ID: Ihre Spanner-Instanz-ID
  • DATABASE_ID: Ihre Spanner-Datenbank-ID
  • GCS_PATH_TO_IMPORT_MANIFEST: Der Cloud Storage-Pfad zu Ihrer Importmanifestdatei

API

Senden Sie eine HTTP-POST-Anfrage, um die Vorlage mithilfe der REST API auszuführen. Weitere Informationen zur API und ihren Autorisierungsbereichen finden Sie unter projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/GCS_Text_to_Cloud_Spanner
{
   "jobName": "JOB_NAME",
   "parameters": {
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "importManifest": "GCS_PATH_TO_IMPORT_MANIFEST"
   },
   "environment": {
       "machineType": "n1-standard-2"
   }
}

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: die ID des Google Cloud-Projekts, in dem Sie den Dataflow-Job ausführen möchten
  • JOB_NAME: ein eindeutiger Jobname Ihrer Wahl
  • VERSION: Die Version der Vorlage, die Sie verwenden möchten

    Sie können die folgenden Werte verwenden:

    • latest zur Verwendung der neuesten Version der Vorlage, die im nicht datierten übergeordneten Ordner im Bucket verfügbar ist: gs://dataflow-templates-REGION_NAME/latest/
    • Den Versionsnamen wie 2023-09-12-00_RC00, um eine bestimmte Version der Vorlage zu verwenden. Diese ist verschachtelt im jeweiligen datierten übergeordneten Ordner im Bucket enthalten: gs://dataflow-templates-REGION_NAME/.
  • LOCATION: die Region, in der Sie Ihren Dataflow-Job bereitstellen möchten, z. B. us-central1
  • INSTANCE_ID: Ihre Spanner-Instanz-ID
  • DATABASE_ID: Ihre Spanner-Datenbank-ID
  • GCS_PATH_TO_IMPORT_MANIFEST: Der Cloud Storage-Pfad zu Ihrer Importmanifestdatei

Nächste Schritte