Documente Academic
Documente Profesional
Documente Cultură
server)Priority
On Unix — A colon-
separated list of the URLs
of the files
On Windows — A
semicolon-separated list
of the URLs of the files
$HOME/.abinitiorc
$HOME/abinitio.abrc
On Windows — In the
user's home directory:
$HOME\.abinitiorc
$HOME\abinitio.a
brc
$AB_HOME/config/abinitio
rc
On Windows — The
pathname of the system
configuration file is:
$AB_HOME\config\abinitio
rc
Over-reliance on databases
GDE:
In your EME Datastore settings, please
provide the details of your target EME server. In your Run
settings, please provide the details of your Sandbox server.
Go the Project -> check out screen to do
the necessary checkout of the objects.
Parameters:
Name Value
----------- --------------------------
select_expr next_in_sequence()>1
Parameters:
Name Value
----------- --------
key {}
keep last
Sample Records:
Record 1:
[record
WS_B_CLAIM_NBR "BILL FILE "
WS_B_CHECK_NBR " "
WS_B_BILL_NBR " 2009-02-
20 "
WS_B_CLAIMANT_ID " "
WS_B_BILL_RECVD_DT " "
WS_B_BILL_PAID_DT " "
Record 2:
[record
WS_B_CLAIM_NBR "1890070194"
WS_B_CHECK_NBR "371521908"
WS_B_BILL_NBR
"18900701940120000131133906410"
WS_B_CLAIMANT_ID "01"
WS_B_BILL_RECVD_DT "2000-01-26"
WS_B_BILL_PAID_DT "2000-01-31"
Record 432017:
[record
WS_B_CLAIM_NBR "6524235006"
WS_B_CHECK_NBR "600230290"
WS_B_BILL_NBR
"65242350060220090217100052724"
WS_B_CLAIMANT_ID "02"
WS_B_BILL_RECVD_DT "2009-01-29"
WS_B_BILL_PAID_DT "2009-02-18"
[record
WS_B_CLAIM_NBR "BILL FILE "
WS_B_CHECK_NBR " "
WS_B_BILL_NBR E" 2009-
02-20\x04\x32\x01%\x00\x00Â\b\x30\x20Ê@ "
WS_B_CLAIMANT_ID " "
WS_B_BILL_RECVD_DT " "
WS_B_BILL_PAID_DT " "
Examples
Code:
$ m_eval 'unique_identifier()'
"136fe-9a55-b-s0183dd943f-2"
$ m_eval 'unique_identifier()'
"1370e-9a55-b-s0183dd943f-2"
Details
Over-reliance on databases
There are many things that you can (and should) do outside the
database.
Argument Description
file_label A string constant representing the name of a LOOKUP
FILE component.
expression An expression on which to base the match. Typically,
this is an expression taken from the input record. The
function implicitly casts expression to the type of the
corresponding key field(s).
The number of expression arguments must match the
number of semicolon-separated field names in the key
specifier of file_label. The maximum number is 24. Any
number of expressions can be NULL. If all expressions
match the corresponding key fields in the lookup
record, the record is considered a match.
You can omit the expression arguments if the key for
this lookup is empty: that is, if the key parameter of the
Lookup File component is set to { }. Note that all
records will match and the first one will be selected.
http://rc.allstate.com
API Utility
Direct - True Direct - Fa
1) Record by record 1) Bulk load
loading 2) Disables
2) Checks index/constraints at
constraints for beginning, loads data and
records enables index. 1) Bulk Loading
3) Very slow 3) If data has duplicates, 2) Between API a
Serial 4)Suitable for base index becomes unusable Utility - direct-tru
Loading load while re-building performance.
MFS Graph will fail saying 1) Graph will run
Loading Same as above index built on table 2) Slow performa
Short answer
Details
Loading serially
OR
Dummy_Key Recs_Count
X 2340
Recs_Count
2340
Steps to achieve:
Define AB_XFR_PROFILE_LEVEL as graph level local
parameter and provide the value as “statement”.
Redirect the log port of your XFR component to a
file. It will provide more details from performance
perspective.
Scenario:
1) They get a no of day’s value from mainframe and
they need to subtract from 18500101
Before change:
(date(“YYYYMMDD”)datetime_add((date("YYYYMMDD
"))"18500101", days-1)
After change:
(date("YYYYMMDD")) (days - 18263)
After change:
Error:
========= Error from
PBKS_COMPANY_ID_POLICY_NUM_SOURCE_SYSTE
M_ENTY_ID_CODE_.Sort.004 on
abihost ========= Memory allocation failed
(8388608 bytes).
Current data ulimit is 'unlimited'.
Current vmem ulimit is 'unlimited'.
Current address space ulimit is 'unlimited'.
Heap is at least 35739328 bytes already.
parameter_file :
$AI_MAPPING/ewpoc_table_details.txt
parameter_row : $
[string_split(re_get_match(parameter_file,
TABLE_CD+":.*"), "\n")[0]]
f36:EWT_CLM_STATUS_HIST:
{f36_adw_claim_id}:
f37:EWT_CLM:{f37_adw_claim_id}:
f36:EWT_CLM_STATUS_HIST:
{f36_adw_claim_id}:
From step-3,
TABLE_NAME is EWT_CLM_STATUS_HIST
PARTITION_KEY is {f36_adw_claim_id}
Code:
$ m_eval '(datetime("YYYY-MM-DD
HH24:MI:SS+ZONE"))"2009-08-06 18:34:23+0600"'
"2009-08-06 18:34:23+0600"
But we can overcome all the extra effort with extra type
casting the data. See the below examples for more details:
When you will try to load this value to Oracle it will failed
saying invalid month. I know many of you are curious to
know why Abinitio treated as the valid date but this is how it
works.
In the above case, If you reformat the date in any way, the
space embedded in the date would have been replaced with
a zero.
That is why the cast to an integer and back allows this to
work. But if you are just copying the column without
changing its format in any way then we do not check.
Examples
The following examples show the use of the member
operator.
Record Format
If this is not true of your existing record format, you can alter
an existing transform component or add a new one before
the SORT to optimize your record format. You can then use
another transform after your sort to return the records to your
required format. The extra overhead of reformatting is often
compensated for by the quicker sort.
Compression
If you are sorting a volume of data that will not fit within the
amount of memory specified by the max_core parameter, the
sort will need to spill all of its records to disk. If a large
volume of data needs to be written to disk, the I/O time used
for this operation may be significant enough that it makes
sense to compress the data before writing it to disk. As
changing this parameter to compress spill files can add
significant CPU time to your graph, it is important to
benchmark your graph with realistic amounts of data before
and after making this change. For example, if the disk I/O
rate is relatively high (compared to CPU), it may be that the
Sort component will run faster without the compression.
Code:
m_eval 're_match_replace("Mon Tue Wed","(.{3})(.{3})(.
{3})","$3 $2 $1"
)'
"Wed Tue Mon"
In most cases, the most efficient and elegant way to get the
text form of a number is to cast it to a decimal type. For
example, if x is a real(8), you can get the text form of its
value formatted with an explicit decimal point, with four digits
to the right of the decimal, with the expression:
(decimal("".4))x
if (d < 42)
Mainframe IssuesResolution
Scenario 1:
Scenario 2:
-------------------------------------------
---------------------
Trouble starting job:
Remote host: mvsusys
User name: ABIEPC
Startup method: telnet
Remote AB_HOME: /apps/abi/abinitio
Local interface: 10.48.74.11 (from
AB_HOST_INTERFACE)
===========================================
=====================
Scenario 3:
[DB00109,DB00112,DB00200,DB00113,B148,B1105
,B1108,B1101,B1,B1104,B1103]
ABINITIO(DB00109): Error getting the
database layout.
ABINITIO(DB00112): Subprocess m_db
returned with exit code 4.
ABINITIO(DB00112): It was called as: m_db
hosts
/export/home/rrudnick/sandbox/apt/hrm/ic/db
/testv_db2hrm.dbc -select SELECT
agn_agent_type_cd, agn_agent_nbr FROM
testv.P1T_TOT_AGENT WHERE agn_end_eff_dt =
'9999-12-31'
ABINITIO(DB00112): The following errors
were returned:
ABINITIO(DB00112):
-------------------------------------------
----------
-------------------------------------------
---------------------
Trouble starting job:
Remote host: mvsasys
User name: HRMABID
Startup method: telnet
Remote AB_HOME: /apps/abi/abinitio
Local interface: 10.48.74.75
===========================================
=====================
ABINITIO(DB00112):
-------------------------------------------
----------
[Hide Details]
Cause of Error: [DB00112]
DB00112_1: 4
DB00112_2: m_db hosts
/export/home/rrudnick/sandbox/apt/hrm/ic/db
/testv_db2hrm.dbc -select SELECT
agn_agent_type_cd, agn_agent_nbr FROM
testv.P1T_TOT_AGENT WHERE agn_end_eff_dt =
'9999-12-31'
DB00112_0: m_db
DB00112_3: [DB00200]
Database Package Version: 2-14-104-e11-1
Base Error: [DB00113]
DB00113_0: m_db
DB00113_1: mvsasys
Execution starting...
Error reported with 'mp error' command
layout4
Error getting the database layout.
ABINITIO: Fatal Error
Script end...
ERROR : ++++ FAILED ++++ Job
clifeii_018_clifeii_018_ic_002_rfmt_af_hrm_
common_layout failed.
Failed
Scenario 4:
[R147,R3999]
Could not create working directory: Agent
failure
Base File =
"file://mvsasys/~mvsqds/RNN.EDW.EW368.NOVA.PR
OCESS3.SRTD.OCTQC01,%20recfm(vb),
%20varstring,%20recall,recfm(vb)
varstring
recall"
Work Dir =
"file://mvsasys/~ab_data_dir/a304a48-
48cfd68d-16c2-000"
Error details:
ABINITIO: start failed on node mvsasys
Could not start agent:
Cannot create agent data directory: No
space left on device
Path = "/apps/abi/data/a304a48-48cfd68d-
16c2-000"
Scenario 5:
===========================================
=====================
Waiting for login prompt ...
responding ... done.
Waiting for password prompt ...
responding ... done.
Waiting for command prompt ... got it.
Waiting for command prompt ... got it.
-------------------------------------------
---------------------
Trouble starting job:
Remote host: mvssw91
User name: ABIPRM1
Startup method: telnet
Remote AB_HOME: /apps/abi/abinitio
Local interface: 10.66.83.160
===========================================
=====================
Scenario 6:
---------------------------------------------
-------------------
Trouble starting job:
Remote host: mvsasys
User name: TESTZ
Startup method: rexec
Remote AB_HOME: /apps/xt01/abinitio-V2-
14-1
Local interface: 10.48.74.72
=============================================
===================
Scenario 7:
Execution starting...
[D205]
Trouble creating layout "layout-
Unload_Products_Using_Q_Schema__table_":
[Show Details]
[R147,R3999,B148,B1105,B1108,B1101,B1,B1104,B
1103]
Could not create working directory: Remote
process did not start correctly
Base File = "file://mvsesys/"
Work Dir =
"file://mvsesys/~ab_data_dir/a311cca-
48d7400f-48c2-000"
Error details:
mvsesys: Remote job failed to start up
=============================================
===================
EZA4386E rshd: Permission denied.
---------------------------------------------
-------------------
Trouble starting job:
Remote host: mvsesys
User name: awetlrun
Startup method: rsh
Remote AB_HOME: /apps/xt01/abinitio-V2-
14-1
Local interface: 10.49.28.202
=============================================
===================
Solutions:
Eg:
(abinitio)abinitio@xtnb1dv1 : /export/home/abinitio
=> m_df //mvsgl93/tmp
1024-Blocks Used Avail Cap Skew
Filesystem
350,640 137,440 213,200 39%
//mvsgl93/tmp
If you know its space issue, during day time please raise
ticket to “3OS390_SOL”/jack arras. If it is off time, please
contact ATSC/DCO to raise incident against IOM/zOS.
protocol://hostname/pathname
Where:
The value of protocol represents the type of dataset to
which the URL points: file, mfile, or mvs.
The value of hostname specifies the computer where
the file or control partition resides.
The value of pathname is an absolute pathname
indicating where on the computer the file or control
partition resides. It must be in the form accepted by the
native operating system of that computer.
/pathname/filename
Comparisons
Any arithmetic expression containing a NULL always
evaluates to NULL. For example, 10 + NULL = NULL. In fact,
all operators (except concatenation and the DECODE
function) return null when given a null operand.
Some invalid examples:
Example 1:
A NULL is not equal to a NULL:
SELECT * FROM emp WHERE NULL = NULL;
Example 2:
A NULL cannot be "not equal" to a NULL either:
SELECT * FROM emp WHERE NULL <> NULL;
Example 3:
A NULL does not equal an empty string either:
SELECT * FROM emp WHERE NULL = '';
Valid examples
Example 1:
Select column values that are NULL:
SELECT * FROM emp WHERE comm IS NULL;
Example 2:
Select column values that are NOT NULL:
SELECT * FROM emp WHERE comm IS NOT NULL;
Example 3:
Change a column value to NULL:
record
string(“|”) code;
string(“\n”) description;
end;
Here are two records provided:
[record
code " AThis text describes type A\nB "
description "This text describes type B"
]
record
string(“\n”) line;
end;
2 5 1 9 4 9 2 35 24
2 5 9 35
or
[vector 0, 1, 4, 9, 16]
Example 1:
Code:
let integer(4) no_of_managers
=first_defined(lookup_count("Stores Lookup", in0.store_no),
0);
let integer(4) idx=0;
out.store_managers :: for (idx, idx < no_of_managers):
lookup_next("Stores Lookup").store_manager;
Example 2:
Code:
let integer(4) no_of_managers
=first_defined(lookup_count("Stores Lookup", in0.store_no),
0);
let integer(4) idx=0;
let string("\1")[integer(4)] store_managers =allocate();
for (idx, idx < no_of_managers)
begin
store_managers= vector_append(store_managers,
lookup_next("Stores Lookup").store_manager);
end
out.store_managers :: store_managers;
Short answer
m_rollback has the same effect as an automatic rollback —
using the jobname.rec file, it rolls back a job to the last
completed checkpoint, or to the beginning if the job has
not completed any checkpoints. The m_cleanup commands
are used when the jobname.rec file doesn't exist and you
want to remove temporary files and directories left by
failed jobs.
If your job fails, determine the cause and fix the problem.
Then:
Synopsis
The Co>Operating System monitors and records the state of
jobs so that if a job fails, it can be restarted. This state
information is stored in files associated with the job and
enables the Co>Operating System to roll back the system to
its initial state, or to its state as of the most recent
checkpoint. Generally, if the application encounters a
failure, all hosts and their respective files will be rolled
back to their initial state or their state as of the most
recent checkpoint; you recover the job simply by rerunning
it.
Answer
An Ab Initio job is considered completed when the mp run
command returns. This means that all the processes
associated with the job — excluding commands you might
have added in the script end — have completed. These
include the process on the host system that executes the
script, and all processes the job has started on remote
computers. If any of these processes terminate abnormally,
the Co>Operating System terminates the entire job and
cleans up as much as possible.
This means that at the end of the load any table indexes
are left in an unusable state. They can be rebuilt calling
the handy stored procedure DUP_RBLD_UNUSABLE_IDX after
the load has completed, e.g. using Run SQL component in
later phase:
exec DUP_RBLD_UNUSABLE_IDX('${SCHEMA_NAME}','$
{TABLE_NAME}');
You should also consider unloading the raw data from the
database and doing the join in Ab Initio. This can turn out
to be faster than doing the join in the database itself.
To summarise:
1. Test on a representative configuration, with
representative data.
2. Examine the output from the log port.
3. If you want to use the /*+ parallel */ hint, you probably
want to run the component serially.
4. If you want Ab Initio to determine the parallelism, use a
MFS layout, and don't specify the /*+ parallel */ hint.
5. Consider unloading the data from Oracle and doing the
join in Ab Initio.
Note: This option has to be set for every graph you do.
Currently there is no way we can have that as default.
With PDL interpretation, you can avoid invoking the Ksh for
each shell interpretation (this happens at the background
which you might not have observed).