Источник данных SSIS Excel - возможно ли переопределить типы данных столбцов?
Когда в SSIS используется источник данных excel, типы данных каждого отдельного столбца выводятся из данных в столбцах. Можно ли переопределить это поведение?
В идеале мы хотели бы, чтобы каждый столбец, доставленный из источника excel, был строковым типом данных, так что проверка данных может выполняться с данными, полученными от источника, на более позднем этапе потока данных.
В настоящее время вкладку вывода ошибок можно использовать для игнорирования ошибок преобразования - данные, о которых идет речь, являются нулевыми, и пакет будет продолжать выполняться. Однако мы хотим знать, какие исходные данные были такими, чтобы соответствующее сообщение об ошибке могло быть сгенерировано для этой строки.
Ответы
Ответ 1
Да, вы можете. Просто зайдите в список выходных столбцов в источнике Excel и задайте тип для каждого из столбцов.
Чтобы перейти к списку входных столбцов, щелкните правой кнопкой мыши на источнике Excel, выберите "Показать расширенный редактор", щелкните вкладку "Свойства ввода и вывода".
Потенциально лучшим решением является использование производного компонента столбца, где вы можете фактически построить "новые" столбцы для каждого столбца в Excel. Это имеет преимущества
- У вас больше контроля над тем, что вы конвертируете.
- Вы можете ввести правила, которые управляют изменением (т.е. если null дает мне пустую строку, но если есть данные, дайте мне данные в виде строки)
- Ваш источник данных не привязан непосредственно к остальной части процесса (т.е. вы можете изменить источник и единственное место, которое вам потребуется для выполнения работы, в производном столбце)
Ответ 2
Согласно этот пост в блоге, проблема в том, что драйвер SSIS Excel определяет тип данных для каждого столбца на основе значений чтения первого 8 строк:
- Если верхние 8 записей содержат одинаковое количество числовых и символьных типов, то приоритет будет числовым
- Если большинство записей из 8-го числа являются числовыми, тогда он присваивает тип данных как числовые и все значения символов считываются как NULL
- Если большинство из 8 основных записей имеют тип символа, то он присваивает тип данных как строку, и все числовые значения считываются как Значения NULL
В сообщении описываются две вещи, которые вы можете сделать, чтобы исправить это:
- Сначала добавьте
IMEX=1
в конец строки подключения драйвера Excel. Это позволит Excel читать значения как Unicode. Однако этого недостаточно, если данные в первых 8 строках являются числовыми.
- В реестре измените значение для
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Nod\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows
на 0. Это гарантирует, что драйвер посмотрит на все строки, чтобы определить тип данных для столбца.
Ответ 3
Если ваш файл Excel содержит число в соответствующем столбце в первой строке данных, кажется, что механизм SSIS будет reset тип для числового типа. Он продолжал перезагружать мой. Я зашел в свой файл Excel и изменил числа на "Числа, сохраненные как текст", поставив перед ними одну цитату. Теперь они читаются как текст.
Я также заметил, что SSIS использует первую строку для IGNORE, о которой указал программист, - это фактический тип данных (я даже сказал Excel форматировать весь столбец как ТЕКСТ, но SSIS все еще использовал данные, которые были связкой цифр) и reset. Как только я исправил это, поставив одну кавычку в моем файле Excel перед номером в первой строке данных, я подумал, что все будет правильно, но нет, есть дополнительная работа.
Фактически, несмотря на то, что в столбце внешнего источника данных SSIS теперь есть тип DT_WSTR, он все равно будет читать 43567192 как 4.35671E + 007. Поэтому вам нужно вернуться в ваш файл Excel и поставить одинарные кавычки перед всеми номерами.
Довольно LAME, Microsoft! Но вот ваше решение. Я не знаю, что делать, если файл Excel не находится под вашим контролем.
Ответ 4
Источник Excel - это SSIS, который ведет себя безумно. SSIS определяет тип данных в отдельном столбце, читая первые 10 строк. Следовательно, проблема. Если у вас есть текстовый столбец с нулевыми значениями в первых десяти кодах, SSIS принимает тип данных как Int. С небольшим количеством борьбы, это обходное решение
-
Вставьте фиктивную строку (предпочтительно первую строку) на листе. Я предпочитаю делать это с помощью задачи Script, вы можете использовать некоторую услугу для предварительной обработки файла до того, как SSIS подключится к нему
-
С дуаммической строкой вы уверены, что типы данных будут установлены так, как вам нужно.
-
Прочитайте данные с использованием источника Excel и отфильтруйте фиктивную строку, прежде чем принимать ее для дальнейшей обработки.
Я знаю, что это немного потрепанный, но он работает:)
Ответ 5
Я мог бы исправить эту проблему. при создании пакета SSIS я вручную изменил конкретный столбец на текст (Откройте файл excel, выберите столбец, щелкните правой кнопкой мыши по столбцу, выберите ячейки формата, на вкладке с цифрами выберите "Текст" и сохраните Excel).
Теперь создайте пакет SSIS и протестируйте его. Оно работает. Теперь попробуйте использовать файл excel, где этот столбец не был установлен как текст.
Это сработало для меня, и я смог успешно выполнить пакет.
Ответ 6
Я искал решение для подобной проблемы, но ничего не нашел в Интернете. Хотя большинство найденных решений работают во время разработки, они не работают, когда вы хотите автоматизировать свой пакет SSIS.
Я решил проблему и запустил ее, изменив свойства "Excel Source". По умолчанию для свойства AccessMode
установлено значение OpenRowSet
. Если вы измените его на SQL Command
, вы можете написать свой собственный SQL, чтобы преобразовать любой столбец, как вы пожелаете.
Для меня SSIS обрабатывал столбец NDCCode
как float, но мне он был нужен как строка, поэтому я использовал следующий SQL:
Select [Site], Cstr([NDCCode]) as NDCCode From [Sheet1$]
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Ответ 7
Мне не удалось реализовать решение здесь - я мог следовать инструкциям, но он только дал новые ошибки.
Я решил проблемы с конверсией, используя объект Data Conversion. Это можно найти в панели инструментов SSIS в разделе "Преобразования потока данных". Я поместил Преобразование данных между моим источником Excel и OLE DB Destination, связал Excel с данными C, Data C с OLE DB, дважды щелкнул Data C, чтобы открыть список столбцов данных. Дал столбец проблемы новый псевдоним и изменил столбец "Тип данных".
Наконец, в сопоставлениях назначения OLE DB используйте имя столбца псевдонима, а не имя исходного столбца Excel. Выполнение задания.
Ответ 8
Вы можете использовать компонент Data Conversion для преобразования в нужные типы данных.