Как выполнить слияние, используя оператор LIKE (или эквивалентный) в SSIS

Я давно искал этот ответ и до сих пор не нашел решения. Я создаю задачу потока данных в SSIS, и мне нужно объединить 2 таблицы в разных источниках данных с помощью оператора LIKE, или FINDSTRING, или CONTAINS и т. Д.

Вот как выглядят мои данные:

Таблица 1:: Источник данных 1

| PersonName    |      Address       | 
      Josh         LA, California US   
      Ted          SF, California US
      Beth         NYC, New York US

Таблица 2:: Источник данных 2

| StateID  |  StateName  | 
      01      California   
      02      New York

Мне нужно присоединиться к Table2 на Table1, где Table1.Address LIKE "%" + Table2.StateName "%". Мой желаемый конечный результат заключается в следующем:

| PersonName    |   StateID  | 
      Josh           01 
      Ted            01
      Beth           02

Я делаю это в службах SSIS, поэтому таблицы Table1 и Table2 собираются с использованием компонента OLE DB Source, теперь мне нужно найти способ выполнить неточное объединение этих двух таблиц.

  • Я не могу использовать компонент скрипта

Я попытался использовать "Преобразование" Уточняющий запрос ", где Таблица1 является входом для поиска. Затем перейдите к -> Дополнительно -> "Изменить оператор SQL", и я попробовал 2 вещи, которые не работали:

1)

select * from (select * from [dbo].[Table2]) [refTable]
where ? LIKE '%' + [refTable].[StateName] + '%'

2)

select * from (select * from [dbo].[Table2]) [refTable]
where FINDSTRING( ?, [refTable].[StateName],  1) > 0

Есть ли способ достичь того, что я ищу в SSIS, без использования компонента сценария? Может быть, есть способ использовать нечеткий поиск? Если да, то как мне это настроить? Есть ли что-то вроде расширенного объекта "Merge Join"?

2 ответа

Вы находитесь на правильном пути с вашим отредактированным Lookup 1). Я думаю, что вам просто нужно удалить производную таблицу, например,

select * from from [dbo].[Table2] where ? LIKE '%' + [StateName] + '%'

Вы не можете объединить две таблицы в разных источниках данных, используя запрос в Lookup- Transformation. Запрос используется для определения источника данных для кэширования и просмотра, и он запускается непосредственно в определенном источнике данных для преобразования "Уточняющий запрос". Например, если вы хотите искать только состояния с state_id больше 10, вы определяете запрос как

Select * from [dbo].[Table2] where StateID > 10

Лучший способ реализовать это - использовать Table1 в качестве источника OLEDB и иметь задачу сценария или задачу производного столбца, которая извлекает оператор из адреса столбца. Используйте Regex, если вы идете с задачей сценария. Этот новый производный столбец будет иметь только состояние.

После этого у нас должно быть преобразование поиска, основанное на таблице 2. Условие поиска будет находиться в поле Statename в таблице 2 и столбце производного состояния в таблице Table1.

Другим вариантом является преобразование Merge-Join, которое можно использовать для объединения данных, поступающих из разнородных источников данных.

Другие вопросы по тегам