2016-07-21 5 views
0

Я использую мастер импорта/экспорта SQL Server для загрузки нескольких больших (> 100 ГБ) плоских файлов на SQL Server. Эти файлы с разделителями, а не фиксированной ширины, но до сих пор постороннее косую Пробелы внутри колонок:SQL Server обрезает пробелы из плоского файла при импорте

100,VALUE   ,VALUE   ,VALUE 
1002,VALUE   ,VALUE   ,VALUE 

у меня нет контроля над тем, как создаются эти файлы. К сожалению, пробелы сохраняются в SQL после загрузки. Я заметил, что я могу добавить SET ANSI_PADDING OFF; в SQL-запрос, автоматически созданный мастером, но похоже, что этот параметр не рекомендуется. Есть ли лучшее средство для этого процесса? Стоит ли это делать?

Очистка файлов заранее невозможна, учитывая, что в общей сложности у меня есть около 10 ТБ данных для загрузки, и для выполнения кода потребуется несколько дней, возможно, недель. Я думаю, что запуск ALTER COLUMN ... LTRIM(RTRIM([column_name])) будет очень трудоемким.

+0

Сомневаюсь ANSI_PADDING изменит что-либо, если пространства на самом деле в файлах данных. Я думаю, что у вас нет другого выбора, кроме как предварительно очистить файлы, или обрезать пробелы с помощью 'update'. С 10TB это займет некоторое время, но я не вижу другого решения. – HoneyBadger

+0

Как ни странно, при тестировании он, похоже, удалял пробелы. – HoHo

ответ

1

Мастер создаст файл dtsx, если вы решите его сохранить. Используя SSDT, вы можете открыть этот пакет и добавить производный или преобразованный компонент для выполнения обрезки во время импорта данных.

Если вы не хотите использовать SSIS таким образом, вы можете выполнить обновление (напротив столбца alter), чтобы обрезать столбцы после импорта.

Если вы выбираете маршрут SSIS, вот удобный скрипт, который будет обрезать все поля: http://microsoft-ssis.blogspot.com/2010/12/do-something-for-all-columns-in-your.html

Смежные вопросы