Modèle JDBC vers Cloud Storage

Utilisez le modèle Dataproc JDBC sans serveur vers Cloud Storage pour extraire les données de bases de données JDBC vers Cloud Storage.

Ce modèle prend en charge les bases de données suivantes en 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 Dataproc.

gcloud

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

  • PROJECT_ID : valeur obligatoire. Votre ID de projet Google Cloud est répertorié dans les paramètres IAM.
  • REGION : valeur obligatoire. Région Compute Engine.
  • SUBNET : facultatif. Si aucun sous-réseau n'est spécifié, celui de la région 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 complet à Cloud Storage, y compris le nom de fichier, où le fichier JAR du connecteur JDBC est stocké. Vous pouvez télécharger des connecteurs JDBC à importer dans Cloud Storage à l'aide des commandes suivantes :
    • 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 l'élément JDBC_CONNECTION_URL requis :
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE ou, pour Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Créez le fichier JDBC_CONNECTION_URL dans l'un des formats suivants, spécifiques au connecteur:

    • 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 la valeur est avro, vous devez ajouter "file:///usr/lib/spark/external/spark-avro.jar" au champ d'API ou à l'option de gcloud CLI jars.

    Exemple (le préfixe file:// fait référence à un fichier JAR Dataproc sans serveur):

    --jars=file:///usr/lib/spark/external/spark-avro.jar, [, ... autres pots]
  • 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 (consultez gs://dataproc-templates-binaries ou exécutez gsutil ls gs://dataproc-templates-binaries pour répertorier les versions de modèle disponibles).
  • CLOUD_STORAGE_OUTPUT_PATH : valeur obligatoire. Chemin d'accès Cloud Storage où le résultat sera stocké.

    Exemple gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL : facultatif. Niveau de journalisation Peut prendre 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. S'il est utilisé, tous les paramètres suivants doivent être spécifiés :
    • 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 le pas de partition.
    • UPPERBOUND:limite supérieure de la colonne de partition de la table d'entrée JDBC utilisée pour déterminer le pas de partition.
    • NUM_PARTITIONS::nombre maximal de partitions pouvant être utilisées pour le parallélisme des lectures et des écritures de table. Si elle est spécifiée, cette valeur 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 à récupérer par aller-retour. Par défaut : 10.
  • QUERY ou QUERY_FILE: obligatoire. Définissez soit QUERY, soit QUERY_FILE pour spécifier la requête à utiliser pour extraire les données de JDBC.
  • TEMP_VIEW et TEMP_QUERY : facultatifs. Vous pouvez utiliser ces deux paramètres facultatifs pour appliquer une transformation Spark SQL lors du chargement des données dans Cloud Storage. TEMPVIEW doit être identique au nom de tableau utilisé dans la requête, et TEMP_QUERY est l'instruction de requête.
  • SERVICE_ACCOUNT : facultatif. S'il n'est pas fourni, le compte de service Compute Engine par défaut est utilisé.
  • PROPERTY et PROPERTY_VALUE : facultatif. Liste de paires Propriété Spark=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. une instruction d'initialisation de session pour lire les modèles Java.
  • KMS_KEY : facultatif. Clé Cloud Key Management Service à utiliser pour le chiffrement. Si aucune clé n'est spécifiée, les données sont chiffrées au repos à l'aide d'une clé détenue et gérée par Google.

    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="1.1" \
    --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.1" `
    --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.1" ^
    --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 requête, effectuez les remplacements suivants:

  • PROJECT_ID : valeur obligatoire. Votre ID de projet Google Cloud est répertorié dans les paramètres IAM.
  • REGION : valeur obligatoire. Région Compute Engine.
  • SUBNET : facultatif. Si aucun sous-réseau n'est spécifié, celui de la région 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 complet à Cloud Storage, y compris le nom de fichier, où le fichier JAR du connecteur JDBC est stocké. Vous pouvez télécharger des connecteurs JDBC à importer dans Cloud Storage à l'aide des commandes suivantes :
    • 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 l'élément JDBC_CONNECTION_URL requis :
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE ou, pour Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Créez le fichier JDBC_CONNECTION_URL dans l'un des formats suivants, spécifiques au connecteur:

    • 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 la valeur est avro, vous devez ajouter "file:///usr/lib/spark/external/spark-avro.jar" au champ d'API ou à l'option de gcloud CLI jars.

    Exemple (le préfixe file:// fait référence à un fichier JAR Dataproc sans serveur):

    --jars=file:///usr/lib/spark/external/spark-avro.jar, [, ... autres pots]
  • 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 (consultez gs://dataproc-templates-binaries ou exécutez gsutil ls gs://dataproc-templates-binaries pour répertorier les versions de modèle disponibles).
  • CLOUD_STORAGE_OUTPUT_PATH : valeur obligatoire. Chemin d'accès Cloud Storage où le résultat sera stocké.

    Exemple gs://dataproc-templates/jdbc_to_cloud_storage_output

  • LOG_LEVEL : facultatif. Niveau de journalisation Peut prendre 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. S'il est utilisé, tous les paramètres suivants doivent être spécifiés :
    • 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 le pas de partition.
    • UPPERBOUND:limite supérieure de la colonne de partition de la table d'entrée JDBC utilisée pour déterminer le pas de partition.
    • NUM_PARTITIONS::nombre maximal de partitions pouvant être utilisées pour le parallélisme des lectures et des écritures de table. Si elle est spécifiée, cette valeur 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 à récupérer par aller-retour. Par défaut : 10.
  • QUERY ou QUERY_FILE: obligatoire. Définissez soit QUERY, soit QUERY_FILE pour spécifier la requête à utiliser pour extraire les données de JDBC.
  • TEMP_VIEW et TEMP_QUERY : facultatifs. Vous pouvez utiliser ces deux paramètres facultatifs pour appliquer une transformation Spark SQL lors du chargement des données dans Cloud Storage. TEMPVIEW doit être identique au nom de tableau utilisé dans la requête, et TEMP_QUERY est l'instruction de requête.
  • SERVICE_ACCOUNT : facultatif. S'il n'est pas fourni, le compte de service Compute Engine par défaut est utilisé.
  • PROPERTY et PROPERTY_VALUE : facultatif. Liste de paires Propriété Spark=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. une instruction d'initialisation de session pour lire les modèles Java.
  • KMS_KEY : facultatif. Clé Cloud Key Management Service à utiliser pour le chiffrement. Si aucune clé n'est spécifiée, les données sont chiffrées au repos à l'aide d'une clé détenue et gérée par Google.

    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": "1.1",
    "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"
  }
}