Il modello Cloud Storage Text to Spanner è una pipeline batch che legge file di testo CSV da Cloud Storage e li importa in un database Spanner.
Requisiti della pipeline
- Il database e la tabella Spanner di destinazione devono esistere.
- Devi disporre delle autorizzazioni di lettura per il bucket Cloud Storage e di scrittura per il database Spanner di destinazione.
- Il percorso Cloud Storage di input contenente i file CSV deve esistere.
- Devi creare un file manifest di importazione contenente una descrizione JSON dei file CSV e devi archiviarlo in Cloud Storage.
- Se il database Spanner di destinazione ha già uno schema, tutte le colonne specificate nel file manifest devono avere gli stessi tipi di dati delle colonne corrispondenti nello schema del database di destinazione.
-
Il file manifest, codificato in ASCII o UTF-8, deve corrispondere al seguente formato:
- I file di testo da importare devono essere in formato CSV, con codifica ASCII o UTF-8. Ti consigliamo di non utilizzare il byte order mark (BOM) nei file codificati in UTF-8.
- I dati devono corrispondere a uno dei seguenti tipi:
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
Parametri del modello
Parametri obbligatori
- instanceId: l'ID istanza del database Spanner.
- databaseId: l'ID database del database Spanner.
- importManifest: il percorso in Cloud Storage da utilizzare per importare i file manifest. Ad esempio,
gs://your-bucket/your-folder/your-manifest.json
.
Parametri facoltativi
- spannerHost: l'endpoint Cloud Spanner da chiamare nel modello. Utilizzato solo per i test. Ad esempio,
https://batch-spanner.googleapis.com
. Il valore predefinito è https://batch-spanner.googleapis.com. - columnDelimiter: il delimitatore di colonna utilizzato dal file di origine. Il valore predefinito è
,
. Ad esempio:,
. - fieldQualifier: il carattere che deve racchiudere qualsiasi valore nel file di origine che contiene columnDelimiter. Il valore predefinito sono le virgolette doppie.
- trailingDelimiter: specifica se le righe nei file di origine hanno delimitatori finali, ovvero se il carattere
columnDelimiter
viene visualizzato alla fine di ogni riga, dopo l'ultimo valore della colonna. Il valore predefinito ètrue
. - escape: il carattere di escape utilizzato dal file di origine. Per impostazione predefinita, questo parametro non è impostato e il modello non utilizza il carattere di escape.
- nullString: la stringa che rappresenta un valore
NULL
. Per impostazione predefinita, questo parametro non è impostato e il modello non utilizza la stringa nulla. - dateFormat: il formato utilizzato per analizzare le colonne di date. Per impostazione predefinita, la pipeline tenta di analizzare le colonne di date come
yyyy-M-d[' 00:00:00']
, ad esempio come2019-01-31
o2019-1-1 00:00:00
. Se il formato della data è diverso, specifica il formato utilizzando i pattern java.time.format.DateTimeFormatter (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html). - timestampFormat: il formato utilizzato per analizzare le colonne timestamp. Se il timestamp è un numero intero lungo, viene analizzato come tempo Unix epoch. In caso contrario, viene analizzato come stringa utilizzando il formato 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). Per altri casi, specifica la tua stringa di pattern, ad esempio utilizzando
MMM dd yyyy HH:mm:ss.SSSVV
per i timestamp nel formatoJan 21 1998 01:02:03.456+08:00
. - spannerProjectId: l'ID del progetto Google Cloud che contiene il database Spanner. Se non è impostato, viene utilizzato l'ID progetto del progetto Google Cloud predefinito.
- spannerPriority: la priorità della richiesta per le chiamate Spanner. I valori possibili sono
HIGH
,MEDIUM
eLOW
. Il valore predefinito èMEDIUM
. - handleNewLine: se
true
, i dati di input possono contenere caratteri di nuova riga. In caso contrario, i caratteri di nuova riga causano un errore. Il valore predefinito èfalse
. L'attivazione della gestione dei caratteri di nuova riga può ridurre le prestazioni. - invalidOutputPath: il percorso Cloud Storage da utilizzare per scrivere le righe che non possono essere importate. Ad esempio,
gs://your-bucket/your-path
. Il valore predefinito è vuoto.
Se devi utilizzare formati di data o timestamp personalizzati, assicurati che siano validi
java.time.format.DateTimeFormatter
pattern. La seguente tabella mostra altri esempi di formati personalizzati per le colonne di data e timestamp:
Tipo | Valore di input | Formato | Commento |
---|---|---|---|
DATE |
2011-3-31 | Per impostazione predefinita, il modello può analizzare questo formato.
Non è necessario specificare il parametro dateFormat . |
|
DATE |
2011-3-31 00:00:00 | Per impostazione predefinita, il modello può analizzare questo formato.
Non è necessario specificare il formato. Se preferisci, puoi utilizzare
yyyy-M-d' 00:00:00' . |
|
DATE |
1 apr 2018 | gg MMM, aa | |
DATE |
Mercoledì 3 aprile 2019 | EEEE, LLLL d, yyyy G | |
TIMESTAMP |
2019-01-02T11:22:33Z 2019-01-02T11:22:33.123Z 2019-01-02T11:22:33.12356789Z |
Il formato predefinito ISO_INSTANT può analizzare questo tipo di timestamp.
Non è necessario fornire il parametro timestampFormat . |
|
TIMESTAMP |
1568402363 | Per impostazione predefinita, il modello può analizzare questo tipo di timestamp e considerarlo come ora Unix. | |
TIMESTAMP |
Mar 3 giu 2008 11:05:30 GMT | EEE, gg MMM aaaa HH:mm:ss VV | |
TIMESTAMP |
2018/12/31 110530.123PST | aaaa/MM/gg HHmmss.SSSz | |
TIMESTAMP |
2019-01-02T11:22:33Z o 2019-01-02T11:22:33.123Z | yyyy-MM-dd'T'HH:mm:ss[.SSS]VV | Se la colonna di input è un mix di 2019-01-02T11:22:33Z e 2019-01-02T11:22:33.123Z, il
formato predefinito può analizzare questo tipo di timestamp. Non è necessario fornire un parametro di formato.
Puoi utilizzare yyyy-MM-dd'T'HH:mm:ss[.SSS]VV per gestire entrambi
i casi. Non puoi utilizzare yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z' perché il suffisso "Z" deve
essere analizzato come ID fuso orario, non come carattere letterale. Internamente, la colonna timestamp viene
convertita in un
java.time.Instant .
Pertanto, deve essere specificato in UTC o avere associate informazioni sul fuso orario.
La data e l'ora locali, ad esempio 2019-01-02 11:22:33, non possono essere analizzate come un valore java.time.Instant valido.
|
Esegui il modello
Console
- Vai alla pagina Crea job da modello di Dataflow. Vai a Crea job da modello
- Nel campo Nome job, inserisci un nome univoco per il job.
- (Facoltativo) Per Endpoint a livello di regione, seleziona un valore dal menu a discesa. La regione
predefinita è
us-central1
.Per un elenco delle regioni in cui puoi eseguire un job Dataflow, consulta Località di Dataflow.
- Dal menu a discesa Modello di dataflow, seleziona the Text Files on Cloud Storage to Cloud Spanner template.
- Nei campi dei parametri forniti, inserisci i valori dei parametri.
- Fai clic su Esegui job.
gcloud
Nella shell o nel terminale, esegui il modello:
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
Sostituisci quanto segue:
JOB_NAME
: un nome univoco del job a tua sceltaVERSION
: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latest
per utilizzare l'ultima versione del modello, disponibile nella cartella principale senza data nel bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, ad esempio
2023-09-12-00_RC00
, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella principale con data nel bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
INSTANCE_ID
: il tuo ID istanza SpannerDATABASE_ID
: l'ID del tuo database SpannerGCS_PATH_TO_IMPORT_MANIFEST
: il percorso Cloud Storage del file manifest di importazione
API
Per eseguire il modello utilizzando l'API REST, invia una richiesta POST HTTP. Per ulteriori informazioni sull'API e sui relativi ambiti di autorizzazione, consulta 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" } }
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto Google Cloud in cui vuoi eseguire il job DataflowJOB_NAME
: un nome univoco del job a tua sceltaVERSION
: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latest
per utilizzare l'ultima versione del modello, disponibile nella cartella principale senza data nel bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, ad esempio
2023-09-12-00_RC00
, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella principale con data nel bucket: gs://dataflow-templates-REGION_NAME/
LOCATION
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
INSTANCE_ID
: il tuo ID istanza SpannerDATABASE_ID
: l'ID del tuo database SpannerGCS_PATH_TO_IMPORT_MANIFEST
: il percorso Cloud Storage del file manifest di importazione
Passaggi successivi
- Scopri di più sui modelli Dataflow.
- Consulta l'elenco dei modelli forniti da Google.