打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
INFORMATICA关于WORKFLOW Manager系统的元数据解析

INFORMATICA关于WORKFLOW Manager系统的元数据解析

关键词INFORMATICA,WOR    Manager,元数据                                          

informaica是一个很强大的ETL工具。其WORKFLOW MANAGER负责对ETL调度流程进行设计与管理和执行!

informatica在在资料库中提供以下表来存储调动流程的相关信息。
以便WORKFLOW MANAGER对用户所设计的调动流程进行管理和执行。
opb_wflow_dep:描述workflow执行步骤相关信息和每个步骤执行的条件信息
opb_wflow_dep_run:描述workflow执行步骤运行时相关信息
opb_wflow_expr :描述workflow中相关的表达式或条件的相关信息
opb_wflow_perval:描述workflow可持续性变量相关信息
opb_wflow_run:描述workflow运行日志相关信息
opb_wflow_var:描述workflow变量相关信息
opb_task:描述任务对象的基本信息
opb_task_attr:描述任务对象相关的属性的信息
opb_task_inst:描述任务对象实例的基本信息
opb_task_inst_run:描述任务对象实例运行日志相关信息
opb_task_val_list:描述任务对象实例中command信息
WORKFLOW MANAGER系统中常用的有这几个模块,
Command模块,
Session模块,
Waiting_Event模块,
Raising_Event模块,
Assignment模块,
Worklet模块
WORKFLOW MANAGER系统中上述的这些模块统称为任务(Task).如果你对一个模块进行了
复制后新的模块就称作该任务的任务实例(Task_Inst).
WORKFLOW MANAGER系统中Worklet模块可以有其他非Worklet模块组成。
在WORKFLOW MANAGER系统中一个工资流被称作Workflow,Workflow由各种任务模块组合而成。
同时一个Workflow也是一个任务。

以下是WORKFLOW元数据表的详细说明,

-----------------------------------------------------------------------
--OPB_WFLOW_DEP:描述workflow执行步骤相关信息和每个步骤执行的条件信息
--WORKFOLW MANAGER系统将用户设计的工作流的流程(步骤)信息存放到该表中。
--将每个步骤的执行的条件详细信息存放到opb_wflow_expr中,然后由CONDITION_ID
--关联。如果用户没有设置步骤执行条件则opb_wflow_expr对应记录中的CONDITION
--字段值为空。WORKFOLW MANAGER系统执行一个工作流时,就根据这个表中的步骤信息
--获得所要调度的任务实例标识,然后到opb_task_inst获取具体信息。
-----------------------------------------------------------------------
CREATE TABLE OPB_WFLOW_DEP (
      WORKFLOW_ID           NUMBER NULL,--工作流步骤归属的工作流标识
      FROM_INST_ID         NUMBER NULL,--工作流步骤中起始任务实例标识
      TO_INST_ID           NUMBER NULL,--工作流步骤中终止任务实例标识
      CONDITION_ID         NUMBER NULL,--工作流步骤可以执行的条件标识
      OPB_OBJECT_ID         NUMBER NULL
);

-----------------------------------------------------------------------
--OPB_WFLOW_DEP_RUN:描述workflow执行步骤运行时相关信息
--用于关联opb_wflow_run和opb_task_inst_run
--这样这三张表就能完整的描述一个工作流的运行情况了。
-----------------------------------------------------------------------
CREATE TABLE OPB_WFLOW_DEP_RUN (
      WORKFLOW_ID           NUMBER NULL,--工作流步骤归属的工作流标识
      WORKFLOW_RUN_ID       NUMBER NULL,--工作流步骤归属的工作流运行实例标识
      WORKLET_RUN_ID       NUMBER NULL,--工作流步骤归属的WORKLET运行实例标识
      FROM_INSTANCE_ID     NUMBER NULL,--工作流步骤中起始任务实例标识
      TO_INSTANCE_ID       NUMBER NULL --工作流步骤可以执行的条件标识
);

-----------------------------------------------------------------------
--OPB_WFLOW_EXPR:描述workflow中相关的表达式或条件的相关信息
--
-----------------------------------------------------------------------
CREATE TABLE OPB_WFLOW_EXPR (
      WORKFLOW_ID           NUMBER NULL,--表达式归属的工作流标识
      CONDITION_ID         NUMBER NULL,--条件标识
      LINE_NO               NUMBER NULL,
      CONDITION             VARCHAR2(2000) NULL,--条件表达式描述
      OPB_OBJECT_ID         NUMBER NULL
);

