Il modello Datastream-Spanner è una pipeline di streaming che legge
gli eventi Datastream
da un bucket Cloud Storage e li scrive in un database Spanner. È destinato alla
migrazione dei dati dalle origini Datastream a Spanner. Specifica
il parametro gcsPubSubSubscription per leggere i dati dalle notifiche Pub/Sub OPPURE
fornisci il parametro inputFilePattern per leggere direttamente i dati dai file in Cloud Storage.
Tutte le tabelle richieste per la migrazione devono esistere nel database Spanner di destinazione prima dell'esecuzione del modello. Pertanto, la migrazione dello schema da un database di origine a Spanner di destinazione deve essere completata prima della migrazione dei dati. I dati possono esistere nelle tabelle prima della migrazione. Questo modello non propaga le modifiche allo schema di Datastream al database Spanner.
La coerenza dei dati è garantita solo al termine della migrazione, quando tutti i dati sono stati scritti in Spanner. Per archiviare le informazioni sull'ordinamento per ogni record scritto in Spanner, questo modello crea una tabella aggiuntiva (chiamata tabella shadow) per ogni tabella nel database Spanner. Viene utilizzato per garantire la coerenza al termine della migrazione. Le tabelle shadow non vengono eliminate dopo la migrazione e possono essere utilizzate per scopi di convalida al termine della migrazione.
Eventuali errori che si verificano durante l'operazione, ad esempio mancata corrispondenza dello schema, file JSON in formato errato o errori derivanti dall'esecuzione delle trasformazioni, vengono registrati in una coda di errori. La coda degli errori è una cartella Cloud Storage che archivia tutti gli eventi Datastream che hanno riscontrato errori insieme al motivo dell'errore in formato di testo. Gli errori possono essere temporanei o permanenti e vengono archiviati nelle cartelle Cloud Storage appropriate nella coda degli errori. Gli errori temporanei vengono riprovati automaticamente, mentre quelli permanenti no. In caso di errori permanenti, hai la possibilità di apportare correzioni agli eventi di modifica e spostarli nel bucket di tentativi durante l'esecuzione del modello.
Requisiti della pipeline
- Uno stream Datastream con stato In esecuzione o Non avviato.
- Un bucket Cloud Storage in cui vengono replicati gli eventi Datastream.
- Un database Spanner con tabelle esistenti. Queste tabelle possono essere vuote o contenere dati.
Parametri del modello
Parametri obbligatori
- instanceId: l'istanza Spanner in cui vengono replicate le modifiche.
- databaseId: il database Spanner in cui vengono replicate le modifiche.
Parametri facoltativi
- inputFilePattern: la posizione del file Cloud Storage che contiene i file Datastream da replicare. In genere, si tratta del percorso principale di uno stream. Il supporto di questa funzionalità è stato disattivato. Utilizza questa funzionalità solo per riprovare le voci che finiscono nella coda DLQ grave.
- inputFileFormat: il formato del file di output prodotto da Datastream. Ad esempio
avro,json. Il valore predefinito èavro. - sessionFilePath: percorso del file di sessione in Cloud Storage che contiene le informazioni di mapping di HarbourBridge.
- projectId: l'ID progetto Spanner.
- spannerHost: l'endpoint Cloud Spanner da chiamare nel modello. Ad esempio,
https://batch-spanner.googleapis.com. Il valore predefinito è https://batch-spanner.googleapis.com. - gcsPubSubSubscription: la sottoscrizione Pub/Sub utilizzata in un criterio di notifica di Cloud Storage. Per il nome, utilizza il formato
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>. - streamName: il nome o il modello dello stream da interrogare per ottenere informazioni sullo schema e sul tipo di origine.
- shadowTablePrefix: il prefisso utilizzato per denominare le tabelle shadow. Valore predefinito:
shadow_. - shouldCreateShadowTables: questo flag indica se devono essere create tabelle shadow nel database Cloud Spanner. Il valore predefinito è true.
- rfcStartDateTime: la data e l'ora di inizio utilizzate per il recupero da Cloud Storage (https://tools.ietf.org/html/rfc3339). Il valore predefinito è: 1970-01-01T00:00:00.00Z.
- fileReadConcurrency: il numero di file DataStream simultanei da leggere. Il valore predefinito è 30.
- deadLetterQueueDirectory: il percorso del file utilizzato per archiviare l'output della coda di errori. Il percorso del file predefinito è una directory nella posizione temporanea del job Dataflow.
- dlqRetryMinutes: il numero di minuti tra i tentativi di ripetizione della coda di messaggi non recapitabili. Il valore predefinito è
10. - dlqMaxRetryCount: il numero massimo di tentativi per gli errori temporanei tramite DLQ. Il valore predefinito è
500. - dataStreamRootUrl: URL radice dell'API Datastream. Il valore predefinito è https://datastream.googleapis.com/.
- datastreamSourceType: il tipo di database di origine a cui si connette Datastream. Esempio: mysql/oracle. Deve essere impostato durante i test senza un'istanza Datastream in esecuzione.
- roundJsonDecimals: se questo flag è impostato, arrotonda i valori decimali nelle colonne JSON a un numero che può essere memorizzato senza perdita di precisione. Il valore predefinito è false.
- runMode: questo è il tipo di modalità di esecuzione. Il valore predefinito è normale. Utilizza la modalità
retryDLQper elaborare esclusivamente i file di errori gravi contemporaneamente alla pipeline di migrazione live. Utilizza la modalitàretryAllDLQsolo quando la pipeline normale è arrestata. Questa modalità elabora sia le directory di nuovi tentativi sia quelle gravi. NON eseguireretryAllDLQcontemporaneamente a qualsiasi pipeline attiva, in quanto ciò causerà conflitti. - transformationContextFilePath: percorso del file di contesto di trasformazione in spazio di archiviazione sul cloud utilizzato per popolare i dati utilizzati nelle trasformazioni eseguite durante le migrazioni. Ad esempio, l'ID shard nel nome del database per identificare il database da cui è stata eseguita la migrazione di una riga.
- directoryWatchDurationInMinutes: la durata per la quale la pipeline deve continuare a eseguire il polling di una directory in GCS. I file Datastreamoutput sono disposti in una struttura di directory che mostra il timestamp dell'evento raggruppato per minuti. Questo parametro deve essere approssimativamente uguale al ritardo massimo che potrebbe verificarsi tra l'evento che si verifica nel database di origine e lo stesso evento scritto in GCS da Datastream. 99,9° percentile = 10 minuti. Il valore predefinito è 10.
- spannerPriority: la priorità della richiesta per le chiamate Cloud Spanner. Il valore deve essere uno dei seguenti: [
HIGH,MEDIUM,LOW]. Il valore predefinito èHIGH. - dlqGcsPubSubSubscription: l'abbonamento Pub/Sub utilizzato in un criterio di notifica Cloud Storage per la directory di nuovi tentativi DLQ durante l'esecuzione in modalità normale. Per il nome, utilizza il formato
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>. Se impostati, deadLetterQueueDirectory e dlqRetryMinutes vengono ignorati. - transformationJarPath: percorso del file JAR personalizzato in Cloud Storage per il file che contiene la logica di trasformazione personalizzata per l'elaborazione dei record nella migrazione in avanti. Il valore predefinito è vuoto.
- transformationClassName: nome di classe completo con la logica di trasformazione personalizzata. È un campo obbligatorio se viene specificato transformationJarPath. Il valore predefinito è vuoto.
- transformationCustomParameters: stringa contenente eventuali parametri personalizzati da trasferire alla classe di trasformazione personalizzata. Il valore predefinito è vuoto.
- filteredEventsDirectory: questo è il percorso del file in cui archiviare gli eventi filtrati tramite la trasformazione personalizzata. Il valore predefinito è una directory nella posizione temporanea del job Dataflow. Il valore predefinito è sufficiente nella maggior parte delle condizioni.
- sourceConfigURL: percorso Cloud Storage di un file di configurazione dello shard per le migrazioni suddivise in shard. Si prevede un file HOCON o JSON. Per un file di esempio, consulta v2/datastream-to-spanner/src/test/resources/DatastreamToSpannerSingleDFShardedMigrationIT/sharding-config.conf nel repository. Ad esempio,
gs://my-bucket/my-shard-config.conf. Ad esempio:gs://my-bucket/my-shard-config.conf. - tableOverrides: questi sono gli override del nome della tabella dall'origine a Spanner. Sono scritte nel seguente formato: [{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}]. Questo esempio mostra il mapping della tabella Singers con Vocalists e della tabella Albums con Records. Ad esempio,
[{Singers, Vocalists}, {Albums, Records}]. Il valore predefinito è vuoto. - columnOverrides: questi sono gli override del nome della colonna dall'origine a Spanner. Sono scritte nel seguente formato: [{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}]. Tieni presente che SourceTableName deve rimanere invariato sia nella coppia di origine che in quella Spanner. Per ignorare i nomi delle tabelle, utilizza tableOverrides.L'esempio mostra la mappatura di SingerName a TalentName e di AlbumName a RecordName rispettivamente nelle tabelle Singers e Albums. Ad esempio,
[{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}]. Il valore predefinito è vuoto. - schemaOverridesFilePath: un file che specifica le sostituzioni del nome della tabella e della colonna dall'origine a Spanner. Il valore predefinito è vuoto.
- shadowTableSpannerInstanceId: istanza separata facoltativa per le tabelle shadow. Se non specificato, le tabelle shadow verranno create nell'istanza principale. Se specificato, assicurati che sia specificato anche shadowTableSpannerDatabaseId. Il valore predefinito è vuoto.
- shadowTableSpannerDatabaseId: database separato facoltativo per le tabelle shadow. Se non specificate, le tabelle shadow verranno create nel database principale. Se specificato, assicurati che sia specificato anche shadowTableSpannerInstanceId. Il valore predefinito è vuoto.
- failureInjectionParameter: parametro di inserimento dell'errore. Utilizzato solo per i test. Il valore predefinito è vuoto.
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.
- Nel menu a discesa Modello Dataflow, seleziona il modello Cloud Datastream a Spanner.
- 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 flex-template run JOB_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Cloud_Datastream_to_Spanner \ --parameters \ inputFilePattern=GCS_FILE_PATH,\ streamName=STREAM_NAME,\ instanceId=CLOUDSPANNER_INSTANCE,\ databaseId=CLOUDSPANNER_DATABASE,\ deadLetterQueueDirectory=DLQ
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 sceltaREGION_NAME: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1VERSION: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latestper utilizzare l'ultima versione del modello, disponibile nella cartella principale senza data nel bucket: gs://dataflow-templates/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/
GCS_FILE_PATH: il percorso Cloud Storage utilizzato per archiviare gli eventi dello stream di dati. Ad esempio:gs://bucket/path/to/data/CLOUDSPANNER_INSTANCE: la tua istanza Spanner.CLOUDSPANNER_DATABASE: il tuo database Spanner.DLQ: il percorso Cloud Storage della directory della coda di errori.
API
Per eseguire il modello utilizzando l'API REST, invia una richiesta HTTP POST. Per saperne di più sull'API e sui relativi ambiti di autorizzazione, consulta projects.templates.launch.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Cloud_Datastream_to_Spanner", "parameters": { "inputFilePattern": "GCS_FILE_PATH", "streamName": "STREAM_NAME" "instanceId": "CLOUDSPANNER_INSTANCE" "databaseId": "CLOUDSPANNER_DATABASE" "deadLetterQueueDirectory": "DLQ" } } }
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 sceltaLOCATION: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1VERSION: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latestper utilizzare l'ultima versione del modello, disponibile nella cartella principale senza data nel bucket: gs://dataflow-templates/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/
GCS_FILE_PATH: il percorso Cloud Storage utilizzato per archiviare gli eventi dello stream di dati. Ad esempio:gs://bucket/path/to/data/CLOUDSPANNER_INSTANCE: la tua istanza Spanner.CLOUDSPANNER_DATABASE: il tuo database Spanner.DLQ: il percorso Cloud Storage della directory della coda di errori.
Passaggi successivi
- Scopri di più sui modelli Dataflow.
- Consulta l'elenco dei modelli forniti da Google.