我们有两个并行运行的Informatica作业。
一个从欧洲中部时间11.40开始,它有大约300个Informatica工作流程,其中一个是fact_sales。
另一项工作在中欧时间3.40,并且它有大约115个工作流程,其中许多工作流程依赖于数据一致性方面的fact_sales。
问题是fact_sales应该在进程2中的某些工作流程开始之前完成,以使数据准确,但这通常不会发生。
我们要做的是以这样的方式拆分进程2,即fact_sales依赖的工作流只在fact_sales完成后运行。
你能给我一个方法来编写一个unix shell脚本来检查这个fact_sales的状态,如果它成功,然后启动其他依赖的工作流,如果没有那么它应该发送一个失败的邮件。谢谢
我认为没有必要为此编写自定义shell脚本。其中大部分是非常标准/通用的功能,可以使用Command Task和事件等待来实现。
**Process1 - runs at 11:50** ....workflow ... fact_sales workflow. **Add a command task at the end **that drops a flag, say, fact_sales_0430.done ... ....workflow..500
并且所有依赖进程都将有一个等待此.done文件的事件等待。由于存在多个依赖工作流,因此请确保它们都不会立即删除该文件。您可以在一天结束时或第二天加载开始时删除此.done文件。
workflow1 ..... dependantworkflow1 -- Event wait, waiting on fact_sales_0430.done (do not delete file). dependantworkflow2 -- Event wait, waiting on fact_sales_0430.done (do not delete file). someOtherWorkflow dependantworkflow3 -- Event wait, waiting on fact_sales_0430.done (do not delete file). .... ......
第二种方法可以如下 -
您必须运行某种调度程序才能启动这些工作流。由于Informatica无法在集合中调度多个工作流,因此它只能处理该依赖性管理级别的工作组/会话。
从调度程序中,在销售事实负载wf和其他相关工作流程之间创建依赖关系。
我认为下面提到的脚本对你有用。请更新参数。
WAIT_LOOP=1
while [ ${WAIT_LOOP} -eq 1 ]
do
WF_STATUS=`pmcmd getworkflowdetails -sv $INFA_INTEGRATION_SERVICE -d $INFA_DOMAIN -uv INFA_USER_NAME -pv INFA_PASSWORD -usd Client -f $FOLDER_NAME $WORKFLOW_NAME(fact_sales) | grep "Workflow run status:" | cut -d'[' -f2 | cut -d']' -f1`
echo ${WF_STATUS} | tee -a $LOG_FILE_NAME
case "${WF_STATUS}" in
Aborted)
WAIT_LOOP=0
;;
Disabled)
WAIT_LOOP=0
;;
Failed)
WAIT_LOOP=0
;;
Scheduled)
WAIT_LOOP=0
;;
Stopped)
WAIT_LOOP=0
;;
Succeeded)
WAIT_LOOP=0
;;
Suspended)
WAIT_LOOP=0
;;
Terminated)
WAIT_LOOP=0
;;
Unscheduled)
WAIT_LOOP=0
;;
esac
if [ ${WAIT_LOOP} -eq 1 ]
then
sleep $WAIT_SECONDS
fi
done
if [ ${WF_STATUS} == "Succeeded" ]
then
pmcmd startworkflow -sv $INFA_INTEGRATION_SERVICE -d $INFA_DOMAIN -uv INFA_USER_NAME -pv INFA_PASSWORD -usd Client -f $FOLDER_NAME -paramfile $PARAMETER_FILE $WORKFLOW_NAME(dependent_one) | tee $LOG_FILE_NAME
else
(echo "Please find attached Logs for Run" ; uuencode $LOG_FILE_NAME $LOG_FILE_NAME )| mailx -s "Execution logs" $EMAIL_LIST
exit 1
fi
我可以看到你面临的主要挑战 - 保持大量infa工作流程之间的依赖关系。你有两个选择 -
这是一个有点棘手的过程,但一旦你设置它就会得到回报。您可以根据需要添加任意数量的工作流程,与infa scheduler或infa worklet相比,您的维护工作将更加顺畅。
您可以使用REP_SESS_LOG等表从存储库数据库中触发查询,并检查事实销售的状态是否成功。然后只有你可以继续第二份工作。