Modello da Java Database Connectivity (JDBC) a BigQuery

Il modello da JDBC a 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 in BigQuery i dati da qualsiasi database relazionale con i driver JDBC disponibili.

Per un ulteriore livello di protezione, puoi trasmettere una chiave Cloud KMS, insieme a un nome utente, una password e parametri della stringa di connessione con codifica Base64, criptati con la chiave Cloud KMS. Per ulteriori dettagli sulla crittografia di nome utente, password e parametri della stringa di connessione, consulta la pagina relativa all'endpoint di crittografia dell'API Cloud KMS.

Requisiti della pipeline

  • Devono essere disponibili i driver JDBC per il database relazionale.
  • 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 dei driver. Esempio: gs://your-bucket/driver_jar1.jar,gs://your-bucket/driver_jar2.jar.
  • driverClassName : il nome della classe del driver JDBC. (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 dalla stringa codificata Base64. Nota la differenza tra una stringa di connessione a un 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. (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 delle proprietà da utilizzare per la connessione JDBC. Il formato della stringa deve essere [propertyName=property;]*.Per ulteriori informazioni, consulta Proprietà di configurazione (https://dev.mysql.com/doc/connector-j/8.1/en/connector-j-reference-configuration-properties.html) nella documentazione MySQL. Esempio: unicode=true;characterEncoding=UTF-8.
  • nomeutente : il nome utente da utilizzare per la connessione JDBC. Puoi passare questo valore come stringa criptata con una chiave Cloud KMS e poi codificata in Base64. Rimuovi gli spazi dalla stringa codificata Base64.
  • password : la password da utilizzare per la connessione JDBC. Puoi passare questo valore come stringa criptata con una chiave Cloud KMS e poi codificata in Base64. Rimuovi gli spazi dalla stringa codificata Base64.
  • query : la query da eseguire sull'origine per estrarre i dati. Tieni presente che alcuni tipi SQL JDBC e BigQuery, anche se condividono lo stesso nome, hanno alcune differenze. Ecco alcune mappature importanti dei tipi SQL -> BigQuery: DATETIME --> TIMESTAMP

Se gli schemi non corrispondono, potrebbe essere necessaria la trasmissione del tipo. Ad esempio, seleziona * da sampledb.sample_table.

  • KMSEncryptionKey : 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, 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 di 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 di caricare i dati in BigQuery. Il valore predefinito è false, che fa sì che la pipeline aggiunga dati.
  • partitionColumn : se a questo parametro viene fornito il nome di table definito come parametro facoltativo, JdbcIO legge la tabella in parallelo eseguendo più istanze della query nella stessa tabella (sottoquery) utilizzando gli intervalli. Attualmente sono supportate solo Long colonne di partizione.
  • table : la tabella da cui leggere quando si utilizzano le partizioni. Questo parametro accetta anche una sottoquery tra parentesi. (Esempio: (seleziona ID, nome da Persona) come sottoq.
  • numPartitions : il numero di partizioni. Con il limite inferiore e quello superiore, questo valore forma passi di partizione per le espressioni della clausola WHERE generate, utilizzate per suddividere in modo uniforme la colonna di partizione. Quando l'input è minore di 1, il numero viene impostato su 1.
  • 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.
  • 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.
  • fetchSize : il numero di righe da recuperare contemporaneamente dal database. Non utilizzato per le letture partizionate. Il valore predefinito è 50.000.
  • createDisposition : il valore CreateDisposition di BigQuery da utilizzare. Ad esempio, CREATE_IF_NEEDED o CREATE_NEVER. Il valore predefinito è: CREATE_NEVER.
  • bigQuerySchemaPath : il percorso Cloud Storage per lo schema JSON di BigQuery. Se createDisposition è impostato su CREATE_IF_NEEDED, è necessario specificare questo parametro. Esempio: gs://your-bucket/your-schema.json.
  • disabledAlgorithms : algoritmi separati da virgole da disabilitare. Se questo valore è impostato su Nessuno, nessun algoritmo viene disabilitato. Usa questo parametro con cautela, perché gli algoritmi disabilitati per impostazione predefinita potrebbero presentare vulnerabilità o problemi di prestazioni. (Esempio: SSLv3, RC4).
  • extraFilesToStage : percorsi Cloud Storage o secret di Secret Manager separati da virgola per i file da inserire nel worker. Questi file vengono salvati nella directory /extra_files di ciascun worker. Esempio: gs://
  • defaultLogLevel : imposta il livello di log nei worker. Le opzioni supportate sono OFF, ERROR, WARN, INFO, DEBUG, TRACE. Il valore predefinito è INFO.
  • useStorageWriteApi : se true, la pipeline utilizza l'API BigQuery Storage Writer (https://cloud.google.com/bigquery/docs/write-api). Il valore predefinito è false. Per ulteriori informazioni, consulta Utilizzo dell'API StorageWrite (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api).
  • useStorageWriteApiAtLeastOnce : quando si utilizza l'API StorageWrite, specifica la semantica della scrittura. Per utilizzare la semantica "at-least-once" (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), imposta questo parametro su true. Per utilizzare 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 di regioni in cui è possibile eseguire un job Dataflow, consulta Località di Dataflow.

  5. Dal menu a discesa Modello Dataflow, seleziona the JDBC to BigQuery with BigQuery Storage API support template.
  6. Inserisci i valori parametro negli appositi campi.
  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:

    • latest per utilizzare la versione più recente del modello, disponibile nella cartella padre non con 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 è possibile trovare 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 esempio us-central1
  • DRIVER_JARS: il percorso o i 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 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:

    • latest per utilizzare la versione più recente del modello, disponibile nella cartella padre non con 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 è possibile trovare 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 esempio us-central1
  • DRIVER_JARS: il percorso o i 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 BigQuery
  • BIG_QUERY_LOADING_TEMPORARY_DIRECTORY: la directory temporanea per il processo di caricamento di BigQuery

Passaggi successivi