如果2个驱动程序文件,Python将JPype添加到Jaydebeapi连接?

时间:2015-11-10 23:49:43

标签: python sql jdbc teradata jaydebeapi

下面是使用Jaydebeapi通过JDBC连接连接到Teradata的代码。当我使用razorsql GUI运行查询时,只需15秒。当我通过下面的代码运行它时,只需要花费20多分钟来运行query1。

Jaydebeapi有什么问题或者我可以通过优化查询/使用Jpype来加快速度吗?

    #-*- coding: utf-8 -*-
    import jaydebeapi
    import jpype
    import pandas as pd
    import numpy as np
    import collections

    query_dict=collections.OrderedDict()


    connection = jaydebeapi.connect('com.teradata.jdbc.TeraDriver', ['my_db_name','my_username','my_password'], ['/Applications/drivers/tdgssconfig.jar','/Applications/drivers/terajdbc4.jar'],)     

    cur = connection.cursor()

    query_name_list=['query1','query2']

    query1= """select ......"""
    query2= """ select ....."""

    for i in query_list:
      query_dict[i]=locals()[i]

    print query_dict.keys()

    for index in range(len(query_list)):
      tera_query=query_dict.values()[index]

    cur.execute(tera_query)
    print "executing ... "

    result=cur.fetchall() 
    print "fetching results ... "

1 个答案:

答案 0 :(得分:0)

我已经发布了about some performance considerations

再次:

...使用JPype实现获取大型结果集会导致对每个单元格值进行一些JNI调用,从而导致很多开销。 ...

  1. 最小化结果集的大小。使用SQL函数进行聚合。
  2. 尝试最新的JPype1实现。已经有一些性能改进。
  3. 将您的运行时切换到Jython(JayDeBeApi也适用于Jython)
  4. 直接在Java中实现数据库查询和数据提取,并使用JPype调用逻辑,但接口不返回大数据集。
  5. 尝试改进JPype和JayDeBeApi代码
  6. BTW:主题" ..如果2个驱动程序文件"有点误导。驱动程序文件的数量肯定与性能问题无关。