使用 groovy 编辑 ODI 中的现有映射,如何不复制数据存储
Using groovy to edit existing mapping in ODI, How do I not duplicate datastore
我正在使用 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)
我希望它将我现有的表达式从源数据存储编辑到目标数据存储,但它创建了一个重复的源和目标数据存储并在其中添加表达式。
您正在创建新的 DatastoreComponents 而不是使用映射中的现有 DatastoreComponents。您可以通过在映射上调用 findComponent 方法来找到现有的。
尝试替换
comp_emp = new DatastoreComponent(map, boundTo_emp)
与
comp_emp = map.findComponent(SRCdatastore)
目标组件也是如此。
如果源和目标已经在映射中连接,您还可以删除以下行:
comp_emp.connectTo(comp_tgtemp)
我正在使用 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)
我希望它将我现有的表达式从源数据存储编辑到目标数据存储,但它创建了一个重复的源和目标数据存储并在其中添加表达式。
您正在创建新的 DatastoreComponents 而不是使用映射中的现有 DatastoreComponents。您可以通过在映射上调用 findComponent 方法来找到现有的。
尝试替换
comp_emp = new DatastoreComponent(map, boundTo_emp)
与
comp_emp = map.findComponent(SRCdatastore)
目标组件也是如此。
如果源和目标已经在映射中连接,您还可以删除以下行:
comp_emp.connectTo(comp_tgtemp)