与Oracle的AWS Glue Python Shell连接

问题描述 投票:0回答:1

[运行AWS Glue Python Shell(不使用Spark)时,我想与Oracle连接。我成功完成了dev_endpoint或虚拟机中的所有工作(在下面的链接中进行了描述),但我的目标是使它具有AWS Glue Python Shell。Connection with Oracle cx_Oracle problem with AWS Glue Python Shell

AWS Glue Python Shell中的所有库都必须以.whl或.egg软件包的形式出现-然后将它们安装。但是AWS Glue是无服务器的,我无法找到它们的安装位置-这样我就可以正确设置rpath。

如何知道absolute_path_to_library_dir?

python oracle amazon-web-services aws-glue
1个回答
0
投票

由于胶水是无服务器的,因此没有/path/to/library/dir

胶中的python进程需要几件事才能连接到外部数据库,例如oracle服务器。

  1. python库必须打包为.egg.whl,并上传到s3,并且在创建作业时必须指定这些文件的位置(字段Python Library Path)。 这适用于您编写或通常会pip install使用的任何库,但在aws提供的胶合过程环境中这些库不可用。因此,您需要在本地为.egg构建一个cx_Oracle,上传到s3,并在创建作业时在Python Library Path中提供路径。如果已经创建了作业,则可以编辑该作业并提供s3-path-to-cs-oracle.egg

  2. etl秘密必须通过etl脚本从安全的外部服务中获取。一种选择是将oracle连接凭据存储在胶水中。从aws胶控制台,转到连接,添加jdbc连接并保存数据库凭据。

  3. 在您的etl脚本中,使用boto3.client('glue').get_connection检索连接详细信息,并使用用户上载的cx_Oracle库连接到数据库。这是一个示例片段,您需要对其进行调整并包含在您的etl脚本中]]

  4. 摘要:

import boto3
import cx_Oracle as orcl

glue = boto3.client('glue')
resp = glue.get_connection(Name='my-oracle-connection')
props = resp['Connection']['ConnectionProperties']
dsn = props['JDBC_CONNECTION_URL'].split('//')[-1]
user = props['USERNAME']
pw = props['PASSWORD']
db = orcl.connect(user, pw, dsn)
#^ `db` should be a connection to your oracle db
© www.soinside.com 2019 - 2024. All rights reserved.