Modèle JDBC vers Cloud Spanner

Utilisez le modèle Dataproc JDBC sans serveur vers Spanner pour extraire des bases de données JDBC vers Spanner.

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écuter le modèle à l'aide de gcloud CLI ou de Dataproc API.

gcloud

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

  • PROJECT_ID : valeur obligatoire. L'ID de votre projet Google Cloud indiqué dans les paramètres IAM.
  • REGION : valeur obligatoire. Région Compute Engine
  • 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 les versions de modèle disponibles).
  • SUBNET : facultatif. Si aucun sous-réseau n'est spécifié, le sous-réseau dans 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. L'intégralité de Cloud Storage chemin d'accès, y compris le nom de fichier, où est stocké le fichier JDBC du connecteur JDBC. 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 permettent de construire les éléments JDBC_CONNECTION_URL:
    • JDBC_HOST, JDBC_PORT, JDBC_DATABASE ou, pour Oracle, JDBC_SERVICE, JDBC_USERNAME et JDBC_PASSWORD : obligatoire. Hôte JDBC, port, base de données, nom d'utilisateur et mot de passe
      • MySQL:
        jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
      • PostgreSQL:
        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=JDBC_PASSWORD
    • DRIVER : valeur obligatoire. Pilote JDBC à utiliser 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
    • 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.
    • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: facultatif. Si vous utilisez cette commande, 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 la 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.
    • FETCHSIZE : facultatif. Nombre de lignes à extraire par aller-retour. Par défaut : 10.
    • JDBC_SESSION_INIT : facultatif. Instruction d'initialisation de session pour lire des modèles Java.
    • TEMPVIEW et SQL_QUERY : facultatifs. Vous pouvez utiliser ces deux paramètres facultatifs pour appliquer une transformation Spark SQL lors du chargement de données dans Spanner. TEMPVIEW est le nom de la vue temporaire et SQL_QUERY est l'instruction de requête. TEMPVIEW et le nom de la table dans SQL_QUERY doivent correspondre.
    • INSTANCE : valeur obligatoire. ID de l'instance Spanner.
    • SPANNER_DATABASE : valeur obligatoire. ID de la base de données Spanner.
    • TABLE : valeur obligatoire. Nom de la table de sortie Spanner.
    • MODE : facultatif. Mode d'écriture pour la sortie Spanner. Options: Append, Overwrite, Ignore ou ErrorIfExists. La valeur par défaut est ErrorIfExists.
    • PRIMARY_KEY : valeur obligatoire. Des colonnes de clé primaire séparées par une virgule sont nécessaires pour créer une table de sortie Spanner.
    • SERVICE_ACCOUNT : facultatif. S'il n'est pas fourni, la valeur default Compute Engine service account (Compte de service Compute Engine par défaut) est utilisé.
    • PROPERTY et PROPERTY_VALUE: Facultatif. Liste de valeurs séparées par une virgule Propriété Spark=value.
    • LABEL et LABEL_VALUE : facultatives. Liste de paires label=value séparées par une virgule.
    • LOG_LEVEL : facultatif. Niveau de journalisation. Peut appartenir à l'une des valeurs suivantes : ALL, DEBUG, ERROR, FATAL, INFO OFF, TRACE ou WARN. Valeur par défaut : INFO.
    • 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 \
        --version="1.1" \
        --project="PROJECT_ID" \
        --region="REGION" \
        --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=JDBCTOSPANNER \
        --templateProperty log.level="LOG_LEVEL" \
        --templateProperty project.id="PROJECT_ID" \
        --templateProperty jdbctospanner.jdbc.url="JDBC_CONNECTION_URL" \
        --templateProperty jdbctospanner.jdbc.driver.class.name="DRIVER" \
        --templateProperty jdbctospanner.jdbc.fetchsize="FETCHSIZE" \
        --templateProperty jdbctospanner.jdbc.sessioninitstatement="JDBC_SESSION_INIT" \
        --templateProperty jdbctospanner.sql="QUERY" \
        --templateProperty jdbctospanner.sql.file="QUERY_FILE" \
        --templateProperty jdbctospanner.sql.numPartitions="NUM_PARTITIONS" \
        --templateProperty jdbctospanner.sql.partitionColumn="INPUT_PARTITION_COLUMN" \
        --templateProperty jdbctospanner.sql.lowerBound="LOWERBOUND" \
        --templateProperty jdbctospanner.sql.upperBound="UPPERBOUND" \
        --templateProperty jdbctospanner.output.instance="INSTANCE" \
        --templateProperty jdbctospanner.output.database="SPANNER_DATABASE" \
        --templateProperty jdbctospanner.output.table="TABLE" \
        --templateProperty jdbctospanner.output.saveMode="MODE" \
        --templateProperty jdbctospanner.output.primaryKey="PRIMARY_KEY" \
        --templateProperty jdbctospanner.output.batch.size="BATCHSIZE" \
        --templateProperty jdbctospanner.temp.table="TEMPVIEW" \
        --templateProperty jdbctospanner.temp.query="SQL_QUERY" 

    Windows (PowerShell)

    gcloud dataproc batches submit spark `
        --class=com.google.cloud.dataproc.templates.main.DataProcTemplate `
        --version="1.1" `
        --project="PROJECT_ID" `
        --region="REGION" `
        --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=JDBCTOSPANNER `
        --templateProperty log.level="LOG_LEVEL" `
        --templateProperty project.id="PROJECT_ID" `
        --templateProperty jdbctospanner.jdbc.url="JDBC_CONNECTION_URL" `
        --templateProperty jdbctospanner.jdbc.driver.class.name="DRIVER" `
        --templateProperty jdbctospanner.jdbc.fetchsize="FETCHSIZE" `
        --templateProperty jdbctospanner.jdbc.sessioninitstatement="JDBC_SESSION_INIT" `
        --templateProperty jdbctospanner.sql="QUERY" `
        --templateProperty jdbctospanner.sql.file="QUERY_FILE" `
        --templateProperty jdbctospanner.sql.numPartitions="NUM_PARTITIONS" `
        --templateProperty jdbctospanner.sql.partitionColumn="INPUT_PARTITION_COLUMN" `
        --templateProperty jdbctospanner.sql.lowerBound="LOWERBOUND" `
        --templateProperty jdbctospanner.sql.upperBound="UPPERBOUND" `
        --templateProperty jdbctospanner.output.instance="INSTANCE" `
        --templateProperty jdbctospanner.output.database="SPANNER_DATABASE" `
        --templateProperty jdbctospanner.output.table="TABLE" `
        --templateProperty jdbctospanner.output.saveMode="MODE" `
        --templateProperty jdbctospanner.output.primaryKey="PRIMARY_KEY" `
        --templateProperty jdbctospanner.output.batch.size="BATCHSIZE" `
        --templateProperty jdbctospanner.temp.table="TEMPVIEW" `
        --templateProperty jdbctospanner.temp.query="SQL_QUERY" 

    Windows (cmd.exe)

    gcloud dataproc batches submit spark ^
        --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ^
        --version="1.1" ^
        --project="PROJECT_ID" ^
        --region="REGION" ^
        --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=JDBCTOSPANNER ^
        --templateProperty log.level="LOG_LEVEL" ^
        --templateProperty project.id="PROJECT_ID" ^
        --templateProperty jdbctospanner.jdbc.url="JDBC_CONNECTION_URL" ^
        --templateProperty jdbctospanner.jdbc.driver.class.name="DRIVER" ^
        --templateProperty jdbctospanner.jdbc.fetchsize="FETCHSIZE" ^
        --templateProperty jdbctospanner.jdbc.sessioninitstatement="JDBC_SESSION_INIT" ^
        --templateProperty jdbctospanner.sql="QUERY" ^
        --templateProperty jdbctospanner.sql.file="QUERY_FILE" ^
        --templateProperty jdbctospanner.sql.numPartitions="NUM_PARTITIONS" ^
        --templateProperty jdbctospanner.sql.partitionColumn="INPUT_PARTITION_COLUMN" ^
        --templateProperty jdbctospanner.sql.lowerBound="LOWERBOUND" ^
        --templateProperty jdbctospanner.sql.upperBound="UPPERBOUND" ^
        --templateProperty jdbctospanner.output.instance="INSTANCE" ^
        --templateProperty jdbctospanner.output.database="SPANNER_DATABASE" ^
        --templateProperty jdbctospanner.output.table="TABLE" ^
        --templateProperty jdbctospanner.output.saveMode="MODE" ^
        --templateProperty jdbctospanner.output.primaryKey="PRIMARY_KEY" ^
        --templateProperty jdbctospanner.output.batch.size="BATCHSIZE" ^
        --templateProperty jdbctospanner.temp.table="TEMPVIEW" ^
        --templateProperty jdbctospanner.temp.query="SQL_QUERY" 

REST

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

  • PROJECT_ID : valeur obligatoire. ID de votre projet Google Cloud répertorié dans les paramètres IAM.
  • REGION : valeur obligatoire. Région Compute Engine
  • TEMPLATE_VERSION : valeur obligatoire. Spécifiez latest pour la valeur la plus récente version du modèle ou la date d'une version spécifique, par exemple 2023-03-17_v0.1.0-beta Consultez la page gs://dataproc-templates-binaries ou exécutez gcloud storage ls gs://dataproc-templates-binaries pour obtenir la liste des versions de modèle disponibles.
  • SUBNET : facultatif. Si aucun sous-réseau n'est spécifié, le sous-réseau 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. L'intégralité de Cloud Storage chemin d'accès, y compris le nom de fichier, où est stocké le fichier JDBC du connecteur JDBC. 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 permettent de construire les éléments JDBC_CONNECTION_URL:
    • JDBC_HOST, JDBC_PORT, JDBC_DATABASE ou, pour Oracle, JDBC_SERVICE, JDBC_USERNAME et JDBC_PASSWORD : obligatoire. Hôte JDBC, port, base de données, nom d'utilisateur et mot de passe
      • MySQL:
        jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
      • PostgreSQL:
        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=JDBC_PASSWORD
    • DRIVER : valeur obligatoire. Pilote JDBC à utiliser 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
    • 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.
    • INPUT_PARTITION_COLUMN, LOWERBOUND, UPPERBOUND, NUM_PARTITIONS: facultatif. Si vous utilisez cette commande, 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 la 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.
    • FETCHSIZE : facultatif. Nombre de lignes à extraire par aller-retour. Par défaut : 10.
    • JDBC_SESSION_INIT : facultatif. Instruction d'initialisation de session pour lire des modèles Java.
    • TEMPVIEW et SQL_QUERY : facultatifs. Vous pouvez utiliser ces deux paramètres facultatifs pour appliquer une transformation Spark SQL lors du chargement de données dans Spanner. TEMPVIEW est le nom de la vue temporaire et SQL_QUERY est l'instruction de requête. TEMPVIEW et le nom de la table dans SQL_QUERY doivent correspondre.
    • INSTANCE : valeur obligatoire. ID de l'instance Spanner.
    • SPANNER_DATABASE : valeur obligatoire. ID de la base de données Spanner.
    • TABLE : valeur obligatoire. Nom de la table de sortie Spanner.
    • MODE : facultatif. Mode d'écriture pour la sortie Spanner. Options: Append, Overwrite, Ignore ou ErrorIfExists. La valeur par défaut est ErrorIfExists.
    • PRIMARY_KEY : valeur obligatoire. Des colonnes de clé primaire séparées par une virgule sont nécessaires pour créer une table de sortie Spanner.
    • SERVICE_ACCOUNT : facultatif. Si aucune valeur n'est fournie, le compte de service Compute Engine par défaut est utilisé.
    • PROPERTY et PROPERTY_VALUE: Facultatif. Liste de valeurs séparées par une virgule Propriété Spark=value.
    • LABEL et LABEL_VALUE: Facultatif. Liste de paires label=value séparées par une virgule.
    • LOG_LEVEL : facultatif. Niveau de journalisation. Peut appartenir à l'une des valeurs suivantes : ALL, DEBUG, ERROR, FATAL, INFO OFF, TRACE ou WARN. Valeur par défaut : INFO.
    • 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é appartenant à Google 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","JDBCTOSPANNER",
          "--templateProperty","log.level=LOG_LEVEL",
          "--templateProperty","project.id=PROJECT_ID",
          "--templateProperty","jdbctospanner.jdbc.url=JDBC_CONNECTION_URL",
          "--templateProperty","jdbctospanner.jdbc.driver.class.name=DRIVER",
          "--templateProperty","jdbctospanner.jdbc.fetchsize=FETCHSIZE",
          "--templateProperty","jdbctospanner.jdbc.sessioninitstatement=JDBC_SESSION_INIT",
          "--templateProperty","jdbctospanner.sql=QUERY",
          "--templateProperty","jdbctospanner.sql.file=QUERY_FILE",
          "--templateProperty","jdbctospanner.sql.numPartitions=NUM_PARTITIONS",
          "--templateProperty","jdbctospanner.sql.partitionColumn=INPUT_PARTITION_COLUMN",
          "--templateProperty","jdbctospanner.sql.lowerBound=LOWERBOUND",
          "--templateProperty","jdbctospanner.sql.upperBound=UPPERBOUND",
          "--templateProperty","jdbctospanner.output.instance=INSTANCE",
          "--templateProperty","jdbctospanner.output.database=SPANNER_DATABASE",
          "--templateProperty","jdbctospanner.output.table=TABLE",
          "--templateProperty","jdbctospanner.output.saveMode=MODE",
          "--templateProperty","jdbctospanner.output.primaryKey=PRIMARY_KEY",
          "--templateProperty","jdbctospanner.output.batch.size=BATCHSIZE",
          "--templateProperty","jdbctospanner.temp.table=TEMPVIEW",
          "--templateProperty","jdbctospanner.temp.query=SQL_QUERY" 
        ],
        "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"
      }
    }