Il modello da SQL Server a BigQuery è una pipeline batch che copia i dati da una tabella SQL Server in una tabella BigQuery esistente BigQuery. Questa pipeline utilizza JDBC per connettersi a SQL Server. Per un ulteriore livello di protezione, puoi anche passare una chiave Cloud KMS insieme ai parametri di nome utente, password e stringa di connessione codificati in Base64 e criptati con la chiave Cloud KMS. Per saperne di più sulla crittografia dei parametri di nome utente, password e stringa di connessione, consulta l' endpoint di crittografia dell'API Cloud KMS.
Requisiti della pipeline
- 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
- connectionURL: la stringa dell'URL di connessione JDBC. Può essere passata come stringa codificata in Base64 e poi criptata con una chiave Cloud KMS oppure può essere un secret di Secret Manager nel formato projects/{project}/secrets/{secret}/versions/{secret_version}. Ad esempio,
jdbc:sqlserver://localhost;databaseName=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 delle proprietà da utilizzare per la connessione JDBC. Il formato della stringa deve essere
[propertyName=property;]*.Per saperne di più, consulta Proprietà di configurazione (https://dev.mysql.com/doc/connector-j/en/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 passata come stringa criptata con una chiave Cloud KMS oppure può essere un secret di Secret Manager nel formato projects/{project}/secrets/{secret}/versions/{secret_version}.
- password: la password da utilizzare per la connessione JDBC. Può essere passata come stringa criptata con una chiave Cloud KMS oppure può essere un 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 di SQL JDBC e BigQuery, sebbene condividano lo stesso nome, presentano alcune differenze. Alcune mappature di tipi SQL -> BigQuery importanti da tenere presenti sono
DATETIME --> TIMESTAMP. Se gli schemi non corrispondono, potrebbe essere necessario eseguire il type casting. 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 tronca prima di caricare i dati in BigQuery. Il valore predefinito èfalse, il che fa sì che la pipeline aggiunga i dati. - partitionColumn: se
partitionColumnviene specificata insieme atable, JdbcIO legge la tabella in parallelo eseguendo più istanze della query sulla stessa tabella (subquery) utilizzando gli intervalli. Al momento, supporta le colonne di partizioneLongeDateTime. Passa il tipo di colonna tramitepartitionColumnType. - partitionColumnType: il tipo di
partitionColumn, accettalongodatetime. Il valore predefinito è long. - table: la tabella da cui leggere quando si utilizzano le partizioni. Questo parametro accetta anche una subquery 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
WHEREgenerate utilizzate per dividere uniformemente la colonna di partizione. Se 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.
datetimepartitionColumnType 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.
datetimepartitionColumnType 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 viene utilizzato per le letture partizionate. Il valore predefinito è 50000.
- createDisposition: il valore BigQuery CreateDisposition da utilizzare. Ad esempio,
CREATE_IF_NEEDEDoCREATE_NEVER. Il valore predefinito è CREATE_NEVER. - bigQuerySchemaPath: il percorso Cloud Storage dello schema JSON 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 riuscirà a scrivere.Questo parametro può essere specificato solo seuseStorageWriteApiouseStorageWriteApiAtLeastOnceè impostato su true. - disabledAlgorithms: gli algoritmi separati da virgole da disattivare. Se questo valore è impostato su
none, non viene disattivato alcun algoritmo. Utilizza questo parametro con cautela, perché gli algoritmi disattivati per impostazione predefinita potrebbero presentare vulnerabilità o problemi di prestazioni. Ad esempio,SSLv3, RC4. - extraFilesToStage: i percorsi Cloud Storage o i secret di Secret Manager separati da virgole per i file da preparare nel worker. Questi file vengono salvati nella directory /extra_files di 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 Write (https://cloud.google.com/bigquery/docs/write-api). Il valore predefinito èfalse. Per saperne di più, consulta Utilizzo dell'API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api). - useStorageWriteApiAtLeastOnce: quando si utilizza 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 job univoco.
- (Facoltativo) Per Endpoint regionale, 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 Da SQL Server a BigQuery.
- 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-REGION_NAME/VERSION/flex/ \ --parameters \ connectionURL=JDBC_CONNECTION_URL,\ query=SOURCE_SQL_QUERY,\ outputTable=PROJECT_ID:DATASET.TABLE_NAME, bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS,\ connectionProperties=CONNECTION_PROPERTIES,\ username=CONNECTION_USERNAME,\ password=CONNECTION_PASSWORD,\ KMSEncryptionKey=KMS_ENCRYPTION_KEY
Sostituisci quanto segue:
JOB_NAME: un nome job univoco a tua sceltaVERSION: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latestper utilizzare la versione più recente del modello, disponibile nella cartella principale non datata nel 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-central1JDBC_CONNECTION_URL: l'URL di connessione JDBCSOURCE_SQL_QUERY: la query SQL da eseguire sul database di origineDATASET: il set di dati BigQueryTABLE_NAME: il nome della tabella BigQueryPATH_TO_TEMP_DIR_ON_GCS: il percorso Cloud Storage della directory temporaneaCONNECTION_PROPERTIES: le proprietà di connessione JDBC, se necessarioCONNECTION_USERNAME: il nome utente della connessione JDBCCONNECTION_PASSWORD: la password della connessione JDBCKMS_ENCRYPTION_KEY: la chiave di crittografia Cloud KMS
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 { "launchParameter": { "jobName": "JOB_NAME", "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/", "parameters": { "connectionURL": "JDBC_CONNECTION_URL", "query": "SOURCE_SQL_QUERY", "outputTable": "PROJECT_ID:DATASET.TABLE_NAME", "bigQueryLoadingTemporaryDirectory": "PATH_TO_TEMP_DIR_ON_GCS", "connectionProperties": "CONNECTION_PROPERTIES", "username": "CONNECTION_USERNAME", "password": "CONNECTION_PASSWORD", "KMSEncryptionKey":"KMS_ENCRYPTION_KEY" }, "environment": { "zone": "us-central1-f" } } }
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto in cui vuoi eseguire il job Dataflow Google CloudJOB_NAME: un nome job univoco a tua sceltaVERSION: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latestper utilizzare la versione più recente del modello, disponibile nella cartella principale non datata nel 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-central1JDBC_CONNECTION_URL: l'URL di connessione JDBCSOURCE_SQL_QUERY: la query SQL da eseguire sul database di origineDATASET: il set di dati BigQueryTABLE_NAME: il nome della tabella BigQueryPATH_TO_TEMP_DIR_ON_GCS: il percorso Cloud Storage della directory temporaneaCONNECTION_PROPERTIES: le proprietà di connessione JDBC, se necessarioCONNECTION_USERNAME: il nome utente della connessione JDBCCONNECTION_PASSWORD: la password della connessione JDBCKMS_ENCRYPTION_KEY: la chiave di crittografia Cloud KMS
Passaggi successivi
- Scopri di più sui modelli Dataflow.
- Consulta l'elenco dei modelli forniti da Google.