Использование groovy для редактирования существующего сопоставления в ODI. Как не дублировать хранилище данных - PullRequest
0 голосов
/ 20 июня 2019

Я использую groovy для редактирования существующего отображения в ODI 12.2.В отображении уже есть исходное хранилище данных и целевое хранилище данных.Я хочу использовать его, но я продолжаю дублировать исходное и целевое хранилище данных.Есть ли способ сделать это?

Я новичок в Groovy, любая помощь будет чрезвычайно полезна.

//mapping
  txnDef = new DefaultTransactionDefinition()
  tm = odiInstance.getTransactionManager()
  tme = odiInstance.getTransactionalEntityManager()
  txnStatus = tm.getTransaction(txnDef)
  Mapping map = ((IMappingFinder)     tme.getFinder(Mapping.class)).findByName(folder, mappingName)
  dsf = (IOdiDataStoreFinder)tme.getFinder(OdiDataStore.class)
  mapf = (IMappingFinder) tme.getFinder(Mapping.class)  
  tme.persist(map)

//insert source table
  boundTo_emp = dsf.findByName(SRCdatastore,   SRCmodel)
  comp_emp = new DatastoreComponent(map, boundTo_emp)

//insert target table
  boundTo_tgtemp = dsf.findByName(TRGdatastore, TGRmodel)
  comp_tgtemp = new DatastoreComponent(map, boundTo_tgtemp)


comp_emp.connectTo(comp_tgtemp)
createExp(comp_tgtemp, boundTo_tgtemp, "LAST_NAME", "SRC_CUSTOMER.LAST_NAME")

deploymentspec = map.getDeploymentSpec(0)
node = deploymentspec.findNode(comp_tgtemp)
println deploymentspec.getExecutionUnits()
aps = deploymentspec.getAllAPNodes()
tgts = deploymentspec.getTargetNodes()

tme.persist(map)
tm.commit(txnStatus)

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

Here is the current result

1 Ответ

0 голосов
/ 20 июня 2019

Вы создаете новые DatastoreComponents вместо того, чтобы использовать существующие из сопоставления. Вы можете найти существующие, вызвав метод findComponent в вашем отображении.

Попробуйте заменить

comp_emp = new DatastoreComponent(map, boundTo_emp)

с

comp_emp = map.findComponent(SRCdatastore)

То же самое относится и к целевому компоненту.

Вы также можете удалить следующую строку, если источник и цель уже связаны в отображении:

comp_emp.connectTo(comp_tgtemp)
...