如何将AWS Glue连接至非RDS的Oracle数据库?
解决AWS Glue连接非RDS Oracle数据库的方案
一、JDBC连接方式(官方支持路径)
- 忽略控制台测试报错:
Testing connections with custom drivers is not currently supported只是Glue控制台的测试限制,实际作业中自定义JDBC驱动可正常使用。 - 操作步骤:
- 将
ojdbc8.jar上传至S3指定路径,例如s3://your-glue-resources/jdbc-drivers/ojdbc8.jar。 - 创建Glue作业时,在作业属性的Python路径中添加该S3路径;若为Spark作业,在作业参数里配置
--extra-jars s3://your-glue-resources/jdbc-drivers/ojdbc8.jar。 - 作业代码中使用JDBC连接:
df = spark.read.format("jdbc") \ .option("url", "jdbc:oracle:thin:@//<Oracle主机地址>:<端口>/<服务名>") \ .option("dbtable", "<目标表名>") \ .option("user", "<数据库用户名>") \ .option("password", "<数据库密码>") \ .option("driver", "oracle.jdbc.driver.OracleDriver") \ .load()
- 将
二、修复oracledb安装失败问题
- 报错
oracledb-1.3.1-cp311-cp311-win_amd64.whl is not a supported wheel on this platform是因为下载的wheel包与Glue运行环境不匹配(Glue采用Linux架构,而非Windows)。 - 正确操作:
- 下载对应Glue Python版本的Linux平台oracledb包,例如Glue 4.0适配Python 3.10,需下载
oracledb-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl。 - 将包上传至S3,在Glue作业的Python路径中添加该包的S3地址。
- 代码中使用oracledb连接:
import oracledb conn = oracledb.connect( user="<用户名>", password="<密码>", dsn="<Oracle主机地址>:<端口>/<服务名>" ) # 执行查询等后续操作
- 下载对应Glue Python版本的Linux平台oracledb包,例如Glue 4.0适配Python 3.10,需下载
三、解决awswrangler无oracle属性问题
awswrangler从3.x版本起移除了oracle模块,若需使用该模块需降级至2.x版本,或直接改用Spark JDBC/原生oracledb驱动。- 若坚持使用awswrangler 2.x:
- 上传对应Glue Python版本的
awswrangler==2.19.0wheel包至S3。 - 作业中配置包路径后,代码示例:
import awswrangler as wr df = wr.oracle.read_sql_query( sql="SELECT * FROM <目标表名>", con="oracle+oracledb://<用户名>:<密码>@<主机地址>:<端口>/<服务名>" )
- 上传对应Glue Python版本的
四、核心注意事项
- 确保Glue作业执行角色拥有访问S3驱动包的权限,同时Oracle数据库所在VPC的安全组规则与Lambda一致,保证网络连通性。
- 若使用Oracle SID而非服务名,JDBC URL格式为
jdbc:oracle:thin:@<主机地址>:<端口>:<SID>。
内容的提问来源于stack exchange,提问作者Kohan95
相关产品推荐
相关产品推荐

