Da Java Database Connectivity (JDBC) a modello BigQuery

Il modello JDBC to BigQuery è una pipeline batch che copia i dati da una tabella di database relazionale a una tabella BigQuery esistente. Questa pipeline utilizza JDBC per la connessione al database relazionale. Utilizza questo modello per copiare in BigQuery i dati da qualsiasi database relazionale con driver JDBC disponibili.

Per un ulteriore livello di protezione, puoi passare una chiave Cloud KMS, insieme a un nome utente, una password e parametri della stringa di connessione codificati in Base64 e criptati con la chiave Cloud KMS. Per ulteriori dettagli sulla crittografia di nome utente, password e 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

Parametro Descrizione
driverJars L'elenco separato da virgole di 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 gli spazi vuoti dalla stringa codificata in Base64. Nota 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 BigQuery in cui scrivere l'output. Il nome deve utilizzare il formato <project>:<dataset>.<table_name>. Lo schema della tabella deve corrispondere agli oggetti di input. Ad esempio: <my-project>:<my-dataset>.<my-table>.
bigQueryLoadingTemporaryDirectory La directory temporanea per il processo di caricamento di BigQuery. Ad esempio: gs://your-bucket/your-files/temp_dir.
connectionProperties Facoltativo: la stringa delle proprietà da utilizzare per la connessione JDBC. Utilizza il formato della stringa [propertyName=property;]*. Ad esempio: unicode=true;characterEncoding=UTF-8.
username Facoltativo: il nome utente da utilizzare per la connessione JDBC. Puoi passare questo valore criptato da una chiave Cloud KMS come stringa con codifica Base64.
password Facoltativo: la password da utilizzare per la connessione JDBC. Puoi passare questo valore criptato da una chiave Cloud KMS come stringa con codifica Base64.
query (Facoltativo) La query da eseguire sull'origine per estrarre i dati. Ad esempio: select * from sampledb.sample_table.
KMSEncryptionKey (Facoltativo) La chiave di crittografia di Cloud KMS da utilizzare per decriptare il nome utente, la password e la stringa di connessione. Se passi in una chiave Cloud KMS, il nome utente, la password e la stringa di connessione devono essere tutti criptati. Ad esempio: projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key.
useColumnAlias Facoltativo: se abilitato (impostato su true), la pipeline utilizza l'alias di colonna ("AS") anziché il nome della colonna per mappare le righe a BigQuery. Il valore predefinito è false.
isTruncate (Facoltativo) Se l'opzione è abilitata (impostata su true), la pipeline viene troncata prima di caricare i dati in BigQuery. Il valore predefinito è false, che causa l'aggiunta di dati da parte della pipeline.
partitionColumn (Facoltativo) Se questo parametro viene fornito insieme a table, JdbcIO legge la tabella in parallelo eseguendo più istanze della query nella stessa tabella (sottoquery) utilizzando gli intervalli. Attualmente supporta solo Long colonne di partizione.
table (Facoltativo) La tabella da cui leggere quando utilizzi le partizioni. Questo parametro accetta anche una sottoquery tra parentesi. Ad esempio: (select id, name from Person come subq).
numPartitions (Facoltativo) Il numero di partizioni. Con i limiti inferiore e superiore, questo valore forma gli incrementi di partizione per le espressioni della clausola WHERE generate utilizzate per suddividere in modo uniforme la colonna di partizione. Quando l'input è inferiore a 1, il numero viene impostato su 1.
lowerBound Facoltativo: il limite inferiore da utilizzare nello schema di partizione. Se non viene specificato, questo valore viene dedotto automaticamente da Apache Beam per i tipi supportati.
upperBound Facoltativo: il limite superiore da utilizzare nello schema di partizione. Se non viene specificato, questo valore viene dedotto automaticamente da Apache Beam per i tipi supportati.
disabledAlgorithms (Facoltativo) Algoritmi separati da virgole da disattivare. Se questo valore viene impostato su none, nessun algoritmo viene disattivato. Da usare con cautela, perché gli algoritmi disattivati per impostazione predefinita sono noti per avere vulnerabilità o problemi di prestazioni. Ad esempio: SSLv3, RC4.
extraFilesToStage (Facoltativo) Percorsi Cloud Storage o secret di Secret Manager separati da virgole per i file da inserire nel worker. Questi file vengono salvati nella directory /extra_files di ciascun worker. Ad esempio: gs://your-bucket/file.txt,projects/project-id/secrets/secret-id/versions/version-id.
useStorageWriteApi Facoltativo: se true, la pipeline utilizza l' API BigQuery Storage Write. Il valore predefinito è false. Per ulteriori informazioni, consulta la pagina relativa all' utilizzo dell'API Storage Write.
useStorageWriteApiAtLeastOnce Facoltativo: quando si utilizza l'API Storage Write, specifica la semantica di scrittura. Per utilizzare la semantica at-least-once, imposta questo parametro su true. Per usare la semantica "exactly-once", imposta il parametro su false. Questo parametro si applica solo quando useStorageWriteApi è true. Il valore predefinito è false.

Esegui il modello

Console

  1. Vai alla pagina Crea job da modello di Dataflow.
  2. Vai a Crea job da modello
  3. Nel campo Nome job, inserisci un nome univoco per il job.
  4. (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.

  5. Nel menu a discesa Modello Dataflow, seleziona the JDBC to BigQuery template.
  6. Nei campi dei parametri forniti, inserisci i valori dei parametri.
  7. 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 job univoco a tua scelta
  • VERSION: la versione del modello che vuoi utilizzare

    Puoi utilizzare i seguenti valori:

  • REGION_NAME: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempio us-central1
  • DRIVER_JARS: percorso o percorsi Cloud Storage dei driver JDBC separati da virgole
  • DRIVER_CLASS_NAME: nome della classe del driver JDBC
  • CONNECTION_URL: la stringa dell'URL di connessione JDBC.
  • OUTPUT_TABLE: la tabella di output di BigQuery
  • BIG_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 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/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 Dataflow
  • JOB_NAME: un nome job univoco a tua scelta
  • VERSION: la versione del modello che vuoi utilizzare

    Puoi utilizzare i seguenti valori:

  • LOCATION: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempio us-central1
  • DRIVER_JARS: percorso o percorsi Cloud Storage dei driver JDBC separati da virgole
  • DRIVER_CLASS_NAME: nome della classe del driver JDBC
  • CONNECTION_URL: la stringa dell'URL di connessione JDBC.
  • OUTPUT_TABLE: la tabella di output di BigQuery
  • BIG_QUERY_LOADING_TEMPORARY_DIRECTORY: la directory temporanea per il processo di caricamento di BigQuery

Passaggi successivi