Python добавить JPype к соединению Jaydebeapi, если 2 файла драйвера?

Ниже приведен мой код для подключения к Teradata через соединение JDBC с использованием Jaydebeapi. Когда я запускаю запрос с помощью графического интерфейса razorsql, это занимает всего 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 ответ

Я уже писал о некоторых соображениях производительности.

Снова здесь:

... выборка больших наборов результатов с реализацией JPype вызывает некоторые вызовы JNI для каждого значения ячейки, что приводит к большим накладным расходам....

  1. Минимизируйте размер вашего набора результатов. Выполнять агрегации с использованием функций SQL.
  2. Попробуйте новейшую реализацию JPype1. Там были некоторые улучшения производительности.
  3. Переключите свою среду выполнения на Jython (JayDeBeApi работает и на Jython)
  4. Реализуйте запросы БД и извлечение данных непосредственно в Java и вызывайте логику с помощью JPype, но с интерфейсом, не возвращающим большой набор данных.
  5. Попробуйте улучшить код JPype и JayDeBeApi

Кстати: тема "... если 2 файла драйвера" немного вводит в заблуждение. Количество файлов драйверов определенно не связано с проблемами производительности.

Другие вопросы по тегам