-----------------------------------------------------------------------
--OPB_WFLOW_PERVAL:描述workflow可持续性变量相关信息
--当下次运用到一持续性变量时,WORKFLOW MANAGER系统就会从该表中读取
--该变量的VAR_VALUE值了。当该持续性变量所在的WORKFLOW(或WORKLET)结束后
--系统就会将该持续性变量的当前值保存到该表相应记录的VAR_VALUE字段中
-----------------------------------------------------------------------
CREATE TABLE OPB_WFLOW_PERVAL (
      SUBJECT_ID           NUMBER NULL,--工作流归属的主题标识
      WORKFLOW_ID           NUMBER NULL,--变量归属的工作流标识
      WORKLET_ID           NUMBER NULL,
      VARIABLE_ID           NUMBER NULL,--变量标识
      VAR_VALUE             VARCHAR2(2000) NULL,--变量当前值
      LAST_SAVED           VARCHAR2(30) NULL,
      BIT_OPTIONS           NUMBER NULL,
      OPB_OBJECT_ID         NUMBER NULL,
      WORKLET_INST_ID       NUMBER NULL--变量归属的WORKLET任务实例标识
);

-----------------------------------------------------------------------------
--OPB_WFLOW_RUN:描述workflow运行日志相关信息
--该表中描述运行WROKFLOW的运行环境信息(SERVER_ID、USER_NAME)
--和WORKFLOW的运行结果。
--OPB_WFLOW_RUN和OPB_TASK_INST_RUN这两个表提供了WORKFLOW MONITER系统
--对显示工作流详细运行状态的所需要的所有信息
------------------------------------------------------------------------------
CREATE TABLE OPB_WFLOW_RUN (
      SUBJECT_ID           NUMBER NULL,--工作流归属主题标识
      WORKFLOW_ID           NUMBER NULL,--工作流标识
      WORKFLOW_RUN_ID       NUMBER NULL,--工作流运行实例标识
      WORKFLOW_NAME         VARCHAR2(240) NULL,--工作流名称
      SERVER_ID             NUMBER NULL,--运行工作流的INFOMATICA服务器标识
      SERVER_NAME           VARCHAR2(240) NULL,--运行工作流的INFOMATICA服务器名称
      START_TIME           DATE NULL,--开始运行工作流时间
      END_TIME             DATE NULL,--结束运行工作流时间
      LOG_FILE             VARCHAR2(2000) NULL,--记录工作流运行详细情况的日志文件全名称
      RUN_ERR_CODE         NUMBER NULL,--工作流运行错误代码(如果工作流正常结束该字段值为空)
      RUN_ERR_MSG           VARCHAR2(2000) NULL,--工作流运行错误描述(如果工作流正常结束该字段值为空)
      RUN_STATUS_CODE       NUMBER NULL,--工作流运行状态
      USER_NAME             VARCHAR2(240) NULL,--运行该工作流所使用的用户名称
      RUN_TYPE             NUMBER NULL,--工作流运行类型
      CODEPAGE_ID           NUMBER NULL
);

---------------------------------------------------------------------------------------
--OPB_WFLOW_VAR:描述workflow变量相关信息
--在WORKFLOW MANAGER系统中有系统内值变量和用户自定义变量。
--
----------------------------------------------------------------------------------------
CREATE TABLE OPB_WFLOW_VAR (
      SUBJECT_ID           NUMBER NULL,--工作流归属主题标识
      WORKFLOW_ID           NUMBER NULL,--变量归属的工作流任务实例标识(或者变量归属的WORKLET任务实例标识)
      VARIABLE_ID           NUMBER NULL,--变量标识
      VAR_NAME             VARCHAR2(240) NULL,--变量名称
      VAR_TYPE             NUMBER NULL,--变量类型(临时、持久)
      VAR_DESC             VARCHAR2(2000) NULL,--变量描述
      VAR_DATATYPE         NUMBER NULL,--变量数据类型
      VAR_DEFAULT           VARCHAR2(2000) NULL,--变量缺省值
      LAST_SAVED           VARCHAR2(30) NULL,
      OPB_OBJECT_ID         NUMBER NULL,
      TASK_INST_ID         NUMBER NULL,--变量归属任务实例标识(该任务实例为非WORKFLOW/WORKLET任务实例)
      TASK_INST_NAME       VARCHAR2(240) NULL,--变量归属任务实例名称
      BIT_OPTIONS           NUMBER NULL
);

