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 для каждого значения ячейки, что приводит к большим накладным расходам....
- Минимизируйте размер вашего набора результатов. Выполнять агрегации с использованием функций SQL.
- Попробуйте новейшую реализацию JPype1. Там были некоторые улучшения производительности.
- Переключите свою среду выполнения на Jython (JayDeBeApi работает и на Jython)
- Реализуйте запросы БД и извлечение данных непосредственно в Java и вызывайте логику с помощью JPype, но с интерфейсом, не возвращающим большой набор данных.
- Попробуйте улучшить код JPype и JayDeBeApi
Кстати: тема "... если 2 файла драйвера" немного вводит в заблуждение. Количество файлов драйверов определенно не связано с проблемами производительности.