У меня есть текстовый файл, содержащий около 300 миллионов строк. Я делаю объемную вставку, чтобы получить файл в промежуточную таблицу в sql. Затем я вырываю некоторые столбцы, чтобы нормализовать его, что работает отлично и быстро. Последний шаг, который я делаю, - переместить строки из промежуточной таблицы в конечную таблицу. В настоящее время я делаю инструкцию INSERT INTO SELECT, но она берет навсегда. Есть ли способ сделать объемную вставку из выделения?Bulk Insert From Select
ответ
Мастер импорта/экспорта, предоставляемый SQL Server Management Studio.
http://www.mssqltips.com/sqlservertutorial/203/simple-way-to-import-data-into-sql-server/
Он будет генерировать и запустить SSIS пакет для вас, который гораздо быстрее и лучше, чем заявление INSERT INTO SELECT.
Вы можете добавить параллельные подсказки в INSERT.
Смотрите еще несколько вариантов. Например, чтобы отключить любые индексы в целевой таблице http://www.dba-oracle.com/t_insert_tuning.htm
Самое главное, что вы действительно можете сделать эту таблицу ВНЕШНИЙ. Это будет особенно подходящим для вашей спецификации.
Пример Синтаксис:
create table xtern_empl_rpt
(empl_id varchar2(3),
last_name varchar2(50),
first_name varchar2(50),
ssn varchar2(9),
email_addr varchar2(100),
years_of_service number(2,0)
)
organization external
Таким образом, то в сочетании с параллельной подсказкой должны ускорить ваш DML.
insert /*+ parallel */ into tb_b t
select * from xtern_empl_rpt where <<whatever predicate required>>
Источник: http://www.orafaq.com/node/848
Вопрос должен иметь с меткой базы данных. Однако в нем упоминается «выбрать» для создания новой таблицы. В Oracle синтаксис «create table as». Я предполагаю, что база данных - это SQL Server, Sybase, Postgres или база данных, основанная на Postgres. –
Хорошая точка. Я предполагал, что Oracle. Виноват. Возможно, слово BULK заставило меня так думать. Однако ваша мысль об этом упоминает «выбрать в», я совсем не видел в исходном сообщении? – user2275460
- 1. SELECT INTO в паре с BULK INSERT
- 2. SELECT FROM OPENROWSET (BULK ...) смена специальных символов
- 3. awk create bulk MySQL insert from csv
- 4. SQL BULK INSERT FROM CSV из папки
- 5. MYSQL INSERT IN FROM FROM SELECT QUERY
- 6. SQL INSERT INTO FROM SELECT
- 7. SELECT FROM и INSERT INTO
- 8. hibernate createSQLQuery bulk insert
- 9. Bulk Insert вводит ошибку
- 10. HQL Bulk insert
- 11. TSQL - Bulk Insert
- 12. BULK INSERT в MYSQL
- 13. MS SQL Bulk Insert
- 14. SQL BULK INSERT ошибок
- 15. bulk-select в varbinary
- 16. SQL Server Bulk Insert
- 17. Bulk Insert Не работает
- 18. Laravel Raw Bulk insert
- 19. BULK синтаксис INSERT MYSQL
- 20. BULK INSERT a xlsx file
- 21. BULK INSERT с использованием XML
- 22. migrate bulk insert from sql server to oracle
- 23. couchbase PHP bulk insert
- 24. kohana bulk insert
- 25. BULK INSERT работает неправильно
- 26. Как работает BULK INSERT?
- 27. Scrapy bulk insert
- 28. EF Codefirst Bulk Insert
- 29. InnoDB Table Bulk Insert
- 30. Альтернатива SQL BULK INSERT
Я использовал SSIS для этого процесса. Было очень эффективно получать необработанные данные в базу данных, но один раз туда нужно было нормализовать. Узкое место перемещает данные из промежуточной таблицы в окончательную нормализованную таблицу. – user2120910
@ user2120910 SSIS эффективен во всех видах преобразований, но простейшее решение - если у вас уже есть оператор выбора с этапа, который вы можете использовать для вставки - просто используйте этот параметр Select as your SSIS source и передайте пакет этим данным без каких-либо преобразований. –
Я тоже пробовал, похоже, дает те же результаты. Время вставки составляет около 45 минут для 30 миллионов строк. Я смог сократить его с 51 минуты, отключив индексы перед вставкой и восстановив их впоследствии. Возможно, это так быстро, как это получается? – user2120910