Импорт несуществующих строк с использованием BCP / BULK IMPORT (SQL Server) - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь загрузить файлы в базу данных SQL Server.Я знаком с использованием массового импорта и создания файлов форматов с использованием BCP для реорганизации столбцовТем не менее, я пытаюсь сделать 2 новых вещи, которые я никогда не пробовал раньше.

Мне дали множество отдельных CSV для загрузки в базу данных, отдельные файлы, каждый из которых представляет день в течениенесколько лет.Я хотел бы иметь возможность использовать утилиту для их загрузки, но они имеют различное количество столбцов (и, конечно, это отдельные файлы!).Я думал о создании загрузочной хранимой процедуры и переборе файлов с помощью PowerShell, но даже тогда я не могу найти хороший способ обработки различного числа столбцов.

Столбцы согласованы,просто к файлам добавлялись столбцы с годами.Я хотел бы иметь возможность импортировать файлы с меньшим количеством столбцов, так как несуществующие столбцы будут иметь нулевые значения.Поддерживает ли это BCP?

Я бы не хотел выяснять, когда каждый столбец был добавлен, и писать разные хранимые процедуры / сценарии для каждой группы дат (это единственное решение, которое я могу придумать!).Есть предложения?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Для тех, кто следует -

Я решил эту загадку, используя Powershell для объединения всех текстовых файлов в один большой текстовый файл (потому что мы все равно загружали их все в одну таблицу БД).Получив один файл для загрузки, я создал в SSIS программу соединения Flat-File с OLE-DB и использовал ее задачи «Преобразование данных» и «Производный столбец» для преобразования значений в требуемые значения для указанных полей.Служба SSIS была очень быстрым способом загрузки данных после упаковки, проходя миллионы строк за считанные секунды.Некоторые соображения, если вы решите пойти по этому пути:

Если у вас есть значительное количество текстовых файлов для загрузки, и вы решили объединить их, знайте, что файл может стать слишком большим для непосредственного чтения.В SSIS есть инструменты для просмотра данных, которые могут быть полезны для устранения неполадок, и они позволят вам просматривать содержимое файла независимо от его размера (так как вы будете читать его по 1000 строк за раз).Однако, очевидно, это серьезно повлияет на вашу скорость, поэтому, вероятно, будет хорошей идеей сначала протестировать ваш скрипт, а затем поработать над пакетом служб SSIS.

Удачи!

0 голосов
/ 10 октября 2018

Единственный способ справиться с этим - использовать процедурное кодирование.Вы можете написать либо консольное приложение, либо пакет служб SSIS с задачей скрипта.В любом случае, вам нужно было бы пройтись по файлам, и внутри цикла проверить содержимое, чтобы увидеть, какие столбцы отсутствуют, а затем импортировать файл, предоставив некоторое жестко запрограммированное значение для всех отсутствующих столбцов.

BCP может обрабатывать файлы с отсутствующими столбцами, используя файл формата, но не может делать это динамически (заранее не зная, какие столбцы отсутствуют).

...