[运行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?
由于胶水是无服务器的,因此没有/path/to/library/dir
。
胶中的python进程需要几件事才能连接到外部数据库,例如oracle服务器。
python库必须打包为.egg
或.whl
,并上传到s3,并且在创建作业时必须指定这些文件的位置(字段Python Library Path
)。 这适用于您编写或通常会pip install
使用的任何库,但在aws提供的胶合过程环境中这些库不可用。因此,您需要在本地为.egg
构建一个cx_Oracle
,上传到s3,并在创建作业时在Python Library Path
中提供路径。如果已经创建了作业,则可以编辑该作业并提供s3-path-to-cs-oracle.egg
etl秘密必须通过etl脚本从安全的外部服务中获取。一种选择是将oracle连接凭据存储在胶水中。从aws胶控制台,转到连接,添加jdbc连接并保存数据库凭据。
在您的etl脚本中,使用boto3.client('glue').get_connection检索连接详细信息,并使用用户上载的cx_Oracle
库连接到数据库。这是一个示例片段,您需要对其进行调整并包含在您的etl脚本中]]
摘要:
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