Modèle JDBC vers Cloud Storage

Utilisez le modèle Managed Service pour Apache Spark JDBC vers Cloud Storage pour extraire des données de bases de données JDBC vers Cloud Storage.

Ce modèle accepte les bases de données suivantes comme entrée :

  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle

Utiliser le modèle

Exécutez le modèle à l'aide de gcloud CLI ou de l'API Managed Service pour Apache Spark.

gcloud

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : valeur obligatoire. ID de votre Google Cloud projet indiqué dans les paramètres IAM.
  • REGION : valeur obligatoire. Région Compute Engine.
  • SUBNET : facultatif. Si aucun sous-réseau n'est spécifié, le sous-réseau de la REGION spécifiée dans le réseau default est sélectionné.

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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH : valeur obligatoire. Chemin d'accès Cloud Storage complet, y compris le nom de fichier, où le fichier JAR du connecteur JDBC est stocké. Vous pouvez utiliser les commandes suivantes pour télécharger des connecteurs JDBC à importer dans 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
            
  • Les variables suivantes sont utilisées pour construire le requis JDBC_CONNECTION_URL:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE ou, pour Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Construisez le JDBC_CONNECTION_URL à l'aide de l'un des formats spécifiques au connecteur suivants :

    • 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 : valeur obligatoire. Pilote JDBC utilisé pour la connexion :
    • 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 : valeur obligatoire. Format des données de sortie. Options : avro, parquet, csv, ou json. Valeur par défaut : avro. Remarque : Si vous utilisez avro, vous devez ajouter "file:///usr/lib/spark/connector/spark-avro.jar" à l'indicateur jars de la gcloud CLI ou au champ de l'API.

    Exemple (le préfixe file:// fait référence à un fichier JAR Managed Service pour Apache Spark) :

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... autres fichiers JAR]
  • MODE : valeur obligatoire. Mode d'écriture pour la sortie Cloud Storage. Options : append, overwrite, ignore, ou errorifexists.
  • TEMPLATE_VERSION : valeur obligatoire. Spécifiez latest pour la dernière version du modèle, ou la date d'une version spécifique, par exemple 2023-03-17_v0.1.0-beta (accédez à gs://dataproc-templates-binaries ou exécutez gcloud storage ls gs://dataproc-templates-binaries pour afficher la liste des versions de modèle disponibles).
  • CLOUD_STORAGE_OUTPUT_PATH : valeur obligatoire. Chemin d'accès Cloud Storage où la sortie sera stockée.

    Exemple : gs://templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL : facultatif. Niveau de journalisation. Peut être l'une des valeurs suivantes : ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE ou WARN. Valeur par défaut : INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: facultatif. Si vous utilisez ces paramètres, vous devez spécifier toutes les valeurs suivantes :
    • INPUT_PARTITION_COLUMN: nom de la colonne de partition de la table d'entrée JDBC.
    • LOWERBOUND : limite inférieure de la colonne de partition de la table d'entrée JDBC utilisée pour déterminer l' intervalle de partition.
    • UPPERBOUND : limite supérieure de la colonne de partition de la table d'entrée JDBC utilisée pour déterminer l'intervalle de partition.
    • NUM_PARTITIONS: : nombre maximal de partitions pouvant être utilisées pour le parallélisme des lectures et des écritures de tables. Si vous spécifiez cette valeur, elle est utilisée pour la connexion d'entrée et de sortie JDBC. Valeur par défaut : 10.
  • OUTPUT_PARTITION_COLUMN : facultatif. Nom de la colonne de partition de sortie.
  • FETCHSIZE : facultatif. Nombre de lignes à extraire par aller-retour. Par défaut : 10.
  • QUERY ou QUERY_FILE : valeur obligatoire. Définissez QUERY QUERY ou QUERY_FILE pour spécifier la requête à utiliser pour extraire des données de JDBC.
  • TEMP_VIEW et TEMP_QUERY : facultatif. Vous pouvez utiliser ces deux paramètres facultatifs pour appliquer une transformation Spark SQL lors du chargement de données dans Cloud Storage. TEMPVIEW doit être identique au nom de la table utilisé dans la requête, et TEMP_QUERY est l'instruction de requête.
  • SERVICE_ACCOUNT : facultatif. Si vous ne spécifiez pas de compte de service, le compte de service Compute Engine par défaut est utilisé.
  • PROPERTY et PROPERTY_VALUE: facultatif. Liste de paires Spark property=value séparées par une virgule.
  • LABEL et LABEL_VALUE : facultatif. Liste de paires label=value séparées par une virgule.
  • JDBC_SESSION_INIT : facultatif. Instruction d'initialisation de session pour lire les modèles Java.
  • KMS_KEY : facultatif. Clé Cloud Key Management Service à utiliser pour le chiffrement. Si vous ne spécifiez pas de clé, les données au repos sont chiffrées à l'aide d'une clé gérée par Google Google-owned and Google-managed encryption key.

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

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud dataproc batches submit spark \
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate \
    --project="PROJECT_ID" \
    --region="REGION" \
    --version="2.3" \
    --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="2.3" `
    --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="2.3" ^
    --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

Avant d'utiliser les données de la requête, effectuez les remplacements suivants :

  • PROJECT_ID : valeur obligatoire. ID de votre Google Cloud projet indiqué dans les paramètres IAM.
  • REGION : valeur obligatoire. Région Compute Engine.
  • SUBNET : facultatif. Si aucun sous-réseau n'est spécifié, le sous-réseau de la REGION spécifiée dans le réseau default est sélectionné.

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

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH : valeur obligatoire. Chemin d'accès Cloud Storage complet, y compris le nom de fichier, où le fichier JAR du connecteur JDBC est stocké. Vous pouvez utiliser les commandes suivantes pour télécharger des connecteurs JDBC à importer dans 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
            
  • Les variables suivantes sont utilisées pour construire le requis JDBC_CONNECTION_URL:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE ou, pour Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Construisez le JDBC_CONNECTION_URL à l'aide de l'un des formats spécifiques au connecteur suivants :

    • 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 : valeur obligatoire. Pilote JDBC utilisé pour la connexion :
    • 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 : valeur obligatoire. Format des données de sortie. Options : avro, parquet, csv, ou json. Valeur par défaut : avro. Remarque : Si vous utilisez avro, vous devez ajouter "file:///usr/lib/spark/connector/spark-avro.jar" à l'indicateur jars de la gcloud CLI ou au champ de l'API.

    Exemple (le préfixe file:// fait référence à un fichier JAR Managed Service pour Apache Spark) :

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... autres fichiers JAR]
  • MODE : valeur obligatoire. Mode d'écriture pour la sortie Cloud Storage. Options : append, overwrite, ignore, ou errorifexists.
  • TEMPLATE_VERSION : valeur obligatoire. Spécifiez latest pour la dernière version du modèle, ou la date d'une version spécifique, par exemple 2023-03-17_v0.1.0-beta (accédez à gs://dataproc-templates-binaries ou exécutez gcloud storage ls gs://dataproc-templates-binaries pour afficher la liste des versions de modèle disponibles).
  • CLOUD_STORAGE_OUTPUT_PATH : valeur obligatoire. Chemin d'accès Cloud Storage où la sortie sera stockée.

    Exemple : gs://templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL : facultatif. Niveau de journalisation. Peut être l'une des valeurs suivantes : ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE ou WARN. Valeur par défaut : INFO.
  • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: facultatif. Si vous utilisez ces paramètres, vous devez spécifier toutes les valeurs suivantes :
    • INPUT_PARTITION_COLUMN: nom de la colonne de partition de la table d'entrée JDBC.
    • LOWERBOUND : limite inférieure de la colonne de partition de la table d'entrée JDBC utilisée pour déterminer l' intervalle de partition.
    • UPPERBOUND : limite supérieure de la colonne de partition de la table d'entrée JDBC utilisée pour déterminer l'intervalle de partition.
    • NUM_PARTITIONS: : nombre maximal de partitions pouvant être utilisées pour le parallélisme des lectures et des écritures de tables. Si vous spécifiez cette valeur, elle est utilisée pour la connexion d'entrée et de sortie JDBC. Valeur par défaut : 10.
  • OUTPUT_PARTITION_COLUMN : facultatif. Nom de la colonne de partition de sortie.
  • FETCHSIZE : facultatif. Nombre de lignes à extraire par aller-retour. Par défaut : 10.
  • QUERY ou QUERY_FILE : valeur obligatoire. Définissez QUERY QUERY ou QUERY_FILE pour spécifier la requête à utiliser pour extraire des données de JDBC.
  • TEMP_VIEW et TEMP_QUERY : facultatif. Vous pouvez utiliser ces deux paramètres facultatifs pour appliquer une transformation Spark SQL lors du chargement de données dans Cloud Storage. TEMPVIEW doit être identique au nom de la table utilisé dans la requête, et TEMP_QUERY est l'instruction de requête.
  • SERVICE_ACCOUNT : facultatif. Si vous ne spécifiez pas de compte de service, le compte de service Compute Engine par défaut est utilisé.
  • PROPERTY et PROPERTY_VALUE: facultatif. Liste de paires Spark property=value séparées par une virgule.
  • LABEL et LABEL_VALUE : facultatif. Liste de paires label=value séparées par une virgule.
  • JDBC_SESSION_INIT : facultatif. Instruction d'initialisation de session pour lire les modèles Java.
  • KMS_KEY : facultatif. Clé Cloud Key Management Service à utiliser pour le chiffrement. Si vous ne spécifiez pas de clé, les données au repos sont chiffrées à l'aide d'une clé gérée par Google Google-owned and Google-managed encryption key.

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

Méthode HTTP et URL :

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

Corps JSON de la requête :


{
  "environmentConfig": {
    "executionConfig": {
      "subnetworkUri": "SUBNET",
      "kmsKey": "KMS_KEY",
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  },
  "labels": {
    "LABEL": "LABEL_VALUE"
  },
  "runtimeConfig": {
    "version": "2.3",
    "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"
    ]
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :


{
  "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"
  }
}