首页 > 解决方案 > 使用 groovy 编辑 ODI 中的现有映射,如何不复制数据存储

问题描述

我正在使用 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)

我希望它编辑从源到目标数据存储的现有表达式,但它会创建一个重复的源和目标数据存储并在那里添加表达式。

这是当前的结果

标签: groovyoracle-data-integrator

解决方案


您正在创建新的 DatastoreComponents 而不是使用映射中的现有组件。您可以通过在映射上调用findComponent方法找到现有的。

尝试更换

comp_emp = new DatastoreComponent(map, boundTo_emp)

comp_emp = map.findComponent(SRCdatastore)

目标组件也是如此。

如果源和目标已在映射中连接,您还可以删除以下行:

comp_emp.connectTo(comp_tgtemp)

推荐阅读