-------------------------------------------------------------------------
--OPB_TASK:描述任务对象实例的基本信息
--任务概论是INFORMAICA系统中对所有可以被调度执行的模块的总称,
--包含Command任务,Session任务,Waiting_Event任务,
--Raising_Event任务,Assignment任务,Worklet任务,Workflow任务等。
-------------------------------------------------------------------------
CREATE TABLE OPB_TASK (
      SUBJECT_ID           NUMBER NULL,--任务归属主题标识
      TASK_ID               NUMBER NULL,--任务标识
      TASK_TYPE             NUMBER NULL,--任务类型
      TASK_NAME             VARCHAR2(240) NULL,--任务名称
      TASK_PROPERTY         NUMBER NULL,--任务属性
      IS_REUSABLE           NUMBER NULL,--任务是否可以复用标识
      IS_VALID             NUMBER NULL,
      IS_ENABLED           NUMBER NULL,
      COMMENTS             VARCHAR2(2000) NULL,--任务描述
      LAST_SAVED           VARCHAR2(30) NULL,
      CREATE_INFO           NUMBER NULL,
      OPB_OBJECT_ID         NUMBER NULL,
      OBJVERSION           NUMBER NULL
);

--------------------------------------------------------------------------
--OPB_TASK_ATTR:描述任务实例对象相关的属性的信息
--因为每个任务可以有多个实例,而每个任务实例的属性也可以各自不同
--所以该表的主键应该是WORKFLOW_ID,INSTANCE_ID,ATTR_ID
---------------------------------------------------------------------------
CREATE TABLE OPB_TASK_ATTR (
      WORKFLOW_ID           NUMBER NULL,--任务所归宿的工作流标识
      INSTANCE_ID           NUMBER NULL,--任务实例标识
      TASK_ID               NUMBER NULL,--任务标识
      TASK_TYPE             NUMBER NULL,--任务类型
      REF_SESSION_ID       NUMBER NULL,
      COMPONENT_TYPE       NUMBER NULL,
      ATTR_ID               NUMBER NULL,--任务属性标识
      ATTR_VALUE           VARCHAR2(2000) NULL,--任务属性值
      LINE_NO               NUMBER NULL,
      GROUP_ID             NUMBER NULL,
      OPB_OBJECT_ID         NUMBER NULL
);

---------------------------------------------------------------------------
--OPB_TASK_INST:描述任务对象实例的基本信息
--在INFORMATICA的WORKFLOW MANAGER系统中,提供对任务对象提供复制。
--当一个任务对象被复制后,就在系统中产生一个实例对象,
--但是如果不被复制就不会产生实例对象。同时每个任务实例对象之间及
--任务实例对象和任务对象之间是相互独立的。为的就是信息复制目的。
--不要和JAVA中的对象和实例之间的关系等同起来。
----------------------------------------------------------------------------
CREATE TABLE OPB_TASK_INST (
      WORKFLOW_ID           NUMBER NULL,--任务实例所归属的工作流标识
      INSTANCE_ID           NUMBER NULL,--任务实例标识
      TASK_ID               NUMBER NULL,--任务标识
      TASK_TYPE             NUMBER NULL,--任务类型
      INSTANCE_NAME         VARCHAR2(240) NULL,--任务实例名称
      TASK_PROPERTY         NUMBER NULL,--任务属性
      IS_ENABLED           NUMBER NULL,
      BIT_OPTIONS           NUMBER NULL,
      COMMENTS             VARCHAR2(2000) NULL,--任务描述
      IS_VALID             NUMBER NULL,
      OPB_OBJECT_ID         NUMBER NULL
);

------------------------------------------------------------------
--OPB_TASK_INST_RUN:描述任务对象实例运行日志相关信息
--当运行一个工作流调度时,INFORMATICA系统会记录WORKFLOW中每个任务实例
--运行结果。在WORKFLOW MANAGER中每个任务实例对象的运行状态属性值就是
--从该表中获得的。
-------------------------------------------------------------------
CREATE TABLE OPB_TASK_INST_RUN (
      SUBJECT_ID           NUMBER NULL,--任务实例归属的主题标识
      WORKFLOW_ID           NUMBER NULL,--任务实例归属的工作流标识
      WORKFLOW_RUN_ID       NUMBER NULL,--工作流运行实例标识
      WORKLET_RUN_ID       NUMBER NULL,--WORKLET运行实例标识
      CHILD_RUN_ID         NUMBER NULL,
      INSTANCE_ID           NUMBER NULL,--任务实例标识
      INSTANCE_NAME         VARCHAR2(240) NULL,--任务实例名称
      TASK_ID               NUMBER NULL,--任务标识
      TASK_TYPE             NUMBER NULL,--任务类型
      START_TIME           DATE NULL,--任务实例开始运行时间
      END_TIME             DATE NULL,--任务实例结束运行时间
      RUN_ERR_CODE         NUMBER NULL,--任务实例运行错误代码(如果任务实例正常运行该字段值为空)
      RUN_ERR_MSG           VARCHAR2(2000) NULL,--任务实例运行错误信息(如果任务实例正常运行该字段值为空)
      RUN_STATUS_CODE       NUMBER NULL,--任务运行状态代码
      TASK_NAME             VARCHAR2(240) NULL--任务名称
);

