我在Glue中定义了JDBC连接,并且能够在Glue Spark作业中成功使用它。我如何在Glue Python Shell作业中使用相同的连接?尽管我看到了可能的引用,但找不到任何模板该怎么做。
一种替代方法是如何在Python Shell中定义JDBC连接,我需要在其中包含一个外部库? pyodbc
由于相关性,我无法阅读。
答案 0 :(得分:1)
将JDBC连接附加到Glue Python Shell作业时,它只能由Glue用来在具有安全组的指定子网中启动ENI。 jdbc url,用户名和密码对于Python Shell作业没有任何值。
因此,您必须提供一个外部包,例如pymssql(http://www.pymssql.org/en/stable/),并从脚本本身初始化连接。
您可以参考提供自己的Python库的文档:https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-python-egg-library
答案 1 :(得分:1)
这是代码。确保在python shell作业cloudformation模板中添加了相同的连接。我们正在使用pg8000库。
def get_connection(self, conn_name):
client = boto3.client('glue', region_name=self.region_id)
response = client.get_connection(Name=conn_name)
print response
connection_properties = response['Connection']['ConnectionProperties']
URL = connection_properties['JDBC_CONNECTION_URL']
url_list = URL.split("/")
host = "{}".format(url_list[-2][:-5])
port = url_list[-2][-4:]
database = "{}".format(url_list[-1])
user = "{}".format(connection_properties['USERNAME'])
pwd = "{}".format(connection_properties['PASSWORD'])
# print "user:{}".format(user)
# print "pwd:{}".format(pwd)
# print "host:{}".format(host)
# print "port:{}".format(port)
# print "database:{}".format(database)
rs_conn = dbapi.connect(database=database, host=host, port=5439, \
user=user, password=pwd, ssl=True)
cur = rs_conn.cursor()
cur.execute("set statement_timeout = 1200000")
rs_conn.commit()
cur.close()
return rs_conn