Подтвердить что ты не робот

Источник данных SSIS Excel - возможно ли переопределить типы данных столбцов?

Когда в SSIS используется источник данных excel, типы данных каждого отдельного столбца выводятся из данных в столбцах. Можно ли переопределить это поведение?

В идеале мы хотели бы, чтобы каждый столбец, доставленный из источника excel, был строковым типом данных, так что проверка данных может выполняться с данными, полученными от источника, на более позднем этапе потока данных.

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

4b9b3361

Ответ 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 для преобразования в нужные типы данных.