Условное разбиение на основе переменной массива - PullRequest
2 голосов
/ 26 ноября 2011

Мне нужно что-то вроде оператора T-SQL IN для фильтрации записей в условном разбиении на основе переменной массива (или чего-то подобного)

Мне нужен список элементов, по которым можно фильтровать столбец.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

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

Мой длинный анализ находится в моем блоге: Список фильтров в SSIS

Условное разделение

Если вы можете преобразовать свой список значений в строку с разделителями, то вы можете использовать FINDSTRING и текущее значение, чтобы определить, находится ли он в списке.Это обеспечило лучшую пропускную способность для моего сценария тестирования.(FINDSTRING(@[User::MyListStr], [MyColumn],1)) > 0

Задача сценария

Я предполагал, что использование списка в задаче сценария для определения членства обеспечит наилучшую производительность, но я ошибся.Row.IsInList = MyListObj.Contains(Row.MyColumn);

Диспетчер соединений просмотра / кэширования

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

Заключение

Для этой проблемной области подход FINDSTRING был наиболее эффективным, со значительным отрывом.Три других подхода последовательно усредняли пропускную способность в пределах 7 строк на миллисекунду друг от друга.Мне было интересно, что стандартное отклонение подхода FINDSTRING сильно колебалось.Несмотря на то, что этот блок старше и медленнее, во время выполнения пакета не было значительного количества действий.

0 голосов
/ 28 ноября 2011

Нет оператора IN в Операторах выражений SSIS . И нет аналогичного оператора. Так как такого оператора нет, Вы не можете сделать это с помощью встроенных выражений и встроенного условного разбиения. Но Вы можете сделать одно из следующих действий:

  • использовать Преобразование сценариев, чтобы проверить, есть ли в конкретном столбце то, что находится в массиве переменных, и добавить дополнительный столбец (флаг) со значением 1, если он содержит, 0, если нет; затем используйте условное разбиение для этого флага, добавленного в преобразование сценария, или
  • лучше поместить переменные в таблицу базы данных, а затем использовать Lookup или Merge Join, чтобы проверить, существует ли строка
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...