Modello JDBC to Cloud Storage

Utilizza il modello JDBC to Cloud Storage di Managed Service per Apache Spark per estrarre i dati dai database JDBC in Cloud Storage.

Questo modello supporta i seguenti database come input:

  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle

Utilizzare il modello

Esegui il modello utilizzando gcloud CLI o l'API Managed Service per Apache Spark.

gcloud

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • PROJECT_ID: obbligatorio. Il tuo Google Cloud ID progetto elencato in nelle impostazioni IAM.
  • REGION: obbligatorio. Regione Compute Engine.
  • SUBNET: facoltativo. Se non viene specificata una subnet, viene selezionata la subnet nella REGION specificata nella rete default.

    Esempio: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: obbligatorio. Il percorso completo di Cloud Storage percorso, incluso il nome file, in cui è archiviato il file JAR del connettore JDBC. Puoi utilizzare i seguenti comandi per scaricare i connettori JDBC per il caricamento in Cloud Storage:
    • MySQL:
      wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.tar.gz
            
    • Postgres SQL:
      wget https://jdbc.postgresql.org/download/postgresql-42.2.6.jar
            
    • Microsoft SQL Server:
        
      wget https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
            
    • Oracle:
      wget https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/21.7.0.0/ojdbc8-21.7.0.0.jar
            
  • Le seguenti variabili vengono utilizzate per creare l'URL richiesto JDBC_CONNECTION_URL:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, per Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Crea l'JDBC_CONNECTION_URL utilizzando uno dei seguenti formati specifici del connettore:

    • MySQL:
      jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Postgres SQL:
      jdbc:postgresql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Microsoft SQL Server:
       
      jdbc:sqlserver://JDBC_HOST:JDBC_PORT;databaseName=JDBC_DATABASE;user=JDBC_USERNAME;password=JDBC_PASSWORD
              
    • Oracle:
      jdbc:oracle:thin:@//JDBC_HOST:JDBC_PORT/JDBC_SERVICE?user=JDBC_USERNAME&password=
              
  • DRIVER: obbligatorio. Il driver JDBC utilizzato per la connessione:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • Postgres SQL:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • FORMAT: obbligatorio. Formato dei dati di output. Opzioni: avro, parquet, csv, o json. Valore predefinito: avro. Nota: se avro, devi aggiungere "file:///usr/lib/spark/connector/spark-avro.jar" al flag gcloud CLI jars o al campo API.

    Esempio (il prefisso file:// fa riferimento a un file JAR di Managed Service per Apache Spark):

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... other jars]
  • MODE: obbligatorio. Modalità di scrittura per l'output di Cloud Storage. Opzioni: append, overwrite, ignore, o errorifexists.
  • TEMPLATE_VERSION: obbligatorio. Specifica latest per la versione più recente del modello o la data di una versione specifica, ad esempio 2023-03-17_v0.1.0-beta (visita gs://dataproc-templates-binaries o esegui gcloud storage ls gs://dataproc-templates-binaries per elencare le versioni del modello disponibili).
  • CLOUD_STORAGE_OUTPUT_PATH: obbligatorio. Percorso di Cloud Storage in cui verrà archiviato l'output.

    Esempio: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL: facoltativo. Livello di logging. Può essere uno dei seguenti valori: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valore predefinito: INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: facoltativo. Se utilizzati, devono essere specificati tutti i seguenti parametri:
    • INPUT_PARTITION_COLUMN: nome della colonna di partizione della tabella di input JDBC.
    • LOWERBOUND: limite inferiore della colonna di partizione della tabella di input JDBC utilizzato per determinare la distanza della partizione.
    • UPPERBOUND: limite superiore della colonna di partizione della tabella di input JDBC utilizzato per decidere la distanza della partizione.
    • NUM_PARTITIONS: il numero massimo di partizioni che possono essere utilizzate per il parallelismo delle letture e delle scritture delle tabelle. Se specificato, questo valore viene utilizzato per la connessione di input e output JDBC. Valore predefinito: 10.
  • OUTPUT_PARTITION_COLUMN: facoltativo. Nome della colonna di partizione di output.
  • FETCHSIZE: facoltativo. Il numero di righe da recuperare per ogni round trip. Valore predefinito: 10.
  • QUERY o QUERY_FILE: obbligatorio. Imposta either QUERY o QUERY_FILE per specificare la query da utilizzare per estrarre i dati da JDBC
  • TEMP_VIEW e TEMP_QUERY: facoltativo. Puoi utilizzare questi due parametri facoltativi per applicare una trasformazione Spark SQL durante il caricamento dei dati in Cloud Storage. TEMPVIEW deve essere uguale al nome della tabella utilizzato nella query e TEMP_QUERY è l'istruzione della query.
  • SERVICE_ACCOUNT: facoltativo. Se non viene specificato, viene utilizzato il service account Compute Engine predefinito.
  • PROPERTY e PROPERTY_VALUE: facoltativo. Elenco separato da virgole di proprietà di Spark=value coppie.
  • LABEL e LABEL_VALUE: facoltativo. Elenco separato da virgole di coppie label=value.
  • JDBC_SESSION_INIT: facoltativo. Istruzione di inizializzazione della sessione per leggere i modelli Java.
  • KMS_KEY: facoltativo. La chiave Cloud Key Management Service da utilizzare per la crittografia. Se non viene specificata una chiave, i dati vengono criptati a riposo utilizzando Google-owned and Google-managed encryption key.

    Esempio: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud dataproc batches submit spark \
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate \
    --project="PROJECT_ID" \
    --region="REGION" \
    --version="1.2" \
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" \
    --subnet="SUBNET" \
    --kms-key="KMS_KEY" \
    --service-account="SERVICE_ACCOUNT" \
    --properties="PROPERTY=PROPERTY_VALUE" \
    --labels="LABEL=LABEL_VALUE" \
    -- --template=JDBCTOGCS \
    --templateProperty project.id="PROJECT_ID" \
    --templateProperty log.level="LOG_LEVEL" \
    --templateProperty jdbctogcs.jdbc.url="JDBC_CONNECTION_URL" \
    --templateProperty jdbctogcs.jdbc.driver.class.name="DRIVER" \
    --templateProperty jdbctogcs.output.format="FORMAT" \
    --templateProperty jdbctogcs.output.location="CLOUD_STORAGE_OUTPUT_PATH" \
    --templateProperty jdbctogcs.sql="QUERY" \
    --templateProperty jdbctogcs.sql.file="QUERY_FILE" \
    --templateProperty jdbctogcs.sql.partitionColumn="INPUT_PARTITION_COLUMN" \
    --templateProperty jdbctogcs.sql.lowerBound="LOWERBOUND" \
    --templateProperty jdbctogcs.sql.upperBound="UPPERBOUND" \
    --templateProperty jdbctogcs.jdbc.fetchsize="FETCHSIZE" \
    --templateProperty jdbctogcs.sql.numPartitions="NUM_PARTITIONS" \
    --templateProperty jdbctogcs.write.mode="MODE" \
    --templateProperty dbctogcs.output.partition.col="OUTPUT_PARTITION_COLUMN" \
    --templateProperty jdbctogcs.temp.table="TEMP_VIEW" \
    --templateProperty jdbctogcs.temp.query="TEMP_QUERY"

Windows (PowerShell)

gcloud dataproc batches submit spark `
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate `
    --project="PROJECT_ID" `
    --region="REGION" `
    --version="1.2" `
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" `
    --subnet="SUBNET" `
    --kms-key="KMS_KEY" `
    --service-account="SERVICE_ACCOUNT" `
    --properties="PROPERTY=PROPERTY_VALUE" `
    --labels="LABEL=LABEL_VALUE" `
    -- --template=JDBCTOGCS `
    --templateProperty project.id="PROJECT_ID" `
    --templateProperty log.level="LOG_LEVEL" `
    --templateProperty jdbctogcs.jdbc.url="JDBC_CONNECTION_URL" `
    --templateProperty jdbctogcs.jdbc.driver.class.name="DRIVER" `
    --templateProperty jdbctogcs.output.format="FORMAT" `
    --templateProperty jdbctogcs.output.location="CLOUD_STORAGE_OUTPUT_PATH" `
    --templateProperty jdbctogcs.sql="QUERY" `
    --templateProperty jdbctogcs.sql.file="QUERY_FILE" `
    --templateProperty jdbctogcs.sql.partitionColumn="INPUT_PARTITION_COLUMN" `
    --templateProperty jdbctogcs.sql.lowerBound="LOWERBOUND" `
    --templateProperty jdbctogcs.sql.upperBound="UPPERBOUND" `
    --templateProperty jdbctogcs.jdbc.fetchsize="FETCHSIZE" `
    --templateProperty jdbctogcs.sql.numPartitions="NUM_PARTITIONS" `
    --templateProperty jdbctogcs.write.mode="MODE" `
    --templateProperty dbctogcs.output.partition.col="OUTPUT_PARTITION_COLUMN" `
    --templateProperty jdbctogcs.temp.table="TEMP_VIEW" `
    --templateProperty jdbctogcs.temp.query="TEMP_QUERY"

Windows (cmd.exe)

gcloud dataproc batches submit spark ^
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ^
    --project="PROJECT_ID" ^
    --region="REGION" ^
    --version="1.2" ^
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" ^
    --subnet="SUBNET" ^
    --kms-key="KMS_KEY" ^
    --service-account="SERVICE_ACCOUNT" ^
    --properties="PROPERTY=PROPERTY_VALUE" ^
    --labels="LABEL=LABEL_VALUE" ^
    -- --template=JDBCTOGCS ^
    --templateProperty project.id="PROJECT_ID" ^
    --templateProperty log.level="LOG_LEVEL" ^
    --templateProperty jdbctogcs.jdbc.url="JDBC_CONNECTION_URL" ^
    --templateProperty jdbctogcs.jdbc.driver.class.name="DRIVER" ^
    --templateProperty jdbctogcs.output.format="FORMAT" ^
    --templateProperty jdbctogcs.output.location="CLOUD_STORAGE_OUTPUT_PATH" ^
    --templateProperty jdbctogcs.sql="QUERY" ^
    --templateProperty jdbctogcs.sql.file="QUERY_FILE" ^
    --templateProperty jdbctogcs.sql.partitionColumn="INPUT_PARTITION_COLUMN" ^
    --templateProperty jdbctogcs.sql.lowerBound="LOWERBOUND" ^
    --templateProperty jdbctogcs.sql.upperBound="UPPERBOUND" ^
    --templateProperty jdbctogcs.jdbc.fetchsize="FETCHSIZE" ^
    --templateProperty jdbctogcs.sql.numPartitions="NUM_PARTITIONS" ^
    --templateProperty jdbctogcs.write.mode="MODE" ^
    --templateProperty dbctogcs.output.partition.col="OUTPUT_PARTITION_COLUMN" ^
    --templateProperty jdbctogcs.temp.table="TEMP_VIEW" ^
    --templateProperty jdbctogcs.temp.query="TEMP_QUERY"

REST

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: obbligatorio. Il tuo Google Cloud ID progetto elencato in nelle impostazioni IAM.
  • REGION: obbligatorio. Regione Compute Engine.
  • SUBNET: facoltativo. Se non viene specificata una subnet, viene selezionata la subnet nella REGION specificata nella rete default.

    Esempio: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: obbligatorio. Il percorso completo di Cloud Storage percorso, incluso il nome file, in cui è archiviato il file JAR del connettore JDBC. Puoi utilizzare i seguenti comandi per scaricare i connettori JDBC per il caricamento in Cloud Storage:
    • MySQL:
      wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.tar.gz
            
    • Postgres SQL:
      wget https://jdbc.postgresql.org/download/postgresql-42.2.6.jar
            
    • Microsoft SQL Server:
        
      wget https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
            
    • Oracle:
      wget https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/21.7.0.0/ojdbc8-21.7.0.0.jar
            
  • Le seguenti variabili vengono utilizzate per creare l'URL richiesto JDBC_CONNECTION_URL:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, per Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Crea l'JDBC_CONNECTION_URL utilizzando uno dei seguenti formati specifici del connettore:

    • MySQL:
      jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Postgres SQL:
      jdbc:postgresql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Microsoft SQL Server:
       
      jdbc:sqlserver://JDBC_HOST:JDBC_PORT;databaseName=JDBC_DATABASE;user=JDBC_USERNAME;password=JDBC_PASSWORD
              
    • Oracle:
      jdbc:oracle:thin:@//JDBC_HOST:JDBC_PORT/JDBC_SERVICE?user=JDBC_USERNAME&password=
              
  • DRIVER: obbligatorio. Il driver JDBC utilizzato per la connessione:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • Postgres SQL:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • FORMAT: obbligatorio. Formato dei dati di output. Opzioni: avro, parquet, csv, o json. Valore predefinito: avro. Nota: se avro, devi aggiungere "file:///usr/lib/spark/connector/spark-avro.jar" al flag gcloud CLI jars o al campo API.

    Esempio (il prefisso file:// fa riferimento a un file JAR di Managed Service per Apache Spark):

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... other jars]
  • MODE: obbligatorio. Modalità di scrittura per l'output di Cloud Storage. Opzioni: append, overwrite, ignore, o errorifexists.
  • TEMPLATE_VERSION: obbligatorio. Specifica latest per la versione più recente del modello o la data di una versione specifica, ad esempio 2023-03-17_v0.1.0-beta (visita gs://dataproc-templates-binaries o esegui gcloud storage ls gs://dataproc-templates-binaries per elencare le versioni del modello disponibili).
  • CLOUD_STORAGE_OUTPUT_PATH: obbligatorio. Percorso di Cloud Storage in cui verrà archiviato l'output.

    Esempio: gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL: facoltativo. Livello di logging. Può essere uno dei seguenti valori: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valore predefinito: INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: facoltativo. Se utilizzati, devono essere specificati tutti i seguenti parametri:
    • INPUT_PARTITION_COLUMN: nome della colonna di partizione della tabella di input JDBC.
    • LOWERBOUND: limite inferiore della colonna di partizione della tabella di input JDBC utilizzato per determinare la distanza della partizione.
    • UPPERBOUND: limite superiore della colonna di partizione della tabella di input JDBC utilizzato per decidere la distanza della partizione.
    • NUM_PARTITIONS: il numero massimo di partizioni che possono essere utilizzate per il parallelismo delle letture e delle scritture delle tabelle. Se specificato, questo valore viene utilizzato per la connessione di input e output JDBC. Valore predefinito: 10.
  • OUTPUT_PARTITION_COLUMN: facoltativo. Nome della colonna di partizione di output.
  • FETCHSIZE: facoltativo. Il numero di righe da recuperare per ogni round trip. Valore predefinito: 10.
  • QUERY o QUERY_FILE: obbligatorio. Imposta either QUERY o QUERY_FILE per specificare la query da utilizzare per estrarre i dati da JDBC
  • TEMP_VIEW e TEMP_QUERY: facoltativo. Puoi utilizzare questi due parametri facoltativi per applicare una trasformazione Spark SQL durante il caricamento dei dati in Cloud Storage. TEMPVIEW deve essere uguale al nome della tabella utilizzato nella query e TEMP_QUERY è l'istruzione della query.
  • SERVICE_ACCOUNT: facoltativo. Se non viene specificato, viene utilizzato il service account Compute Engine predefinito.
  • PROPERTY e PROPERTY_VALUE: facoltativo. Elenco separato da virgole di proprietà di Spark=value coppie.
  • LABEL e LABEL_VALUE: facoltativo. Elenco separato da virgole di coppie label=value.
  • JDBC_SESSION_INIT: facoltativo. Istruzione di inizializzazione della sessione per leggere i modelli Java.
  • KMS_KEY: facoltativo. La chiave Cloud Key Management Service da utilizzare per la crittografia. Se non viene specificata una chiave, i dati vengono criptati a riposo utilizzando Google-owned and Google-managed encryption key.

    Esempio: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Metodo HTTP e URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/batches

Corpo JSON della richiesta:


{
  "environmentConfig": {
    "executionConfig": {
      "subnetworkUri": "SUBNET",
      "kmsKey": "KMS_KEY",
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  },
  "labels": {
    "LABEL": "LABEL_VALUE"
  },
  "runtimeConfig": {
    "version": "1.2",
    "properties": {
      "PROPERTY": "PROPERTY_VALUE"
    }
  },
  "sparkBatch": {
    "mainClass": "com.google.cloud.dataproc.templates.main.DataProcTemplate",
    "args": [
      "--template=JDBCTOGCS",
      "--templateProperty","log.level=LOG_LEVEL",
      "--templateProperty","project.id=PROJECT_ID",
      "--templateProperty","jdbctogcs.jdbc.url=JDBC_CONNECTION_URL",
      "--templateProperty","jdbctogcs.jdbc.driver.class.name=DRIVER",
      "--templateProperty","jdbctogcs.output.location=CLOUD_STORAGE_OUTPUT_PATH",
      "--templateProperty","jdbctogcs.write.mode=MODE",
      "--templateProperty","jdbctogcs.output.format=FORMAT",
      "--templateProperty","jdbctogcs.sql.numPartitions=NUM_PARTITIONS",
      "--templateProperty","jdbctogcs.jdbc.fetchsize=FETCHSIZE",
      "--templateProperty","jdbctogcs.sql=QUERY",
      "--templateProperty","jdbctogcs.sql.file=QUERY_FILE",
      "--templateProperty","jdbctogcs.sql.partitionColumn=INPUT_PARTITION_COLUMN",
      "--templateProperty","jdbctogcs.sql.lowerBound=LOWERBOUND",
      "--templateProperty","jdbctogcs.sql.upperBound=UPPERBOUND",
      "--templateProperty","jdbctogcs.output.partition.col=OUTPUT_PARTITION_COLUMN",
      "--templateProperty","jdbctogcs.temp.table=TEMP_VIEW",
      "--templateProperty","jdbctogcs.temp.query=TEMP_QUERY",
      "--templateProperty","jdbctogcs.jdbc.sessioninitstatement=JDBC_SESSION_INIT"
    ],
    "jarFileUris": [
      "gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar", "JDBC_CONNECTOR_CLOUD_STORAGE_PATH"
    ]
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:


{
  "name": "projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata",
    "batch": "projects/PROJECT_ID/locations/REGION/batches/BATCH_ID",
    "batchUuid": "de8af8d4-3599-4a7c-915c-798201ed1583",
    "createTime": "2023-02-24T03:31:03.440329Z",
    "operationType": "BATCH",
    "description": "Batch"
  }
}