Set it and forget it. That’s how SAS Viya Jobs and Flows should work, right? Well, just like most other things in life, it’s not that simple. What if you have multiple Jobs set to run in a Flow and one fails? Do you exit the process or continue with subsequent Jobs? This post provides some tips on how to schedule flows in the SAS Viya Environment Manager to solve these types of situations.
What is a Job?
A SAS Viya job consists of a program and its definition (metadata related to the program). The job definition includes information such as the job name, the author and when it was created.
What is a Flow?
A flow is defined as a container of jobs. Flows must contain at least one job or at least one flow, which is called a subflow. You can schedule a flow to run now or in the future.
You can catch up on the basics of Jobs and Flows in the SAS Viya Administration documentation.
Customer A has two jobs in a flow. Job 2 is dependent on Job 1 completing with any exit code. If Job 1 fails, then Customer A still wants his flow to complete successfully.
Customer B has two jobs in a flow. Job 2 is dependent on Job 1 completing with any exit code. If Job 1 fails, then Customer B wants his flow to fail.
How do you satisfy the requirements from both Customer A and Customer B?
The Flow Completion Criteria setting, in the SAS Viya Environment Manager, controls the outcome of the flow. The setting controls the result of the flow based on the results of the jobs within. To configure the criteria, go to the Jobs and Flows page. Then, on the Scheduling tab, select New ►Job Flow. On the right-hand side, click the Attributes icon, to get to the Flow Completion Criteria. Below is a screenshot of selections for the configuration.
A Deeper Look into Flow Completion Criteria
In this example, I have two jobs, Bad Program and Good Program, in a flow labelled Test Flow. Bad Program completes with an exit code. Good Program is dependent on Bad Program completing with any exit code. Good Program completes successfully.
I use the default Flow Completion Criteria setting:
and looking at the results of the run, the flow completes successfully:
What if I want the flow to fail when any jobs fail? I'll need to modify the Flow Completion Criteria. This time I'll select Only selected items end. I then have a choice of Any or All jobs. I'll choose Any and the two jobs relevant for the criteria.
In this instance the flow fails:
Now, I know what you are thinking. What about Good Program? It did not run because I set the flow to end if any of the jobs ended. Since Good Program is dependent on Bad Program, and Bad Program ended, Test Flow ended too.
In the next scenario, I'll choose the All jobs option.
With this setting, no matter which job fails or succeeds, the flow should complete only when all jobs end with an exit code.
Here is one more example. I want to add an AND gate to the flow.
Bad Program and Good Program kick off a flow called Ursula_s Import Program. The job dependency of Bad Program and Good Program ends with any exit code. I'll run the scenario using the default settings:
And I get the following results:
Here is what happened: Good Program and Bad Program executed, but Ursula_s Import Program did not. I really want Ursula_s Import Program to execute (it has my name in the job name, so, of course, I want the job to execute). So let's adjust the configuration to get the desired flow outcome.
I'll update the criteria to Only selected items end and Any:
And here are the results:
The flow completed successfully as did Ursula_s Import Program, despite Bad Program failing. What did I do? I modified how I wanted to complete the flow. I wanted two things: (1) the flow to complete successfully and (2) Ursula_s Import Program to complete. I forced the flow to complete because I selected Any and I chose the last job of the flow sequence to run. I told the flow to complete after running Ursula_s Import Program.
As any fashion expert knows, one size does not fit all, and that especially applies to flows. Luckily, you can manipulate the flows to fit your business needs. All you need to do is to understand the logic and modify the Flow Completion Criteria.
Go with the Job Flow in SAS Viya 3.5
SAS Help Center: Jobs and Flows: How To (Job Flows)
Whle excecuting job on flow manager it shows successsfull but when we saw that in execution history it shows fails with exit code 5713.
how to remove this error.
this is independent code.
and when same code run manually it dont gv any error..
plase help me for above situation
Thanks in advance.
Thanks for the submission. The best thing to resolve the issue is to open a Technical Support ticket. Collecting logs to will help determine why the job is failing with an exit code of 5713 and resolve the issue.
This is Yaswanth from Deere and we have spoken earlier:). I hope you do remember me. I believe, the above scheduling works only when we logged into SAS Viya.
Is there any way, we can run Jobs in batch mode. I saw the documentation and it seems confusing 🙁
Could you please share if you have any good example or work notes that was done.
Hi Yaswanth. I hope you are doing well. For Viya 2020.1.4 there is a batch Plug-In to sas-viya: https://go.documentation.sas.com/doc/en/pgmsascdc/v_010/gsub/n0gti8mzhn2bjkn1hf3yrhuk0wdz.htm. I also did a search on the Community and found some other resources: https://communities.sas.com/t5/forums/searchpage/tab/message?advanced=false&allow_punctuation=false&filter=includeTkbs,location&include_tkbs=true&location=tkb-board:library&q=batch%20jobs
I hope that helps.