-----------------------------------------------------------------------------------------
--OPB_TASK_VAL_LIST:描述任务对象实例中command信息
--该表主要应用于COMMAND任务,记录COMMAND任务的所有命令行信息。
--WORKFLOW MANAGER系统在执行该COMMAND任务时,按顺序逐一读取该任务的
--命令行,而后以阻塞方式运行该命令行。
--要注意的是:如果复制一个COMMAND任务对象产生了一个COMMAND任务实例对象,
--但是不改变COMMAND任务实例对象的命令行内容时则在OPB_TASK_VAL_LIST中不会出现
--该COMMAND任务实例对象的命令行信息记录的。
-----------------------------------------------------------------------------------------

CREATE TABLE OPB_TASK_VAL_LIST (
      TASK_ID               NUMBER NULL,--任务标识
      SUBJECT_ID           NUMBER NULL,--任务实例归属的主题标识
      WORKFLOW_ID           NUMBER NULL,--任务实例归属的工作流标识(或WORKLET标识)
      INSTANCE_ID           NUMBER NULL,--任务实例标识
      SESSION_ID           NUMBER NULL,
      COMPONENT_TYPE       NUMBER NULL,
      TASK_TYPE             NUMBER NULL,--任务类型(为COMMAND类型的任务)
      DESCRIPTION           VARCHAR2(2000) NULL,
      PM_VALUE             VARCHAR2(2000) NULL,--命令行内容
      EXEC_ORDER           NUMBER NULL,
      VAL_NAME             VARCHAR2(240) NULL,--代表命令行内容的变量名称
      LINE_NO               NUMBER NULL,
      OPB_OBJECT_ID         NUMBER NULL
);





