使用Python从Oracle读取大量数据的最快方法

时间:2018-06-13 14:05:56

标签: python oracle postgresql greenplum bulk-load

我需要从Oracle(大约100万和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的连接有时超时或被DBA杀死而且看起来无缝,并且它有时会成功运行。鉴于表格大小,似乎不太可靠。我需要这个作为数据帧,因为我需要稍后使用复制方法将其加载到Greenplum中。

1 个答案:

答案 0 :(得分:1)

Outsourcer是专门为了做你想做的事而创建的,但它是用Java编写的。

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