Есть ли способ найти контекст принудительного выполнения для объектов хранилища данных где-нибудь в базе метаданных ODI?

#oracle-data-integrator

#oracle-data-integrator

Вопрос:

У меня есть проект ODI 12c с 30 сопоставлениями. Мне нужно проверить, установлен ли для каждого «контекста компонента» для каждого объекта хранилища данных (исходного или целевого) значение «Контекст выполнения» (не принудительный).). Есть ли способ добиться этого, запросив базовую базу данных ODI, чтобы мне не приходилось делать это вручную и избегать возможных ошибок?

У меня есть список таблиц репозитория ODI 12c и комментарии к столбцам таблицы, которые я получил с веб-сайта поддержки Oracle, и после нескольких часов копания в базе данных я все еще не вижу эту информацию, хранящуюся ни в одной таблице.

Мой пакет находится в SNP_PACKAGE, SNP_MAPPING содержит информацию о сопоставлении, а SNP_MAP_COMP описывает объекты в сопоставлении. Я также просматривал множество разных таблиц.

Ответ №1:

Немного поздно, но для тех, кто еще ищет

Возиться с таблицами нельзя. API-интерфейсы лучше. Особенно, если вы хотите что-либо изменить. https://docs.oracle.com/en/middleware/data-integrator/12.2.1.3/odija/index.html

Запустите следующий сценарий groovy в ODI (Tools / Groovy / New Script). Должно быть достаточно простым для изменения. Использование SDK становится намного проще, если вам удастся настроить полную среду разработки в IntelliJ или другой Java IDE. Groovy в ODI открывает совершенно новый мир.

 //Created by DI Studio
import oracle.odi.domain.mapping.Mapping
import oracle.odi.domain.mapping.finder.IMappingFinder

tme = odiInstance.getTransactionalEntityManager()

IMappingFinder mapf = (IMappingFinder) tme.getFinder(Mapping.class)
Collection<Mapping> mappings = mapf.findByProject("PROJECT","FOLDER")
println("Found ${mappings.size()} mappings")

mappings.each { map ->
    map.physicalDesigns.each{ phys ->
        phys.physicalNodes.each{ node ->
            println("${map.project.name}...${map.parentFolder.parentFolder?.name}.${map.parentFolder.name}.${map.name}.${phys.name}.${node.name}.defaultContext=${(node.context.defaultContext) ? "default" : node.context.name}")
        }
    }
}
 

Он выводит контекст по умолчанию или установленный (принудительный) контекст. Кажется, принудительный контекст устарел в 12c. Physical.node.context.defaultContext, похоже, отражает контекст компонента (принудительный) в ODI Studio 12.2.1.3.
https://docs.oracle.com/en/middleware/data-integrator/12.2.1.3/odija/index.html

Обновление 2019-12-20 — включая getExecutionContextName Следующие скрипты перечислены в иерархическом порядке и, возможно, легче читать код. Не уверен, что вы получаете то, что изначально искали, без сопоставления с вашей точной настройкой.

 //Created by DI Studio
import oracle.odi.domain.mapping.Mapping
import oracle.odi.domain.mapping.finder.IMappingFinder
import oracle.odi.domain.mapping.component.DatastoreComponent

tme = odiInstance.getTransactionalEntityManager()

String project = "PROJECT"
String parentFolder = "PARENT_FOLDER"

IMappingFinder mapf = (IMappingFinder) tme.getFinder(Mapping.class)
Collection<Mapping> mappings = mapf.findByProject(project, parentFolder)
println("Found ${mappings.size()} mappings")

println "Project: ${project}"
mappings.each { map ->
    println "tMapping: ..${map.parentFolder.parentFolder?.name}/${map.parentFolder.name}/${map.name}"
    map.physicalDesigns.each{ phys ->
        println "ttPhysical: ${phys.name}"
        phys.physicalNodes.each{ node ->
            println "tttNode: ${node.name}"
            println "ttttdefaultContext: ${(node.context.defaultContext)}" 
            println "ttttNode context name: ${node.context.name}"
            println "ttttDatastoreComponent ExecutionContextName: ${DatastoreComponent.getDatastoreComponent(node)?.getExecutionContextName(node).toString()}"
        }
    }
}
 

Комментарии:

1. Я думаю, что контекст компонента (принудительный) возвращается этим методом docs.oracle.com/en/middleware/data-integrator/12.2.1.3/odija / … вы знаете, как это напечатать? Я не знаю groovy или java.

2. @keciga, я обновил ответ, включив getExecutionContextName

Ответ №2:

Ниже приведен список некоторых таблиц и столбцов, которые могут содержать искомое значение.

Таблица   список столбцов для поиска контекста выполнения

Эти таблицы и столбцы взяты из ODI 12.1.2, в зависимости от конкретной версии ODI, которую вы используете, структура может немного отличаться.

Комментарии:

1. ни один из них. некоторые из этих таблиц содержат контекстную информацию об уже выполненных сценариях. Что мне нужно, так это текущее состояние сопоставления.

Ответ №3:

Здесь также есть запрос для извлечения этой информации непосредственно из базы данных.

— Принудительные контексты в хранилищах данных при отображении

 SELECT MAPP.NAME MAP_NAME, MAPP_COMP.NAME DATASTORE_NAME, 
MAPP_REF.QUALIFIED_NAME FORCE_CONTEXT
FROM SNP_MAPPING MAPP
   INNER JOIN SNP_MAP_REF MAPP_REF 
       ON MAPP_REF.I_OWNER_MAPPING = MAPP.I_MAPPING
    INNER JOIN SNP_MAP_PROP MAPP_PROP  
       ON MAPP_REF.I_MAP_REF = MAPP_PROP.I_PROP_XREF_VALUE
   INNER JOIN ODIW12.SNP_MAP_COMP MAPP_COMP 
       ON MAPP_COMP.I_MAP_COMP = MAPP_PROP.I_MAP_COMP
WHERE
   MAPP_REF.ADAPTER_INTF_TYPE = 'IContext' 
   and MAPP.NAME like %yourMapping%