Как выполнить слияние, используя оператор 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, которое можно использовать для объединения данных, поступающих из разнородных источников данных.