Ошибки SSIS для простого потока данных CSV
Извините, что омрачил ваш день моими неприятностями, но SSIS сломал меня! Я новичок в SSIS, и мне кажется, что я неправильно понимаю это.
Для справки: у меня есть несколько версий базового пакета, который включает контейнер цикла по каждому элементу и поток данных с несколькими производными столбцами, который импортирует файлы CSV в промежуточную таблицу SQL Server. Это очень просто и включает в себя задачу "Выполнение SQL" и "Перемещение файла", но они отлично работают. Проблемы связаны с циклом Foreach и потоком данных.
У меня есть одна версия этого пакета (назовем его "А"), которая, кажется, работает нормально. Он будет обрабатывать несколько файлов в папке, вставлять записи в промежуточную таблицу, правильно выполнять операторы SQL и перемещать файлы в архив. Все казалось хорошо, пока я тщательно не проверил процесс. Оказывается, он дублировал данные из одного файла и никогда не импортировал данные из второго исходного файла! Тем не менее, второй / двойной цикл данных включал в себя имя исходного файла (через производный столбец) второго файла (но данные из первого). Похоже, я успешно обработал ОБА файлы, пока не посмотрел на фактические данные и не увидел, что ни одно из значений из второго исходного файла никогда не было записано в промежуточную таблицу.
Когда я обнаружил это, я понял, что проблема заключалась в цикле Foreach и в том, как я настраивал различные переменные пути и имени файла. Итак, я решил попробовать сделать новую версию пакета. Я начал с копирования пакета A и создал пакет B. В B я удалил Диспетчер исходных соединений и создал новый Диспетчер соединений вместе со всеми новыми переменными file & path. Затем я попытался очистить / исправить / заменить различные элементы в моем потоке данных и цикле Foreach. В процессе, я обнаружил, что расширенные сопоставления из A - которые DID работают - были практически все настроены как String (даже столбцы Currency и Date). Это не выглядело правильно, поэтому я изменил каждый исходный столбец денег, изменив тип данных Валюта, и изменил каждый связанный с датой столбец на тип данных Дата.
За этим последовали десятки и десятки ошибок, и я не могу запустить пакет B. Я даже изменил все типы данных B обратно на String (зеркально отображая настройки в пакете A, которые работают DID). Но все равно нет радости.
Это заставляет меня задать несколько вопросов тем из вас, кто умнее меня:
1) Почему службы SSIS не могут интерпретировать данные Source CSV, используя правильный тип данных? Т.е. зачем мне устанавливать каждый столбец Input как STRING, если некоторые столбцы имеют четкие и полностью числовые значения, валюты или даты? (Да, исходные CSV-файлы ОЧЕНЬ чисты - у большинства даже нет NULL)
а. Когда я изменяю Расширенное сопоставление для столбца Источник, связанный с датой, на Дата, я получаю постоянное сообщение об ошибке: [Источник плоского файла [30]] Ошибка: преобразование данных не выполнено. Преобразование данных для столбца "Дата расчета" вернуло значение состояния 2 и текст состояния "Значение не удалось преобразовать из-за потенциальной потери данных".
2) Когда я сбрасываю типы данных обратно в строку в пакете B, я все равно получаю ошибки - обычно ошибки усечения (и да - я установил длину до 250 в одном из этих столбцов). а. Сообщение об ошибке: "Значение не может быть преобразовано из-за потенциальной потери данных". б. Когда я сбрасываю сопоставления, чтобы игнорировать столбец (как тест), он выдает похожую ошибку в следующем столбце.
3) Есть идеи, почему пакет А будет дублировать данные файла, а не обрабатывать второй файл, но при этом не выдавать ошибок и перемещать их в архив?
4) Почему в средстве просмотра данных появляются ошибки синтаксического анализа (данные отображаются в неправильных столбцах), но когда вы используете функцию копирования данных в средстве просмотра данных и вставляете ее в Excel, все строки данных выстраиваются идеально?
5) Существуют ли какие-либо советы и хитрости, которые должен понять пользователь SSIS-новичка, и которые могут быть не очевидны из документации и поиска в веб-статьях, а также на этом сайте?
Я могу предоставить дополнительную информацию, если они помогут, но эти пакеты действительно очень просты и не должны вызывать у меня много разочарований.
СПАСИБО за любые идеи.
ДГП
2 ответа
Спасибо Tab & Shaheen,
Всем новичкам в SSIS - учитесь на моих ошибках!
Похоже, что моя проблема была в том, как я определил КВАЛИФЕР ТЕКСТА в диспетчере соединений. Я вошел "", и это вызывало проблемы с тем, как мои колонки анализировались. Проблемы синтаксического анализа привели к появлению неожиданных значений в некоторых столбцах, что привело к ошибкам в пакете.
Когда я попытался изменить Text Qualifier только на ОДНУ двойную кавычку - " - все сработало!
Как я уже упоминал - и, как подозревал Шахин, - мои первые проблемы с обработкой дубликатов, вероятно, были связаны с тем, как я настроил цикл foreach. Я уже исправил это, бит все еще получал ошибки, пока я не исправил Text Qualifier.
Я проверял это только несколько раз, но похоже, что это была проблема.
Спасибо за вклад.
ДГП
Ух ты, похоже, у тебя много проблем с ssis... Я думаю, что причина извлечения того же файла кроется в том, как определяются твои "переменные отображения".
Вы смотрели и следовали этому руководству:
https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/
Надеюсь это поможет.
Шахин