Разбор неструктурированного плоского файла в SSIS
У меня проблема с анализом неструктурированного текстового файла. Я пытался загрузить все в один столбец с типом данных DT_STR, но он выдает ошибку, так как в моем файле есть специальные символы, такие как '='. Я пытался с типом данных DT_TEXT, он работал хорошо. Но я не могу выполнять какие-либо операции над столбцом. Мне нужно удалить пустые строки в этом столбце, что можно сделать с помощью "условного разбиения". Но условие:
[column 0]!=""
не работает и выдает следующую ошибку:
НАЗВАНИЕ: Microsoft Visual Studio
Ошибка в задаче потока данных [Условное разделение [32]]: типы данных "DT_TEXT" и "DT_WSTR" несовместимы для двоичного оператора "!=". Типы операндов не могут быть неявно преобразованы в совместимые типы для операции. Чтобы выполнить эту операцию, один или оба операнда должны быть явно приведены с помощью оператора приведения.
Ошибка в задаче потока данных [Условное разделение [32]]: Попытка установить тип результата двоичной операции "[Столбец 0]!= """ Не удалась с кодом ошибки 0xC0047080.
Ошибка в задаче потока данных [Условное разбиение [32]]: Ошибка вычисления выражения "[Столбец 0]!= """ С кодом ошибки 0xC0047084. Выражение может иметь ошибки, такие как деление на ноль, которые не могут быть обнаружены во время разбора, или может быть ошибка нехватки памяти.
Ошибка в задаче потока данных [Условное разделение [32]]: выражение "[Столбец 0]! =" "В" Условном разделении. Выходы [Случай 1]"недопустимо.
Ошибка в задаче потока данных [Условное разделение [32]]: не удалось задать свойство "Выражение" для "Условное разделение. Выходы [Случай 1]".
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Исключение из HRESULT: 0xC0204006 (Microsoft.SqlServer.DTSPipelineWrap)
КНОПКИ:
Хорошо
Я делал синтаксический анализ с C# скрипт ранее. Но теперь мне нужно избегать кодирования. Любые идеи о том, как разобрать этот файл, приветствуются. Спасибо
1 ответ
Давайте разберем это
Типы данных "DT_TEXT" и "DT_WSTR" несовместимы для бинарного оператора "!="
У вас есть выражение [column 0]!=""
пустая строка ""
DT_WSTR и [column 0]
является типом данных DT_TEXT. Как указано в сообщении об ошибке, вы не можете проверить наличие неравных условий между этими типами.
Я бы посмотрел либо на преобразование столбца 0 в DT_WSTR, либо просто на проверку длины. LEN([column 0]) > 0
Способ SSIS
Большая проблема в том, что ваш файл не является "неструктурированным текстовым файлом". Это очень структурировано. Заголовки столбцов находятся в строке 3 (подсчет на основе 1), а данные начинаются с 5. Отсюда сами данные выглядят с фиксированной шириной.
Как вы справляетесь с этим в SSIS? Создайте диспетчер соединений с плоскими файлами типа Ragged Right. Укажите, что столбцов заголовков нет, и пропустите первые 4 строки / данные начинаются со строки 5. Создайте столбцы, указав ширину, и теперь ваш поток данных стал проще, и пакет будет работать быстрее.