Самый быстрый способ чтения огромного объема данных в виде фрейма данных из Oracle с использованием Python - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно прочитать огромное количество данных из Oracle (около 1 миллиона и 450 столбцов) и выполнить большую загрузку в Greenplum.Я использую следующий подход:

import pandas as pd
from psycopg2 import *
from sqlalchemy import create_engine
import cx_Oracle
import sqlalchemy
import psycopg2 as pg
import io

engineor = create_engine('oracle+cx_oracle://xxxx:xxxx@xxxxx:xxxx/?service_name=xxxxx')
sql = "select * from xxxxxx"
enginegp = create_engine('xxxxx@xxxxx:xxxx/xxxx')
connection = enginegp.raw_connection()
output = io.StringIO()
for df in pd.read_sql(sql, engineor, chunksize=10000):
df.to_csv(output, header=False, index=False,mode='a')
output.seek(0)
cur = connection.cursor()
cur.copy_expert("COPY test FROM STDIN WITH CSV NULL '' ", output)
connection.commit()
cur.close()

Я читаю данные кусками:

for df in pd.read_sql(sql, engineor, chunksize=10000):
    df.to_csv(output, header=False, index=False,mode='a')

Есть ли более быстрый и простой способ чтения больших таблиц из Oracle в качестве блока данных?Этот метод просто работает, и не выглядит беспроблемным, так как время от времени соединение с Oracle прерывается или прерывается администратором базы данных, а иногда он успешно работает.Кажется менее надежным, учитывая размер таблицы.Мне нужно это как фрейм данных, так как позже мне нужно загрузить его в Greenplum, используя метод копирования.

1 Ответ

0 голосов
/ 13 июня 2018

Аутсорсер был специально создан, чтобы делать то, что вы пытаетесь сделать, но он был написан на Java.

http://www.pivotalguru.com/?page_id=20

...