Импорт данных Excel кажется случайным образом дает нулевые значения - PullRequest
2 голосов
/ 30 мая 2019

Использование служб SSIS для Visual Studio 2017 для импорта некоторых файлов Excel.

Я создал пакет с несколькими контейнерами цикла, которые обращаются к определенным пакетам для обработки некоторых файлов. У меня есть проблема с одним конкретным пакетом, выполняемым в том, что он, казалось бы, случайным образом решает, что данные для столбцов равны NULL на файл Excel. У меня сложилось впечатление, что это часть настроек реестра для TypeGuessRows (изначально изменено на 0, затем на 1000 в качестве теста), расположенного на

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel

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

Глядя на исходные файлы, все они имеют одинаковый тип данных. Я попытался изменить значение реестра TypeGuessRows и убедился, что свойство выходного столбца основано на строках, а не на числовых значениях. Строка подключения имеет IMEX=1

Ответы [ 2 ]

1 голос
/ 06 июня 2019

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

1 голос
/ 30 мая 2019

Эта проблема связана с поставщиком OLEDB, используемым для чтения файлов Excel: поскольку Excel не является базой данных, где каждый столбец имеет определенный тип данных, поставщик OLEDB пытается определить доминирующие типы данных, найденные в каждом столбце, и заменить все остальные данные. типы, которые не могут быть проанализированы с NULL.

В Интернете было найдено множество статей, обсуждающих эту проблему и предлагающих несколько обходных путей (ссылки перечислены ниже) .

Но после использования SSIS в течение многих лет, я могу сказать, что рекомендуется конвертировать файлы Excel в файлы CSV и читать их, используя компоненты плоских файлов .

Или, если у вас нет выбора для преобразования Excel в плоские файлы, вы можете заставить диспетчер соединений Excel игнорировать заголовки из первой строки, добавив HDR=NO к строке соединения и добавив IMEX=1, чтобы сообщить OLEDB-провайдер для указания типов данных из первой строки (который является заголовком - все строки большую часть времени) , в этом случае все столбцы импортируются как строки, и никакие значения не заменяются на NULL, но вы потеряете заголовки и дополнительная строка (строка заголовка импортируется).

Если вы не можете игнорировать строку заголовка, просто добавьте фиктивную строку, содержащую значения фиктивной строки (пример: aaa) после строки заголовка и добавьте IMEX=1 к строке подключения.

Полезные ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...