Vorlage „JDBC zu Cloud Spanner“
Mit der Vorlage „Managed Service for Apache Spark JDBC zu Spanner“ können Sie Daten aus JDBC-Datenbanken in Spanner extrahieren.
Diese Vorlage unterstützt die folgenden Datenbanken als Eingabe:
- MySQL
- PostgreSQL
- Microsoft SQL Server
- Oracle
Vorlage verwenden
Führen Sie die Vorlage mit der gcloud CLI oder der Managed Service for Apache Spark API aus.
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- PROJECT_ID: Erforderlich. Ihre Google Cloud Projekt-ID, die in den IAM-Einstellungen aufgeführt ist.
- REGION: Erforderlich. Compute Engine -Region.
- TEMPLATE_VERSION: Erforderlich. Geben Sie
latestfür die neueste Vorlagenversion oder das Datum einer bestimmten Version an, z. B.2023-03-17_v0.1.0-beta. Unter gs://dataproc-templates-binaries oder mit dem Befehlgcloud storage ls gs://dataproc-templates-binarieskönnen Sie die verfügbaren Vorlagenversionen auflisten. - SUBNET: Optional. Wenn kein Subnetzwerk angegeben ist, wird das Subnetzwerk
in der angegebenen REGION im
defaultNetzwerk ausgewählt.Beispiel:
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME - JDBC_CONNECTOR_CLOUD_STORAGE_PATH: Erforderlich. Der vollständige Cloud Storage
Pfad, einschließlich des Dateinamens, in dem die JDBC-Connector-JAR-Datei gespeichert ist. Mit den folgenden Befehlen können Sie
JDBC-Connectors zum Hochladen in Cloud Storage herunterladen:
- 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
- MySQL :
-
Die folgenden Variablen werden verwendet, um die erforderliche
JDBC_CONNECTION_URL:
- zu erstellen:
- JDBC_HOST, JDBC_PORT, JDBC_DATABASE, oder für Oracle JDBC_SERVICE, JDBC_USERNAME, und JDBC_PASSWORD: Erforderlich. JDBC-Host, -Port, -Datenbank, -Nutzername und -Passwort.
-
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: Erforderlich. Der JDBC-Treiber, der für
die Verbindung verwendet wird:
- MySQL :
com.mysql.cj.jdbc.Driver - Postgres SQL :
org.postgresql.Driver - Microsoft SQL Server :
com.microsoft.sqlserver.jdbc.SQLServerDriver - Oracle :
oracle.jdbc.driver.OracleDriver
- MySQL :
- QUERY oder QUERY_FILE: Erforderlich.
Legen Sie entweder
QUERYoderQUERY_FILEfest, um die Abfrage anzugeben, mit der Daten aus JDBC extrahiert werden sollen. - INPUT_PARTITION_COLUMN,
LOWERBOUND,
UPPERBOUND,
NUM_PARTITIONS: Optional. Wenn diese Parameter verwendet werden, müssen alle folgenden
Parameter angegeben werden:
- INPUT_PARTITION_COLUMN: Name der Spalte für die JDBC-Eingabetabellenpartition.
- LOWERBOUND: Untergrenze der Spalte für die JDBC-Eingabetabellenpartition, die zum Bestimmen der Partitionsgröße verwendet wird.
- UPPERBOUND:Obergrenze der Spalte für die JDBC-Eingabetabellenpartition, die zum Bestimmen der Partitionsgröße verwendet wird.
- NUM_PARTITIONS::Die maximale Anzahl von Partitionen, die für die Parallelität von Tabellenlese- und -schreibvorgängen verwendet werden können.
Wenn dieser Wert angegeben ist, wird er für die JDBC-Ein- und -Ausgabeverbindung verwendet. Standardwert:
10.
- FETCHSIZE: Optional. Anzahl der Zeilen, die pro Roundtrip abgerufen werden sollen. Standardwert: 10.
- JDBC_SESSION_INIT: Optional. Anweisung zur Sitzungsinitialisierung zum Lesen von Java-Vorlagen.
- TEMPVIEW und SQL_QUERY: Optional. Mit diesen beiden optionalen Parametern können Sie eine Spark SQL-Transformation anwenden, während Sie Daten in Spanner laden. TEMPVIEW ist der Name der temporären Ansicht und SQL_QUERY ist die Abfrageanweisung. TEMPVIEW und der Tabellenname in SQL_QUERY müssen übereinstimmen.
- INSTANCE: Erforderlich. Cloud Spanner-Instanz-ID.
- SPANNER_DATABASE: Erforderlich. Cloud Spanner-Datenbank-ID.
- TABLE: Erforderlich. Name der Cloud Spanner-Ausgabetabelle.
- SPANNER_JDBC_DIALECT: Erforderlich. Cloud Spanner-JDBC-Dialekt.
Optionen:
googlesqloderpostgresql. Standardwert:googlesql. - MODE: Optional. Schreibmodus für die Cloud Spanner-Ausgabe.
Optionen:
Append,Overwrite,IgnoreoderErrorIfExists. Standardwert:ErrorIfExists. - PRIMARY_KEY: Erforderlich. Durch Kommas getrennte Primärschlüsselspalten, die beim Erstellen der Cloud Spanner-Ausgabetabelle erforderlich sind.
- SERVICE_ACCOUNT: Optional. Wenn nicht angegeben, wird das Compute Engine-Standarddienstkonto verwendet.
- PROPERTY und PROPERTY_VALUE:
Optional. Durch Kommas getrennte Liste von
Spark-Eigenschaft=
valuePaaren. - LABEL und LABEL_VALUE:
Optional. Durch Kommas getrennte Liste von
label=valuePaaren. - LOG_LEVEL: Optional. Logging-Ebene. Mögliche Werte:
ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACEoderWARN. Standardwert:INFO. -
KMS_KEY: Optional. Der Cloud Key Management Service-Schlüssel, der für die Verschlüsselung verwendet werden soll. Wenn kein Schlüssel angegeben ist, werden inaktive Daten verschlüsselt mit einem Google-owned and Google-managed encryption key.
Beispiel:
projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud dataproc batches submit spark \ --class=com.google.cloud.dataproc.templates.main.DataProcTemplate \ --version="1.2" \ --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" \ --templateProperty spanner.jdbc.dialect="SPANNER_JDBC_DIALECT"
Windows (PowerShell)
gcloud dataproc batches submit spark ` --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ` --version="1.2" ` --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" ` --templateProperty spanner.jdbc.dialect="SPANNER_JDBC_DIALECT"
Windows (cmd.exe)
gcloud dataproc batches submit spark ^ --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ^ --version="1.2" ^ --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" ^ --templateProperty spanner.jdbc.dialect="SPANNER_JDBC_DIALECT"
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- PROJECT_ID: Erforderlich. Ihre Google Cloud Projekt-ID, die in den IAM-Einstellungen aufgeführt ist.
- REGION: Erforderlich. Compute Engine -Region.
- TEMPLATE_VERSION: Erforderlich. Geben Sie
latestfür die neueste Vorlagenversion oder das Datum einer bestimmten Version an, z. B.2023-03-17_v0.1.0-beta. Unter gs://dataproc-templates-binaries oder mit dem Befehlgcloud storage ls gs://dataproc-templates-binarieskönnen Sie die verfügbaren Vorlagenversionen auflisten. - SUBNET: Optional. Wenn kein Subnetzwerk angegeben ist, wird das Subnetzwerk
in der angegebenen REGION im
defaultNetzwerk ausgewählt.Beispiel:
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME - JDBC_CONNECTOR_CLOUD_STORAGE_PATH: Erforderlich. Der vollständige Cloud Storage
Pfad, einschließlich des Dateinamens, in dem die JDBC-Connector-JAR-Datei gespeichert ist. Mit den folgenden Befehlen können Sie
JDBC-Connectors zum Hochladen in Cloud Storage herunterladen:
- 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
- MySQL :
-
Die folgenden Variablen werden verwendet, um die erforderliche
JDBC_CONNECTION_URL:
- zu erstellen:
- JDBC_HOST, JDBC_PORT, JDBC_DATABASE, oder für Oracle JDBC_SERVICE, JDBC_USERNAME, und JDBC_PASSWORD: Erforderlich. JDBC-Host, -Port, -Datenbank, -Nutzername und -Passwort.
-
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: Erforderlich. Der JDBC-Treiber, der für
die Verbindung verwendet wird:
- MySQL :
com.mysql.cj.jdbc.Driver - Postgres SQL :
org.postgresql.Driver - Microsoft SQL Server :
com.microsoft.sqlserver.jdbc.SQLServerDriver - Oracle :
oracle.jdbc.driver.OracleDriver
- MySQL :
- QUERY oder QUERY_FILE: Erforderlich.
Legen Sie entweder
QUERYoderQUERY_FILEfest, um die Abfrage anzugeben, mit der Daten aus JDBC extrahiert werden sollen. - INPUT_PARTITION_COLUMN,
LOWERBOUND,
UPPERBOUND,
NUM_PARTITIONS: Optional. Wenn diese Parameter verwendet werden, müssen alle folgenden
Parameter angegeben werden:
- INPUT_PARTITION_COLUMN: Name der Spalte für die JDBC-Eingabetabellenpartition.
- LOWERBOUND: Untergrenze der Spalte für die JDBC-Eingabetabellenpartition, die zum Bestimmen der Partitionsgröße verwendet wird.
- UPPERBOUND:Obergrenze der Spalte für die JDBC-Eingabetabellenpartition, die zum Bestimmen der Partitionsgröße verwendet wird.
- NUM_PARTITIONS::Die maximale Anzahl von Partitionen, die für die Parallelität von Tabellenlese- und -schreibvorgängen verwendet werden können.
Wenn dieser Wert angegeben ist, wird er für die JDBC-Ein- und -Ausgabeverbindung verwendet. Standardwert:
10.
- FETCHSIZE: Optional. Anzahl der Zeilen, die pro Roundtrip abgerufen werden sollen. Standardwert: 10.
- JDBC_SESSION_INIT: Optional. Anweisung zur Sitzungsinitialisierung zum Lesen von Java-Vorlagen.
- TEMPVIEW und SQL_QUERY: Optional. Mit diesen beiden optionalen Parametern können Sie eine Spark SQL-Transformation anwenden, während Sie Daten in Spanner laden. TEMPVIEW ist der Name der temporären Ansicht und SQL_QUERY ist die Abfrageanweisung. TEMPVIEW und der Tabellenname in SQL_QUERY müssen übereinstimmen.
- INSTANCE: Erforderlich. Cloud Spanner-Instanz-ID.
- SPANNER_DATABASE: Erforderlich. Cloud Spanner-Datenbank-ID.
- TABLE: Erforderlich. Name der Cloud Spanner-Ausgabetabelle.
- SPANNER_JDBC_DIALECT: Erforderlich. Cloud Spanner-JDBC-Dialekt.
Optionen:
googlesqloderpostgresql. Standardwert:googlesql. - MODE: Optional. Schreibmodus für die Cloud Spanner-Ausgabe.
Optionen:
Append,Overwrite,IgnoreoderErrorIfExists. Standardwert:ErrorIfExists. - PRIMARY_KEY: Erforderlich. Durch Kommas getrennte Primärschlüsselspalten, die beim Erstellen der Cloud Spanner-Ausgabetabelle erforderlich sind.
- SERVICE_ACCOUNT: Optional. Wenn nicht angegeben, wird das Compute Engine-Standarddienstkonto verwendet.
- PROPERTY und PROPERTY_VALUE:
Optional. Durch Kommas getrennte Liste von
Spark-Eigenschaft=
valuePaaren. - LABEL und LABEL_VALUE:
Optional. Durch Kommas getrennte Liste von
label=valuePaaren. - LOG_LEVEL: Optional. Logging-Ebene. Mögliche Werte:
ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACEoderWARN. Standardwert:INFO. -
KMS_KEY: Optional. Der Cloud Key Management Service-Schlüssel, der für die Verschlüsselung verwendet werden soll. Wenn kein Schlüssel angegeben ist, werden inaktive Daten verschlüsselt mit einem Google-owned and Google-managed encryption key.
Beispiel:
projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
HTTP-Methode und URL:
POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/batches
JSON-Text anfordern:
{ "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","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", "--templateProperty spanner.jdbc.dialect=SPANNER_JDBC_DIALECT" ], "jarFileUris": [ "gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar" ] } }Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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" } }