[英]extract millions of records from sql server and load into oracle database using python script
我正在从 sql 服务器中提取数百万条数据,并使用 python 插入 oracle 数据库。 在 1 秒内将 1 条记录插入 oracle 表中。插入需要几个小时。 最快的加载方法是什么? 我的代码如下:
def insert_data(conn,cursor,query,data,batch_size = 10000):
recs = []
count = 1
for rec in data:
recs.append(rec)
if count % batch_size == 0:
cursor.executemany(query, recs,batcherrors=True)
conn.commit()`enter code here`
recs = []
count = count +1
cursor.executemany(query, recs,batcherrors=True)
conn.commit()
也许你买不到 3d 派对 ETL 工具,但你当然可以在 oracle 数据库中用 PL/SQL 编写程序。
首先,为 ODBC 安装 oracle 透明网关。 不涉及许可费用。 其次,在 oracl db 中,创建一个 db 链接,通过网关引用 MSSQL 数据库。 第三,编写一个 PL/SQL 过程,通过 db 链接从 MSSQL 数据库中提取数据。
我曾经遇到过与您类似的问题。 开发人员使用 SSIS 将大约一百万行从 mssql 复制到 oracle。 耗时4个多小时。 我对他的进程进行了跟踪,发现它正在逐行、缓慢地复制。 我花了不到 30 分钟写了一个 pl/sql proc 来复制数据,不到 4 分钟就完成了。
我在这里给出了整个设置和过程的高级视图:
编辑:认为您可能想看看实际程序有多简单:
create or replace my_load_proc
begin
insert into my_oracle_table (col_a,
col_b,
col_c)
select sql_col_a,
sql_col_b,
sql_col_c
from mssql_tbl@mssql_link;
end;
我的实际程序有更多内容,处理运行时日志记录,通过电子邮件发送完成通知等。但以上是它的“胆量”,将数据从 mssql 拉入 oracle。
那么您可能想使用 pandas 或 pyspark 或 python 上可用的其他大数据框架,那里有很多示例,这里是如何从Microsoft Docs加载数据:
import pyodbc
import pandas as pd
import cx_Oracle
server = 'servername'
database = 'AdventureWorks'
username = 'yourusername'
password = 'databasename'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
query = "SELECT [CountryRegionCode], [Name] FROM Person.CountryRegion;"
df = pd.read_sql(query, cnxn)
# you do data manipulation that is needed here
# then insert data into oracle
conn = create_engine('oracle+cx_oracle://xxxxxx')
df.to_sql(table_name, conn, index=False, if_exists="replace")
类似的东西,(这可能不是 100% 有效,但只是为了让你知道如何做到这一点)
完全可以使用 SQL 服务器集成服务,我猜是最佳实践。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.