Il modello Cloud Storage Text to Spanner è una pipeline batch che legge i 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 quelle di scrittura per il database Spanner di destinazione.
- Deve esistere il percorso Cloud Storage di input che contiene i file CSV.
- Devi creare un file manifest di importazione contenente una descrizione JSON dei file CSV e archiviarlo in Cloud Storage.
- Se il database Spanner di destinazione ha già uno schema, 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 avere il 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 con codifica 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
Parametro | Descrizione |
---|---|
instanceId |
L'ID istanza del database Spanner. |
databaseId |
L'ID del database Spanner. |
importManifest |
Il percorso in Cloud Storage del file manifest di importazione. |
columnDelimiter |
Il delimitatore di colonna utilizzato dal file di origine. Il valore predefinito è , . |
fieldQualifier |
Il carattere che deve racchiudere qualsiasi valore nel file di origine che contiene columnDelimiter . Il valore predefinito è " .
|
trailingDelimiter |
Specifica se le righe nei file di origine hanno delimitatori finali (ossia, 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 null. |
dateFormat |
Il formato utilizzato per analizzare le colonne delle date. Per impostazione predefinita, la pipeline tenta di analizzare le colonne delle date come yyyy-M-d[' 00:00:00'] , ad esempio 2019-01-31 o 2019-1-1 00:00:00.
Se il formato della data è diverso, specificalo utilizzando i pattern
java.time.format.DateTimeFormatter . |
timestampFormat |
Il formato utilizzato per analizzare le colonne dei timestamp. Se il timestamp è un numero intero lungo, viene analizzato come data e ora di Unix. Altrimenti, viene analizzata come stringa utilizzando il formato java.time.format.DateTimeFormatter.ISO_INSTANT . In altri casi, specifica la tua stringa pattern, ad esempio utilizzando MMM dd yyyy HH:mm:ss.SSSVV per i timestamp nel formato "Jan 21 1998 01:02:03.456+08:00" . |
spannerProjectId |
(Facoltativo) L'ID progetto Google Cloud del database Spanner. Se non viene configurato, viene utilizzato il progetto Google Cloud predefinito. |
spannerPriority |
(Facoltativo) La
priorità della richiesta
per le chiamate Spanner. I valori possibili sono HIGH ,
MEDIUM , LOW . Il valore predefinito è MEDIUM . |
handleNewLine |
(Facoltativo) 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 delle nuove righe può ridurre le prestazioni. |
invalidOutputPath |
(Facoltativo) Il percorso Cloud Storage per scrivere le righe che non possono essere importate. |
Se devi utilizzare formati di data o timestamp personalizzati, assicurati che siano pattern
java.time.format.DateTimeFormatter
validi. La seguente tabella mostra ulteriori esempi di formati personalizzati per le colonne di data e timestamp:
Tipo | Valore di input | Formato | Osservazione |
---|---|---|---|
DATE |
2011-3-31 | Per impostazione predefinita, il modello è in grado di analizzare questo formato.
Non è necessario specificare il parametro dateFormat . |
|
DATE |
31-3-2011 00:00:00 | Per impostazione predefinita, il modello è in grado di analizzare questo formato.
Non è necessario specificare il formato. Se vuoi, puoi usare
yyyy-M-d' 00:00:00' . |
|
DATE |
01 apr 18 | gg MMM, yy | |
DATE |
Mercoledì 3 aprile 2019 | EEEE, LLLL d, yyyy G | |
TIMESTAMP |
02-01-2019T11:22:33Z 02-01-2019T11:22:33.123Z 02-01-2019T11:22:33.12356789Z |
Il formato predefinito ISO_INSTANT è in grado di 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 un'epoca di Unix. | |
TIMESTAMP |
Tue, 3 Jun 2008 11:05:30 GMT | EEE, g MMM aaaa HH:mm:ss VV | |
TIMESTAMP |
31/12/2018 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 è una combinazione 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 personalizzato.
Puoi usare 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 postfix "Z" deve essere analizzato come ID di fuso orario, non come valore letterale di caratteri. Internamente, la colonna del timestamp viene convertita in java.time.Instant .
Pertanto, deve essere specificato nel fuso orario UTC o avere informazioni sul fuso orario associate.
La data/ora locale, ad esempio 2019-01-02 11:22:33, non può essere analizzata come 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, vedi Località Dataflow.
- Nel menu a discesa Modello 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 job univoco a tua sceltaVERSION
: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latest
per utilizzare la versione più recente del modello, disponibile nella cartella padre senza data del bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, come
2023-09-12-00_RC00
, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella padre con data all'interno del bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
INSTANCE_ID
: l'ID istanza SpannerDATABASE_ID
: l'ID 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 maggiori 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 del progetto Google Cloud in cui vuoi eseguire il job DataflowJOB_NAME
: un nome job univoco a tua sceltaVERSION
: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latest
per utilizzare la versione più recente del modello, disponibile nella cartella padre senza data del bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, come
2023-09-12-00_RC00
, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella padre con data all'interno del bucket: gs://dataflow-templates-REGION_NAME/
LOCATION
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
INSTANCE_ID
: l'ID istanza SpannerDATABASE_ID
: l'ID 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.