Ошибки служб SSIS для простого потока данных CSV

Извините, что омрачил ваш день своими проблемами, но SSIS сломала меня! Я новичок в SSIS, и я просто неправильно его понимаю.

Для справки: у меня есть несколько версий базового пакета, включающего контейнер цикла по каждому элементу и поток данных с несколькими производными столбцами, который импортирует файлы CSV в промежуточную таблицу SQL Server. Это очень просто и включает в себя задачу «Выполнение SQL» и «Перемещение файла», но они работают нормально. Проблемы связаны с циклом Foreach и потоком данных.

У меня есть одна версия этого пакета (назовем ее «А»), которая работает нормально. Он будет обрабатывать несколько файлов в папке, вставлять записи в промежуточную таблицу, правильно выполнять операторы SQL и перемещать файлы в архив. Все казалось прекрасным, пока я тщательно не проверил процесс. Оказывается, он дублировал данные из одного файла и никогда не импортировал данные из второго исходного файла! Тем не менее, второй раунд данных включал имя исходного файла (через производный столбец) второго файла (но данные из первого). Таким образом, казалось, что я успешно обработал ОБА файла, пока не посмотрел на фактические данные и не увидел, что ни одно из значений из второго исходного файла никогда не было записано в промежуточную таблицу.

Как только я обнаружил это, я понял, что проблема была в цикле Foreach и в том, как я устанавливаю различные переменные пути и имени файла. Итак, я решил попробовать сделать новую версию пакета. Я начал с копирования пакета A и создал пакет B. В B я удалил диспетчер исходных соединений и создал новый диспетчер соединений вместе со всеми новыми переменными файла и пути. Затем я попытался очистить/исправить/заменить различные элементы в цикле Data Flow и Foreach. В процессе я обнаружил, что расширенные сопоставления из A, которые работают с DID, практически все настроены как строки (даже столбцы «Валюта» и «Дата»). Это казалось неправильным, поэтому я изменил каждый столбец исходных денег, изменив тип данных на «Валюта», и изменил каждый столбец, связанный с датой, на тип данных «Дата».

За этим последовали десятки и десятки ошибок, и я не могу запустить пакет B. Я даже изменил все типы данных B обратно на String (отражая настройку в пакете A, который DID работает). Но радости все равно нет.

Это заставляет меня задать несколько вопросов тем из вас, кто умнее меня:

1) Почему службы SSIS не могут интерпретировать исходные данные CSV, используя правильный тип данных? т.е. почему мне нужно установить каждый столбец ввода как STRING, когда некоторые столбцы явно и полностью числовые, валютные или даты? (Да, исходные CSV-файлы ОЧЕНЬ чистые — в большинстве из них даже нет NULL)

а. Когда я изменяю расширенное сопоставление для столбца источника, связанного с датой, на дату, я получаю всегда присутствующее сообщение об ошибке: [Источник плоского файла [30]] Ошибка: преобразование данных не удалось. Преобразование данных для столбца «Дата расчета» вернуло значение состояния 2 и текст состояния «Не удалось преобразовать значение из-за возможной потери данных».

2) Когда я сбрасываю типы данных обратно на String в пакете B, я все еще получаю ошибки — обычно ошибки усечения (и да — я скорректировал длину до 250 в одном из этих столбцов). а. Сообщение об ошибке: «Не удалось преобразовать значение из-за возможной потери данных». б. Когда я сбрасываю сопоставления, чтобы игнорировать столбец (в качестве теста), он выдает аналогичную ошибку в следующем столбце.

3) Есть идеи, почему пакет А может дублировать данные файла и не обрабатывать второй файл, но при этом не выдавать ошибок и перемещать оба файла в архив?

4) Почему в средстве просмотра данных появляются ошибки синтаксического анализа (оно показывает данные в неправильных столбцах), но когда вы используете функцию копирования данных в средстве просмотра данных и вставляете их в Excel, все данные идеально совпадают?

5) Существуют ли какие-либо советы и рекомендации, которые должен понять начинающий пользователь SSIS и которые могут быть не очевидны в документации и при поиске статей в Интернете, а также на этом сайте?

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

СПАСИБО за любую информацию.

ДГП


person DGP    schedule 26.10.2016    source источник
comment
Все ли файлы в папке имеют одни и те же столбцы с одинаковыми типами данных в одном и том же порядке?   -  person Tab Alleman    schedule 26.10.2016


Ответы (2)


Ничего себе, похоже, у вас много проблем с SSIS ... Я думаю, что причина извлечения одного и того же файла связана с тем, как определены ваши «сопоставления переменных».

Вы смотрели и следовали этому руководству:

https://www.simple-talk.com/sql/ssis/ssis-basics-introduction-the-foreach-loop-container/

Надеюсь это поможет.

Шахин

person Shaheen K    schedule 26.10.2016

Спасибо, Таб и Шахин,

Всем новичкам SSIS: пожалуйста, учитесь на моих ошибках!

Похоже, что моя проблема на самом деле заключалась в том, как я определил ОПРЕДЕЛИТЕЛЬ ТЕКСТА в диспетчере соединений. Я ввел «», и это вызывало проблемы с анализом моих столбцов. Из-за проблем с синтаксическим анализом в некоторых столбцах появлялись неожиданные значения, что приводило к ошибкам в пакете.

Когда я попытался изменить квалификатор текста только на ОДНУ двойную кавычку - " - все сработало!

Как я уже упоминал — и как подозревал Шахин — мои первоначальные проблемы с дублирующей обработкой, вероятно, были связаны с тем, как я настроил цикл foreach. Я уже исправил это, бит все еще получал ошибки, пока я не исправил Text Qualifier.

Я проверял его всего несколько раз, но похоже, что проблема была в нем.

Спасибо за вклад.

ДГП

person DGP    schedule 27.10.2016
comment
Урок, который нужно усвоить: постарайтесь не перегружаться. При устранении неполадок вернитесь к основам — создайте совершенно новый пакет, который делает только одну вещь, и убедитесь, что он работает. SSIS может быть ошеломляющим из-за своих подробных ошибок, и он чрезвычайно требователен к метаданным и типам данных, но на то есть веская причина — он избавляет от многих проблем в дальнейшем. - person Nick.McDermaid; 28.10.2016