繁体   English   中英

从 sql 服务器中提取数百万条记录并使用 python 脚本加载到 oracle 数据库中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM