загрузка огромных данных XLS в Oracle с использованием python

У меня есть 3-х миллионный XLS-файл записи, который мне нужно сбросить в Oracle 12C DB (прямой дамп) с помощью python 2.7.

Я использую пакет Cx_Oracle python для установления соединения с Oracle, но чтение и сброс XLS (с использованием openpyxl pckg) происходит крайне медленно, а производительность ухудшается для тысяч / миллионов записей.

С точки зрения сценариев использовались два способа –

  1. Я попробовал объемную загрузку, прочитав все значения в массиве и затем сбросив ее с помощью подготовки курсора (с переменными привязки) и fetchmany курсора. Это не работает с огромными данными.

  2. Итеративная загрузка данных по мере их поступления. Даже в этом случае возникают проблемы с производительностью.

Какие варианты и методы / пакеты можно развернуть в качестве наилучшей практики для загрузки этого объема данных из XLS в Oracle DB? Целесообразно ли загружать этот объем данных с помощью скриптов или я должен использовать инструмент ETL? На данный момент у меня есть только опция с помощью скриптов python, поэтому, пожалуйста, ответьте на предыдущие

Если вы можете экспортировать excel fila в CSV, тогда вам нужно всего лишь использовать sqlldr для загрузки файла в db

Excel также поставляется с поддержкой ODBC, поэтому вы можете перекачивать прямо из Excel в Oracle, если у вас есть драйверы. Тем не менее, все, что связано с преобразованием большого объема данных в память (из любого Excel, используемого внутри), а затем передача его в БД, вероятно, будет менее производительным, чем специализированная массовая операция, которая может быть оптимизирована для использования меньшей памяти. Переход через Python просто добавляет еще один слой в задачу (от Excel до Python до Oracle), хотя можно было бы установить это для использования потоков.

В основном для больших объемов данных любой язык будет подвергаться стрессу при вводе-выводе, кроме C. Лучший способ – использовать собственные инструменты / утилиты, предоставляемые поставщиком БД. Для оракула правильная подстановка – SQL Loader.

См. Эту ссылку для быстрого руководства http://www.thegeekstuff.com/2012/06/oracle-sqlldr/

Здесь вы идете … Пример кода, который запускает SQL Loader, и возвращает вас с кодом возврата, выходом и ошибкой

 sql_ld_command = ['sqlldr ', 'uid/passwd', 'CONTROL=', 'your_ctrl_file_path', 'DATA=', 'your_data_file_path'] sql_ldr_proc = subprocess.Popen(sql_ld_command, stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = sql_ldr_proc.communicate() retn_code = sql_ldr_proc.wait()