提问人:Viknesh S K 提问时间:11/2/2023 最后编辑:Viknesh S K 更新时间:11/6/2023 访问量:33
错误:ValueError:未知 url 类型:“g”。无法通过 Cloud composer 触发的 Dataflow 脚本连接到存储在 GCS 存储桶中的 jdbc 驱动程序
Error: ValueError: unknown url type: 'g'. Unable to connect to jdbc driver stored in GCS bucket by Dataflow script triggered by Cloud composer
问:
我无法通过 Cloud composer 触发的 Dataflow 脚本连接到存储在 GCS 存储桶中的 jdbc 驱动程序(jar 文件)。我有一个作曲家脚本和一个数据流脚本。
作曲家脚本:触发要运行的数据流脚本。(在作曲家存储桶的 Dags 文件夹中)
Dataflow python脚本:连接到CloudSQL中的MySQL,以读取数据并将其写入Bigquery。MySQL Jar 文件:(两者都存储在 Composer bucket 的存储桶位置)。mysql-connector-j-8.2.0.jar
用于读取 MySQL 表的代码。apache_beam.io.jdbc.ReadFromJdbc
classpath
数据流脚本:
"""Cloud sql mysql to bigquery"""
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions, GoogleCloudOptions
from apache_beam.io.gcp.bigquery import WriteToBigQuery
from apache_beam.io.jdbc import ReadFromJdbc
def run(argv=None):
pipeline_options = PipelineOptions()
gcp_options = pipeline_options.view_as(GoogleCloudOptions)
gcp_options.project = 'project-name'
with beam.Pipeline(options=pipeline_options) as p:
jdbc_url = (
"jdbc:mysql://someIPhere:3306/dbname"
)
# classpath='gs://us-central1-viknesh-compose-0000000-bucket/mysql-connector-j-8.2.0.jar'
# classpath=["com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.7.2"]
# classpath=["gs://us-central1-viknesh-compose-0000000-bucket/mysql-connector-j-8.2.0.jar"]
classpath=["https://storage.cloud.google.com/viknesh-poc-bucket/mysql-connector-j-8.2.0.jar"]
query = 'SELECT * FROM Persons'
output_table = 'project-name:datasets_us_cent1.new_test_mysql_cloudsql'
sql_data = p | 'Read from Cloud SQL' >> ReadFromJdbc(
query=query,
jdbc_url=jdbc_url,
table_name='new_test_mysql_cloudsql',
username='root',
password='mypassword',
# driver_class_name='com.mysql.jdbc.Driver',
driver_class_name='com.mysql.cj.jdbc.Driver',
classpath=classpath
)
sql_data | 'Write to BigQuery' >> WriteToBigQuery(
table=output_table,
create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE
)
if __name__ == '__main__':
run()
我的作曲家 dag 代码可以触发数据流代码。 我收到一个错误,指出数据流代码无法解析位置(gcs 路径)。有多个警告和错误。
警告:(对于路径中的每个字母)它显示警告WARNING:root:Unable to parse g into group:artifact:version.
错误: ValueError: unknown url type: 'g'
我还检查了此处提供的 I/O 连接器。看起来python不是一个原生的连接器,只有via-X语言和X语言有一些困难。
我尝试了多种方法来设置服务帐户和读取 maven 页面的权限,但没有得到解决。请帮忙!
答:
https://beam.apache.org/releases/pydoc/current/apache_beam.io.jdbc.html
classpath – 要包含在扩展服务的类路径中的 JAR 或 Java 包的列表。jdbc 通常需要此选项来包含额外的 JDBC 驱动程序包。包可以采用以下三种格式:(1) 本地文件,(2) URL,(3) Maven 包的 gradle 样式标识符(例如“org.postgresql:postgresql:42.3.1”)。默认情况下,此参数包括 Postgres SQL JDBC 驱动程序。
你能试试吗?classpath=[classpath]
评论