通过AWS Glue向TimestreamDB写入数据时JDBC连接配置问题求助
Glue连接Timestream JDBC常见问题排查与修复方案
- 语法错误修正:你代码中的JDBC URL是字符串类型,Python中需要用引号包裹,否则会直接报语法错误。
- Timestream JDBC参数规范修正:
- JDBC读取数据时,
dbtable参数必须遵循<数据库名>.<表名>的格式,不能只填写表名 - Glue DynamicFrame写入时,connection_options不支持单独传入
database参数,需将数据库名合并到dbtable参数中,同时删除冗余的database配置项
- JDBC读取数据时,
- 依赖包规范:需上传带全量依赖的JDBC驱动包,包名格式为
amazon-timestream-jdbc-<版本号>-all.jar,单独的基础驱动包缺少依赖会导致类加载失败 - 权限配置优化:不建议在URL中硬编码AKSK、SessionToken,可直接为Glue作业绑定具备Timestream读写权限的IAM角色,驱动会自动读取Glue运行环境的权限凭证,既避免密钥泄露风险也减少参数配置错误
- 流式写入适配:如果是Glue流处理作业,直接使用
write_dynamic_frame不支持流式写入,需要先对DStream的每个批次使用foreachBatch处理,将批次内的DynamicFrame/DataFrame执行写入操作
修正后的代码示例:
# 去掉硬编码密钥,使用Glue作业绑定的IAM角色权限 url = "jdbc:timestream://Region=us-east-1" # 修正dbtable格式为 库名.表名 source_df = sparkSession.read.format("jdbc")\ .option("url", url)\ .option("dbtable", "你的数据库名.IoT")\ .option("driver", "software.amazon.timestream.jdbc.TimestreamDriver")\ .load() # 修正写入参数,删除冗余database配置,合并到dbtable datasink1 = glueContext.write_dynamic_frame.from_options( frame = applymapping0, connection_type = "jdbc", connection_options = { "url": url, "driver": "software.amazon.timestream.jdbc.TimestreamDriver", "dbtable": "CovidTestDb.CovidTestTable" }, transformation_ctx = "datasink1" )
内容的提问来源于stack exchange,提问作者Suraj Haradagatti
相关产品推荐
相关产品推荐

