AWS Python Shell-如何使用胶目录连接

时间:2019-08-10 03:09:08

标签: python apache-spark jdbc aws-glue

我在Glue中定义了JDBC连接,并且能够在Glue Spark作业中成功使用它。我如何在Glue Python Shell作业中使用相同的连接?尽管我看到了可能的引用,但找不到任何模板该怎么做。

一种替代方法是如何在Python Shell中定义JDBC连接,我需要在其中包含一个外部库? pyodbc由于相关性,我无法阅读。

2 个答案:

答案 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