Захват усечения в потоках служб SSIS - PullRequest
1 голос
/ 10 апреля 2019

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

Просто, чтобы дать вам некоторое представление, у нас есть упрощенный поток:

  1. Массовая вставка JSON в таблицу
  2. Создание посадочного вида сверху, извлекающего пути JSON в структуру вида
  3. Создание потока данных, который передает данные представления в рабочую таблицу
    1. Выделите любое усечение, которое происходит между посадкой в ​​производство.

Из-за способа, которым SQL Server обрабатывает JSON, поля имеют длину MAX, при создании представления мы устанавливаем длину поля в нашем CROSS APPLY, в качестве примера мы устанавливаем RECIPIENT_NAME в VARCHAR (10) в нашей рабочей таблице, однако, если бы в RECIPIENT_NAME была строка в файле JSON длиной 15, при создании этого представления мы бы не знали, что 15 было усечено до 10. Чтобы обойти это, мы устанавливаем длину RECIPIENT_NAME в 11 в применяется пересечение вида посадки, и когда строки перемещаются из места посадки в производство, RECIPIENT_NAME переходит от 11 к 10, и если в этот момент действительно было какое-либо усечение, SSIS выделил бы его, и я могу зафиксировать строку вниз по красной траектории ошибки.

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

В этот момент SSIS предупреждает, что при проверке целевой задачи может произойти усечение с желтым треугольником на целевой задаче:

[PRD_SYSTEM [189]] Предупреждение: усечение может произойти из-за вставки данных из столбца потока данных «RECIPIENT_NAME» длиной 11 в базу данных столбец "RECIPIENT_NAME" длиной 10.

При тестировании этого с некоторыми примерами данных я специально поместил строку с 20 символами в поле JSON для RECIPIENT_NAME. Это не помечается как проблема усечения и продолжается для заполнения рабочей таблицы, хотя и усеченной.

Однако, если я щелкну правой кнопкой мыши по источнику> Показать расширенный редактор> Свойства ввода и вывода> Вывод источника OLEDB и развернем Столбцы вывода и изменим параметр «Длина» в разделе «Свойства типа данных» для столбца RECIPIENT_NAME (первоначально 11), указав его значение. должно быть в рабочей таблице, 10 и затем перезапустить процесс, строка действительно будет перенаправлена ​​в таблицу ошибок!

Интересно, что предупреждение меняется, вместо желтого треугольника на исходной задаче:

[LND_VW_SYSTEM [81]] Предупреждение: усечение может произойти из-за извлечения данные из столбца базы данных «RECIPIENT_NAME» длиной от 11 до данных столбец потока "RECIPIENT_NAME" длиной 10.

Теперь я понял, что службы SSIS должны захватывать усечение в том виде, в котором я его установил, и не должны редактировать отдельные столбцы в расширенном редакторе - соответствует ли это предполагаемому поведению тому, что я описал, или я что-то пропустил?

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