You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ro...@apache.org on 2023/10/31 20:24:42 UTC
(beam) branch master updated: [YAML] Add JDBC branding transforms (#29171)
This is an automated email from the ASF dual-hosted git repository.
robertwb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new e4bd6183b70 [YAML] Add JDBC branding transforms (#29171)
e4bd6183b70 is described below
commit e4bd6183b70c4bcb9db1b86aafaa3be0a0e75a7a
Author: Jeff Kinard <35...@users.noreply.github.com>
AuthorDate: Tue Oct 31 16:24:36 2023 -0400
[YAML] Add JDBC branding transforms (#29171)
Add specific jdbc io's for mysql, postgres, oracle and sql server.
---
.../schemaio-expansion-service/build.gradle | 4 +++
sdks/python/apache_beam/yaml/standard_io.yaml | 41 ++++++++++++++++++++++
sdks/python/apache_beam/yaml/yaml_provider.py | 18 +++++++++-
3 files changed, 62 insertions(+), 1 deletion(-)
diff --git a/sdks/java/extensions/schemaio-expansion-service/build.gradle b/sdks/java/extensions/schemaio-expansion-service/build.gradle
index 246c0c155cb..ae6599dfbb9 100644
--- a/sdks/java/extensions/schemaio-expansion-service/build.gradle
+++ b/sdks/java/extensions/schemaio-expansion-service/build.gradle
@@ -46,6 +46,10 @@ dependencies {
implementation project(path: ":sdks:java:core", configuration: "shadow")
implementation library.java.vendored_grpc_1_54_0
implementation library.java.vendored_guava_32_1_2_jre
+ // Stage default drivers for JdbcIO schema transforms
+ implementation 'mysql:mysql-connector-java:8.0.22'
+ implementation 'com.oracle.database.jdbc:ojdbc8:23.2.0.0'
+ implementation 'com.microsoft.sqlserver:mssql-jdbc:12.2.0.jre11'
testImplementation library.java.junit
testImplementation library.java.mockito_core
}
diff --git a/sdks/python/apache_beam/yaml/standard_io.yaml b/sdks/python/apache_beam/yaml/standard_io.yaml
index 6499ffc7e55..236046abb9b 100644
--- a/sdks/python/apache_beam/yaml/standard_io.yaml
+++ b/sdks/python/apache_beam/yaml/standard_io.yaml
@@ -138,6 +138,14 @@
transforms:
'ReadFromJdbc': 'ReadFromJdbc'
'WriteToJdbc': 'WriteToJdbc'
+ 'ReadFromMySql': 'ReadFromJdbc'
+ 'WriteToMySql': 'WriteToJdbc'
+ 'ReadFromPostgres': 'ReadFromJdbc'
+ 'WriteToPostgres': 'WriteToJdbc'
+ 'ReadFromOracle': 'ReadFromJdbc'
+ 'WriteToOracle': 'WriteToJdbc'
+ 'ReadFromSqlServer': 'ReadFromJdbc'
+ 'WriteToSqlServer': 'WriteToJdbc'
config:
mappings:
'ReadFromJdbc':
@@ -159,10 +167,43 @@
driver_jars: 'driverJars'
connection_properties: 'connectionProperties'
connection_init_sql: 'connectionInitSql'
+ 'ReadFromMySql': 'ReadFromJdbc'
+ 'WriteToMySql': 'WriteToJdbc'
+ 'ReadFromPostgres': 'ReadFromJdbc'
+ 'WriteToPostgres': 'WriteToJdbc'
+ 'ReadFromOracle': 'ReadFromJdbc'
+ 'WriteToOracle': 'WriteToJdbc'
+ 'ReadFromSqlServer': 'ReadFromJdbc'
+ 'WriteToSqlServer': 'WriteToJdbc'
+ defaults:
+ 'ReadFromMySql':
+ driverClassName: 'com.mysql.jdbc.Driver'
+ 'WriteToMySql':
+ driverClassName: 'com.mysql.jdbc.Driver'
+ 'ReadFromPostgres':
+ driverClassName: 'org.postgresql.Driver'
+ 'WriteToPostgres':
+ driverClassName: 'org.postgresql.Driver'
+ 'ReadFromOracle':
+ driverClassName: 'oracle.jdbc.driver.OracleDriver'
+ 'WriteToOracle':
+ driverClassName: 'oracle.jdbc.driver.OracleDriver'
+ 'ReadFromSqlServer':
+ driverClassName: 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
+ 'WriteToSqlServer':
+ driverClassName: 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
underlying_provider:
type: beamJar
transforms:
'ReadFromJdbc': 'beam:schematransform:org.apache.beam:jdbc_read:v1'
'WriteToJdbc': 'beam:schematransform:org.apache.beam:jdbc_write:v1'
+ 'ReadFromMySql': 'beam:schematransform:org.apache.beam:jdbc_read:v1'
+ 'WriteToMySql': 'beam:schematransform:org.apache.beam:jdbc_write:v1'
+ 'ReadFromPostgres': 'beam:schematransform:org.apache.beam:jdbc_read:v1'
+ 'WriteToPostgres': 'beam:schematransform:org.apache.beam:jdbc_write:v1'
+ 'ReadFromOracle': 'beam:schematransform:org.apache.beam:jdbc_read:v1'
+ 'WriteToOracle': 'beam:schematransform:org.apache.beam:jdbc_write:v1'
+ 'ReadFromSqlServer': 'beam:schematransform:org.apache.beam:jdbc_read:v1'
+ 'WriteToSqlServer': 'beam:schematransform:org.apache.beam:jdbc_write:v1'
config:
gradle_target: 'sdks:java:extensions:schemaio-expansion-service:shadowJar'
diff --git a/sdks/python/apache_beam/yaml/yaml_provider.py b/sdks/python/apache_beam/yaml/yaml_provider.py
index a21db09b50c..2d7471e506b 100644
--- a/sdks/python/apache_beam/yaml/yaml_provider.py
+++ b/sdks/python/apache_beam/yaml/yaml_provider.py
@@ -739,9 +739,25 @@ class RenamingProvider(Provider):
for transform in transforms.keys():
if transform not in mappings:
raise ValueError(f'Missing transform {transform} in mappings.')
- self._mappings = mappings
+ self._mappings = self.expand_mappings(mappings)
self._defaults = defaults or {}
+ @staticmethod
+ def expand_mappings(mappings):
+ if not isinstance(mappings, dict):
+ raise ValueError(
+ "RenamingProvider mappings must be dict of transform "
+ "mappings.")
+ for key, value in mappings.items():
+ if isinstance(value, str):
+ if value not in mappings.keys():
+ raise ValueError(
+ "RenamingProvider transform mappings must be dict or "
+ "specify transform that has mappings within same "
+ "provider.")
+ mappings[key] = mappings[value]
+ return mappings
+
def available(self) -> bool:
return self._underlying_provider.available()