Каков оптимальный способ чтения огромных данных из таблицы оракула и выборки во фрейм данных - PullRequest
1 голос
/ 17 апреля 2019

Я собираюсь прочитать данные из таблицы в моей базе данных оракула и извлечь их во фрейме данных в Python. Таблица содержит 22 миллиона записей, и использование fetchall () занимает много времени без какого-либо результата. (запрос выполняется в oracle за 1 секунду)

Я пробовал использовать нарезку данных с помощью приведенного ниже кода, но все же это неэффективно.

import cx_Oracle
import pandas as pd
from pandas import DataFrame
connect_serv = cx_Oracle.connect(user='', password='', dsn='')
cur = connect_serv.cursor()  

table_row_count=22242387;
batch_size=100000;

sql="""select t.* from (select a.*,ROW_NUMBER() OVER (ORDER BY column1 ) as row_num  from  table1 a) T where t.row_num between :LOWER_BOUND and :UPPER_BOUND"""

data=[]
for lower_bound in range (0,table_row_count,batch_size):
    cur.execute(sql,{'LOWER_BOUND':lower_bound,
                     'UPPER_BOUND':lower_bound + batch_size - 1})
    for row in cur.fetchall():
        data.append(row)

Я хотел бы знать, что является правильным решением для извлечения такого количества данных в Python в разумные сроки.

1 Ответ

0 голосов
/ 17 апреля 2019

Это не медленный запрос, а сложение данных с помощью data.append(row).

Попробуйте использовать

data.extend(cur.fetchall())

для начала.Это позволит избежать повторного добавления в одну строку, а добавить весь набор строк, начиная с fetchall сразу.

...