0

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

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 ... "
4

1 回答 1

0

我已经发布了一些性能注意事项

又是在这里:

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

  1. 最小化结果集的大小。使用 SQL 函数进行聚合。
  2. 试试 JPype1 的最新实现。有一些性能改进。
  3. 将运行时切换到 Jython(JayDeBeApi 也适用于 Jython)
  4. 直接在 Java 中实现数据库查询和数据提取,并使用 JPype 调用逻辑,但接口不返回大型数据集。
  5. 尝试改进 JPype 和 JayDeBeApi 代码

顺便说一句:主题“.. if 2 driver files”有点误导。驱动文件的数量肯定与性能问题无关。

于 2015-11-11T07:57:13.093 回答