举例:
下面是一个JAVA的类,该类中描述了如何根据WORKFLOW名称,WORKLET名称和变量名称
来获得和设置相应可持续性变量值的方法。
import java.sql.*;
import java.io.*;
public class varConfig
{
public varConfig(String peizhi,String wflname,String wltname,String varname)
{
this.peizhi=peizhi;
this.wflname=wflname;
this.wltname=wltname;
this.varname=varname;
File fs=new File(peizhi);
try
{

BufferedReader in=new BufferedReader(new FileReader(fs));
//取得配置表中的各个参数
String line="";
while((line=in.readLine())!=null)
{
if(line.trim().startsWith("etldsn"))
{
etldsn=line.substring(line.indexOf("=")+1).trim();
}
if(line.trim().startsWith("etluid"))
{
etluid=line.substring(line.indexOf("=")+1).trim();
}
if(line.trim().startsWith("etlpwd"))
{
etlpwd=line.substring(line.indexOf("=")+1).trim();
}
}
in.close();
}
catch(Exception e)
{
System.out.println(e);
}
}

public boolean init()
{
//根据workflow名称获得相应的workflowID
workflowID=GetWorkflowID(wflname);
System.out.println("workflowID="+workflowID);
if(workflowID.trim().equals(""))
{
return false;
}
if(!wltname.trim().equals("0"))
{
//根据workflowID和workflowlet名称获得workflowlet的ID
String tempId=GetWorkflowLetID(workflowID,wltname);
workflowletID=tempId.trim().substring(0,tempId.trim().indexOf("$"));
workletinstID=tempId.trim().substring(tempId.trim().indexOf("$")+1);
System.out.println("workflowletID="+workflowletID);
System.out.println("workletinstID="+workletinstID);

}
//根据workflowID和workflowletID和Var名称获得VarID
if(!workflowletID.trim().equals(""))
{
varID=GetVariableID(workflowletID,varname);
}
else
{
varID=GetVariableID(workflowID,varname);
}
System.out.println("varID="+varID);
return true;
}


public boolean setVarValue(String varvalue)
{

//根据workflowID和workflowletID和workletinstID和VarID修改相应变量的值
try
{
String SQL="";
CreateConn crtetlconn=new CreateConn(etldsn,etluid,etlpwd);
Connection etlconn=crtetlconn.backConn();
Statement etlwf=etlconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
if(!workflowletID.trim().equals(""))
{
SQL="update opb_wflow_perval set var_value= '"+varvalue+"' where workflow_id= '"+workflowletID+"' and worklet_inst_id='"+workletinstID+"' and variable_id='"+varID+"'";
}
else
{
SQL="update opb_wflow_perval set var_value= '"+varvalue+"' where workflow_id= '"+workflowID+"' and variable_id='"+varID+"'";
}
System.out.println("update="+SQL);
ResultSet rswf=etlwf.executeQuery(SQL);
etlwf.executeQuery("commit");
rswf.close();
etlwf.close();
etlconn.close();
return true;
}
catch(Exception e)
{
System.out.println(e);
return false;
}
}

public String getVarValue()
{
//获得指定VAR的值
try
{
String SQL="";
String varValue="";
CreateConn crtetlconn=new CreateConn(etldsn,etluid,etlpwd);
Connection etlconn=crtetlconn.backConn();
Statement etlwf=etlconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
if(!workflowletID.trim().equals(""))
{
SQL="select var_value from opb_wflow_perval   where workflow_id= '"+workflowletID+"' and worklet_inst_id='"+workletinstID+"' and variable_id='"+varID+"'";
}
else
{
SQL="select var_value from opb_wflow_perval   where workflow_id= '"+workflowID+"' and variable_id='"+varID+"'";
}
System.out.println("varvalue="+SQL);
ResultSet rswf1=etlwf.executeQuery(SQL);

while (rswf1.next())
{
varValue=rswf1.getString(1).trim();
}

rswf1.close();
etlwf.close();
etlconn.close();
return varValue;
}
catch(Exception e)
{
System.out.println(e);
return "";
}
}

public String GetWorkflowID(String wflname)
{
//根据workflow名称获得相应的workflowID
try
{
String SQL="";
String workflowID="";
CreateConn crtetlconn=new CreateConn(etldsn,etluid,etlpwd);
Connection etlconn=crtetlconn.backConn();
Statement etlwf=etlconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
SQL="select task_ID from opb_task where task_name ='" + wflname +"'";
ResultSet rswf2=etlwf.executeQuery(SQL);
while (rswf2.next())
{
workflowID=rswf2.getString(1).trim();
}

rswf2.close();
etlwf.close();
etlconn.close();
return workflowID;
}
catch(Exception e)
{
System.out.println(e);
return "";
}
}

public String GetWorkflowLetID(String WorkflowID,String WorkflowLetName)
{
//根据workflowID和workflowlet名称获得workflowlet的ID
try
{
String SQL="";
String workflowletID="";
String workletinstID="";
CreateConn crtetlconn=new CreateConn(etldsn,etluid,etlpwd);
Connection etlconn=crtetlconn.backConn();
Statement etlwf=etlconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
SQL="select task_id,INSTANCE_ID from opb_task_INST where workflow_id ='" + WorkflowID +"' and instance_name= '" + WorkflowLetName +"'" ;
System.out.println("wl="+SQL);
ResultSet rswf3=etlwf.executeQuery(SQL);
while (rswf3.next())
{
workflowletID=rswf3.getString(1).trim();
workletinstID=rswf3.getString(2).trim();
}

rswf3.close();
etlwf.close();
etlconn.close();
return workflowletID+"$"+workletinstID;
}
catch(Exception e)
{
System.out.println(e);
return "";
}
}

public String GetVariableID(String WorkflowID,String VariableName)
{
//根据workflowID和变量名称获得变量ID
try
{
String SQL="";
String varID="";
CreateConn crtetlconn=new CreateConn(etldsn,etluid,etlpwd);
Connection etlconn=crtetlconn.backConn();
Statement etlwf=etlconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
SQL="select variable_id from opb_wflow_var where workflow_id ='" + WorkflowID +"' and var_name= '" +VariableName+"'";
System.out.println("Var="+SQL);
ResultSet rswf4=etlwf.executeQuery(SQL);
while (rswf4.next())
{
varID=rswf4.getString(1).trim();
}
rswf4.close();
etlwf.close();
etlconn.close();
return varID;
}
catch(Exception e)
{
System.out.println(e);
return "";
}
}

private String workflowID="";
private String varID="";
private String workflowletID="";
private String workletinstID="";
private String wflname="";
private String wltname="";
private String varname="";
private String peizhi="";
private String etldsn="";
private String etluid="";
private String etlpwd="";


}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
JR - 精品文章 - OSWorkFlow分析
OSWorkflow深层讲解系列(一)初始化的原理 - 胡长城(银狐999)BLOG - ...
tidymodels工作流:workflow
一个用数据库实现的工作流
DELETE CASCADE级联删除
工作流技术在银行系统中的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服