【问题标题】:Faster data upload without BULK INSERT or OPENROWSET无需 BULK INSERT 或 OPENROWSET 即可更快地上传数据
【发布时间】:2018-01-05 23:34:34
【问题描述】:

我正在使用以下 sn-p 将数据从 CSV 上传到位于 Amazon EC2 上的 SQL Server 实例中的表中>。根据我的阅读,Amazon EC2 似乎不支持BULK INSERT 操作或OPENROWSET,因此上传速度明显不足。

我的问题,有没有比这更快的上传方式?

with open(file_path, 'r') as f:
            reader = csv.reader(f)
            columns = next(reader)
            query = 'insert into myTable({0}) values ({1})'
            query = query.format(','.join(columns), ','.join('?' * len(columns)))
            cursor = connection.cursor()
            for data in reader:
                cursor.execute(query, data)
            cursor.commit()
        cursor.close()
        connection.close()

【问题讨论】:

    标签: sql-server python-3.x csv amazon-ec2


    【解决方案1】:

    当然。您正在分别添加每一行。在一次插入中提供多行以显着提高速度。我确信插入的大小是有限制的……一次大约 100 或 1000 行应该是一个不错的起点,因为它们不是异常大的行。

    为此,您需要将值列表累积到一个数组中,然后在数组达到大小限制时使用插入清除数据。

    确保在读取所有错误后再次刷新,因为 csv 可能没有多少行可以被您选择的大小等分。

    【讨论】:

    • 有趣的想法,我害怕重载执行命令以防万一。但我会有一个小提琴,看看我能做什么。
    • 有趣的是,上传 143000 行每行 32 列花了大约 40 分钟! :D
    • 我希望能够在不到数百秒或数百秒的范围内添加这种音量。
    • 好吧,过了一段时间,我已经从链中完全消除了 CSV,它提高了性能,但我仍然一次插入 1 行。我今天要重写插入查询,看看我能不能按照你的建议做。谢谢你的主意! :)
    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 2012-07-15
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多