Il modello JDBC to BigQuery è una pipeline batch che copia i dati da una tabella di database relazionale in una tabella BigQuery esistente. Questa pipeline utilizza JDBC per connettersi al database relazionale. Utilizza questo modello per copiare i dati da qualsiasi database relazionale con i driver JDBC disponibili in BigQuery.
Per un ulteriore livello di protezione, puoi passare una chiave Cloud KMS, insieme a parametri di stringa di connessione, nome utente e password codificati in Base64 criptati con la chiave Cloud KMS. Per ulteriori dettagli sulla crittografia del nome utente, della password e dei parametri della stringa di connessione, consulta l'endpoint di crittografia dell'API Cloud KMS.
Requisiti della pipeline
- I driver JDBC per il database relazionale devono essere disponibili.
- La tabella BigQuery deve esistere prima dell'esecuzione della pipeline.
- La tabella BigQuery deve avere uno schema compatibile.
- Il database relazionale deve essere accessibile dalla subnet in cui viene eseguito Dataflow.
Parametri del modello
Parametri obbligatori
- driverJars: l'elenco separato da virgole dei file JAR del driver. Ad esempio,
gs://your-bucket/driver_jar1.jar,gs://your-bucket/driver_jar2.jar
. - driverClassName: il nome della classe del driver JDBC. Ad esempio,
com.mysql.jdbc.Driver
. - connectionURL: la stringa dell'URL di connessione JDBC. Ad esempio,
jdbc:mysql://some-host:3306/sampledb
. Puoi passare questo valore come stringa criptata con una chiave Cloud KMS e poi codificata in Base64. Rimuovi i caratteri di spaziatura dalla stringa codificata Base64. Tieni presente la differenza tra una stringa di connessione al database Oracle non RAC (jdbc:oracle:thin:@some-host:<port>:<sid>
) e una stringa di connessione al database Oracle RAC (jdbc:oracle:thin:@//some-host[:<port>]/<service_name>
). Ad esempio,jdbc:mysql://some-host:3306/sampledb
. - outputTable: la posizione della tabella di output BigQuery. Ad esempio,
<PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>
. - bigQueryLoadingTemporaryDirectory: la directory temporanea per il processo di caricamento di BigQuery. Ad esempio,
gs://your-bucket/your-files/temp_dir
.
Parametri facoltativi
- connectionProperties: la stringa di proprietà da utilizzare per la connessione JDBC. Il formato della stringa deve essere
[propertyName=property;]*
.Per ulteriori informazioni, consulta le proprietà di configurazione (https://dev.mysql.com/doc/connector-j/it/connector-j-reference-configuration-properties.html) nella documentazione di MySQL. Ad esempio:unicode=true;characterEncoding=UTF-8
. - username: il nome utente da utilizzare per la connessione JDBC. Può essere passato come stringa criptata con una chiave Cloud KMS o come secret di Secret Manager nel formato projects/{project}/secrets/{secret}/versions/{secret_version}.
- password: la password da utilizzare per la connessione JDBC. Può essere passato come stringa criptata con una chiave Cloud KMS o come secret di Secret Manager nel formato projects/{project}/secrets/{secret}/versions/{secret_version}.
- query: la query da eseguire sull'origine per estrarre i dati. Tieni presente che alcuni tipi JDBC SQL e BigQuery, pur condividendo lo stesso nome, presentano alcune differenze. Alcune mappature di tipi SQL -> BigQuery importanti da tenere a mente sono
DATETIME --> TIMESTAMP
. Potrebbe essere necessario il trasferimento di tipo se gli schemi non corrispondono. Ad esempio:select * from sampledb.sample_table
. - KMSEncryptionKey: la chiave di crittografia Cloud KMS da utilizzare per decriptare il nome utente, la password e la stringa di connessione. Se passi una chiave Cloud KMS, devi anche criptare il nome utente, la password e la stringa di connessione. Ad esempio,
projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key
. - useColumnAlias: se impostato su
true
, la pipeline utilizza l'alias della colonna (AS
) anziché il nome della colonna per mappare le righe a BigQuery. Il valore predefinito èfalse
. - isTruncate: se impostato su
true
, la pipeline viene troncata prima del caricamento dei dati in BigQuery. Il valore predefinito èfalse
, che fa sì che la pipeline aggiunga i dati. - partitionColumn: se viene specificato
partitionColumn
insieme atable
, JdbcIO legge la tabella in parallelo eseguendo più istanze della query sulla stessa tabella (sottoquery) utilizzando gli intervalli. Attualmente supporta le colonne di partizioneLong
eDateTime
. Passa il tipo di colonna tramitepartitionColumnType
. - partitionColumnType: il tipo di
partitionColumn
, accettalong
odatetime
. Valore predefinito: long. - table: la tabella da leggere quando si utilizzano le partizioni. Questo parametro accetta anche una sottoquery tra parentesi. Ad esempio,
(select id, name from Person) as subq
. - numPartitions: il numero di partizioni. Con i limiti inferiore e superiore, questo valore forma gli intervalli di partizione per le espressioni della clausola
WHERE
generate che vengono utilizzate per suddividere la colonna della partizione in modo uniforme. Quando l'input è inferiore a1
, il numero viene impostato su1
. - lowerBound: il limite inferiore da utilizzare nello schema di partizione. Se non viene fornito, questo valore viene dedotto automaticamente da Apache Beam per i tipi supportati.
datetime
partitionColumnType accetta il limite inferiore nel formatoyyyy-MM-dd HH:mm:ss.SSSZ
. Ad esempio:2024-02-20 07:55:45.000+03:30
. - upperBound: il limite superiore da utilizzare nello schema di partizione. Se non viene fornito, questo valore viene dedotto automaticamente da Apache Beam per i tipi supportati.
datetime
partitionColumnType accetta il limite superiore nel formatoyyyy-MM-dd HH:mm:ss.SSSZ
. Ad esempio:2024-02-20 07:55:45.000+03:30
. - fetchSize: il numero di righe da recuperare dal database alla volta. Non utilizzato per le letture partizionate. Il valore predefinito è 50000.
- createDisposition: il valore CreateDisposition di BigQuery da utilizzare. Ad esempio,
CREATE_IF_NEEDED
oCREATE_NEVER
. Il valore predefinito è CREATE_NEVER. - bigQuerySchemaPath: il percorso di Cloud Storage per lo schema JSON di BigQuery. Se
createDisposition
è impostato suCREATE_IF_NEEDED
, questo parametro deve essere specificato. Ad esempio:gs://your-bucket/your-schema.json
. - outputDeadletterTable: la tabella BigQuery da utilizzare per i messaggi che non sono riusciti a raggiungere la tabella di output, formattata come
"PROJECT_ID:DATASET_NAME.TABLE_NAME"
. Se la tabella non esiste, viene creata quando viene eseguita la pipeline. Se questo parametro non viene specificato, la pipeline non andrà a buon fine in caso di errori di scrittura.Questo parametro può essere specificato solo seuseStorageWriteApi
ouseStorageWriteApiAtLeastOnce
è impostato su true. - disabledAlgorithms: algoritmi da disattivare separati da virgola. Se questo valore è impostato su
none
, nessun algoritmo è disattivato. Utilizza questo parametro con cautela, perché gli algoritmi disattivati per impostazione predefinita potrebbero presentare vulnerabilità o problemi di prestazioni. Ad esempio:SSLv3, RC4
. - extraFilesToStage: percorsi Cloud Storage separati da virgole o secret Secret Manager per i file da eseguire in staging nel worker. Questi file vengono salvati nella directory /extra_files in ogni worker. Ad esempio,
gs://<BUCKET_NAME>/file.txt,projects/<PROJECT_ID>/secrets/<SECRET_ID>/versions/<VERSION_ID>
. - useStorageWriteApi: se
true
, la pipeline utilizza l'API BigQuery Storage di scrittura (https://cloud.google.com/bigquery/docs/write-api). Il valore predefinito èfalse
. Per ulteriori informazioni, consulta Utilizzo dell'API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api). - useStorageWriteApiAtLeastOnce: quando utilizzi l'API Storage Write, specifica la semantica di scrittura. Per utilizzare la semantica almeno una volta (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), imposta questo parametro su
true
. Per utilizzare la semantica esattamente una volta, imposta il parametro sufalse
. Questo parametro si applica solo quandouseStorageWriteApi
ètrue
. Il valore predefinito èfalse
.
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 di flusso di dati, seleziona the JDBC to BigQuery with BigQuery Storage API support 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 flex-template run JOB_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Jdbc_to_BigQuery_Flex \ --project=PROJECT_ID \ --region=REGION_NAME \ --parameters \ driverJars=DRIVER_JARS,\ driverClassName=DRIVER_CLASS_NAME,\ connectionURL=CONNECTION_URL,\ outputTable=OUTPUT_TABLE,\ bigQueryLoadingTemporaryDirectory=BIG_QUERY_LOADING_TEMPORARY_DIRECTORY,\
Sostituisci quanto segue:
JOB_NAME
: un nome di 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 principale senza data del 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 datata nel bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
DRIVER_JARS
: i percorsi Cloud Storage dei driver JDBC separati da virgolaDRIVER_CLASS_NAME
: il nome della classe del driver JDBCCONNECTION_URL
: la stringa dell'URL di connessione JDBC.OUTPUT_TABLE
: la tabella di output BigQueryBIG_QUERY_LOADING_TEMPORARY_DIRECTORY
: la directory temporanea per il processo di caricamento di BigQuery
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/flexTemplates:launch { "launchParameter": { "jobName": "JOB_NAME", "parameters": { "driverJars": "DRIVER_JARS", "driverClassName": "DRIVER_CLASS_NAME", "connectionURL": "CONNECTION_URL", "outputTable": "OUTPUT_TABLE", "bigQueryLoadingTemporaryDirectory": "BIG_QUERY_LOADING_TEMPORARY_DIRECTORY", }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/Jdbc_to_BigQuery_Flex", "environment": { "maxWorkers": "10" } } }
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto Google Cloud in cui vuoi eseguire il job DataflowJOB_NAME
: un nome di 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 principale senza data del 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 datata nel bucket: gs://dataflow-templates-REGION_NAME/
LOCATION
: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1
DRIVER_JARS
: i percorsi Cloud Storage dei driver JDBC separati da virgolaDRIVER_CLASS_NAME
: il nome della classe del driver JDBCCONNECTION_URL
: la stringa dell'URL di connessione JDBC.OUTPUT_TABLE
: la tabella di output BigQueryBIG_QUERY_LOADING_TEMPORARY_DIRECTORY
: la directory temporanea per il processo di caricamento di BigQuery
Passaggi successivi
- Scopri di più sui modelli Dataflow.
- Consulta l'elenco dei modelli forniti da Google.