Создание пользовательского шага в Oracle Data Integrator ODI с использованием Groovy для удаления дублирующихся строк - PullRequest
1 голос
/ 07 июня 2019

У меня есть случай, когда мне нужно заполнить целевую таблицу, у меня есть столбец "CUSTOMER_ID", который имеет повторяющиеся значения в различных строках.Мне нужно заполнить целевую таблицу только одной строкой из CustomerID независимо от того, какая из них (она может быть выбрана случайным образом).Обычно я использую процедуру, выполняемую для этого запроса:

DELETE FROM Source.SALARY
      WHERE ROWID NOT IN (SELECT MAX (ROWID)
                                  FROM Source.SALARY
                              GROUP BY CUSTOMER_ID);

Этот запрос удаляет дубликаты на CUSTOMER_ID и оставляет только одну строку.

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

delete from    <%=snpRef.getTable("L","TARG_NAME","A")%> 
where <%=odiRef.getColList("", "ROWID")%> not in (
select MAX(<%=odiRef.getColList("", "ROWID")%>) 
from     <%=snpRef.getTable("L","INT_NAME","A")%>
GROUP BY <%=odiRef.getColList("","[COL_NAME]","\n\tand\t","","UK")%> 
where     1=1) 

Может ли кто-нибудь помочь мне приспособить этот код для моего запроса Oracle SQL?

1 Ответ

1 голос
/ 07 июня 2019

Я сделал это, используя этот код:

delete from    <%=snpRef.getTable("L","TARG_NAME","A")%> 
where ROWID not in (
select MAX(ROWID) 
from     <%=snpRef.getTable("L","TARG_NAME","A")%>
GROUP BY <%=odiRef.getColList("","[COL_NAME]","\n\tand\t","","UK")%>) 

Работало отлично!

...