01 Ab Initio Basics
01 Ab Initio Basics
Course Content
Ab Initio Architecture
Overview of Graph
Ab Initio functions
Basic components
Partitioning and De-partitioning
Case Studies
Course Objective
Ab Initio Architecture
July 6, 2010
Introduction
Data warehousing
Batch processing
Click-stream analysis
Data movement
Data transformation
GDE
GDE
Component
ComponentSuite
Suite
Partitioners,
Partitioners,Transforms,
Transforms,...
...
Shell
Shell
C++
C++
User
User
Components
Components
3rd
3rdParty
Party
Components
Components
The
TheCo>Operating
Co>OperatingSystem
System
Native
NativeOperating
OperatingSystems
Systems(Unix,
(Unix,Windows,
Windows,OS/390)
OS/390)
Host Machine 1
Unix Shell Script or NT Batch File
Supplies parameter values to underlying
programs through arguments and
environment variables
Controls the flow of data through pipes
Usually generated using the GDE
Co>Operating System
Ab Initio Built-in
Component Programs
(Partitions, Transforms etc)
Host Machine 2
User
Programs
User
Programs
Co-Operating
System
Operating System
( Unix , Windows NT )
Operating System
Co-operating System
On a typical installation, the Co-operating system is
installed on a Unix or Windows NT server while the
GDE is installed on a Pentium PC.
CO>Operating System
Layered on the top of the operating system
Unites a network of computing resources into a data-processing
system with scalable performance
Co>Operating system runs on
can talk to the Co-operating system using several protocols like Telnet,
Ab Initio / Rexec and FTP
GUI for building applications
Co-operating system and GDE have independent release mechanisms
Co-operating system upgrade is possible without change in the GDE
release
Note: During deployment, GDE sets AB_COMPATIBILITY to the Co>Operating System version number. So, a change
in the Co>Operating System release requires a re-deployment
Overview of Graph
July 6, 2010
Dataset
Components
L1
L1
L1*
L1*
Score
Select
out*
deselect*
Good
Customers
Customers
L1
Flows
Other
Customers
Ports
Layout
Types of Datasets
Datasets can be of following types:
Input Datasets
Output Datasets
Runtime Environment
The graph execution can be done from the GDE itself
or from the back-end as well
A graph can be deployed to the back-end server as a
Unix shell script or Windows NT batch file.
The deployed shell or the batch file can be executed
at the back-end
A sample graph
Layout
1.Layout determines the location of a resource.
2.A layout is either serial or parallel.
3.A serial layout specifies one node and one directory.
4.A parallel layout specifies multiple nodes and multiple directories. It is
permissible for the same node to be repeated.
5.The location of a Dataset is one or more places on one or more disks.
6.The location of a computing component is one or more directories on one
or more nodes. By default, the node and directory is unknown.
7.Computing components propagate their layouts from neighbors, unless
specifically given a layout by the user.
Layout
file on Host X
files on
Host X
Host W Host X
Host Y Host Z
Serial
Parallel
file on Host W
3-way multifile on
Hosts X,Y,Z
Controlling Layout
Propagate (default)
Bind layout to that
of another component
Use layout of URL
Construct layout
manually
Run on these
hosts
Database components
can use the same layout
as a database table
May 18, 2010
Phase of a Graph
Phases are used to break up a graph into blocks for performance tuning.
The temporary files created by phasing are deleted at the end of the phase,
regardless of whether the run was successful.
Phase 0
Phase 1
May 18, 2010
View Phase
Set Phase
Client
Client
Host
Host
Processing
nodes
Processing
Nodes
May 18, 2010
Host
Host
GDE
GDE
Client
Client
Agent
Agent
Host
Host
Agent
Agent
Processing
nodes
Processing
Nodes
May 18, 2010
Host
Host
Agent
Agent
GDE
GDE
Client
Client
Host
Host
Agent
Agent
ProcessingNodes
nodes
Processing
May 18, 2010
Client
Client
Agent
Agent
Host
Host
Agent
Agent
ProcessingNodes
nodes
Processing
May 18, 2010
GDE
GDE
Client
Client
Host
Host
Agent
Agent
Processing
nodes
Processing
Nodes
May 18, 2010
Client
Client
Host
Host
Processing
nodes
Processing
Nodes
May 18, 2010
Client
Client
Host
Host
Processing
nodes
Processing
Nodes
May 18, 2010
Client
Client
Agent
Agent
Host
Host
Agent
Agent
ProcessingNodes
nodes
Processing
May 18, 2010
Host
Host
GDE
GDE
Client
Client
Agent
Agent
Host
Host
Agent
Agent
Processing
nodes
Processing
Nodes
May 18, 2010
Client
Client
Host
Host
ProcessingNodes
nodes
Processing
May 18, 2010
Client
Client
Host
Host
ProcessingNodes
nodes
Processing
May 18, 2010
Ab Initio Functions
July 6, 2010
DML)
Field names consist of letters(az,AZ), digits(09),
underscores(_) and are Case sensitive
Keywords/Reserved words cannot be used as field names.
Keywords/Reserved Words
Field Names
0345John
Smith
0212Sam
Spade
0322Elvis
Jones
0492Sue
West
0221William
Black
Data Types
record
decimal(4) id;
string(10)
DML BLOCK
string(6)
first_name;
last_name;
end
0212,05-07-03, 950.00Sam,Spade
0322,17-01-00, 890.50Elvis,Jones
0492,25-12-02,1000.00Sue,West
0221,28-02-03, 500.00William,Black
record
decimal(,) id;
date(DD-MM-YY)(,) join_date;
decimal(7,2) salary_per_day;
string(,)
Precision
& Scale
string(\n)
first_name;
last_name;
end
Built-in Functions
Ab Initio built-in functions are DML expressions that
can manipulate strings, dates, and numbers
access system properties
Function categories
Date functions
Inquiry and error functions
Lookup functions
Math functions
Miscellaneous functions
String functions
May 18, 2010
Date Functions
date_day
date_day_of_month
date_day_of_week
date_day_of_year
date_month
date_month_end
date_to_int
date_year
datetime_add
datetime_day
datetime_day_of_month
datetime_day_of_week
datetime_day_of_year
datetime_difference
datetime_hour
datetime_minute
datetime_second
datetime_microsecond
datetime_month
datetime_year
May 18, 2010
Lookup Functions
lookup
lookup_count
lookup_local
lookup_count_local
lookup_match
lookup_next
lookup_next_local
Math Functions
Ceiling
decimal_round
decimal_round_down
decimal_round_up
Floor
decimal_truncate
math_abs
math_acos
math_asin
math_atan
math_cos
math_cosh
math_exp
math_finite
math_log
math_log10
math_tan
math_pow
math_sin
math_sinh
math_sqrt
math_tanh
May 18, 2010
Miscellaneous Functions
allocate
ddl_name_to_dml_name
ddl_to_dml
hash_value
next_in_sequence
number_of_partitions
printf
Random
raw_data_concat
raw_data_substring
scanf_float
scanf_int
scanf_string
sleep_for_microseconds
this_partition
translate_bytes
unpack_nibbles
String
Functions
char_string
decimal_lpad
decimal_lrepad
decimal_strip
is_blank
is_bzero
re_index
re_replace
string_char
string_compare
string_concat
string_downcase
string_filter
string_lpad
string_length
string_upcase
string_trim
string_substring
re_replace_first
string_replace_first
string_pad
string_ltrim
string_lrtrim
Lookup File
The file you want to use as a Lookup must fit into main memory
Lookup File associates key values with corresponding data values to index
records and retrieve them
Lookup parameters:
Key: Name of the key fields against which Lookup File matches its
arguments
Record Format: The record format you want Lookup File to use
when returning data records
We use Lookup functions to call Lookup Files where the first argument to
these lookup functions is the name of the Lookup File. The remaining
arguments are values to be matched against the fields named by the key
parameter.
lookup(file-name, key-expression)
The Lookup functions returns a record that matches the key values and has
the format given by the Record Format parameter.
May 18, 2010
Using Last-Visits
as a lookup file
Lookup File
Storage Methods
Serial lookup : lookup()
whole file replicated to each partition
Parallel lookup : lookup_local()
file partitions held separately
Lookup Functions
Name
Arguments
Purpose
lookup()
lookup_count()
- do -
lookup_next()
File Label
lookup_local
lookup_count_local()
- do -
lookup_next_local()
File Label
2.
temp::trans1(in) =
begin
temp.sum :: 0;..............Local variable declaration with field sum
end;
out.temp::trans2(temp, in) =
begin
temp.sum :: temp.sum + in. amount;
out. city :: in. city;
May 18, 2010
out.sum :: temp.sum;
Basic Components
July 6, 2010
Basic Components
Filter by Expression
Reformat
Redefine Format
Replicate
Join
Sort
Rollup
Aggregate
Dedup Sorted
Reformat
1. Reads record from in port
2. Changes the record format by dropping fields, or by using DML
expressions to add fields, combine fields, or transform the data in the
records.
3. Records written to out ports, if the function returns a success status
4. Records written to reject ports with descriptive message to error
port, if the function returns NULL
OUT
Diagnostic Ports :
REJECT
Reformat
Parameters of Reformat Component
transformn: Either the name of file, or a transform string, containing a transform function
corresponding to an out port n.
Ramp: contains a real number that represents a rate of reject events in the number of
records processed.
Tolerance value=limit + ramp*total number of records read
May 18, 2010
Reformat
Typical Limit and Ramp settings . .
Limit = 0
Ramp = 0.0
Limit = 1
Limit = 1
Ramp = 1
Logging: specifies whether or not you want the component to generate log records for
certain events. The values of logging parameter is True or False.
log_input: indicates how often you want the component to send an input record to
its log port.
For example: If you select 100,then the component sends every 100 th input record to its log
port
log_output: indicates how often you want the component to send an output record
to its log port.
For example: If you select 100,then the component sends every 100 th output record to its
log port
log_reject:indicates how often you want the component to send an reject record
to its log port.
For example: If you select 100,then the component sends every 100 th reject record to its log
port
Example of Reformat
The following is the data of the Input file :
Example of Reformat
In this example Reformat has the two transform functions, each of which writes
output to an out port
Reformat uses the following transform function to write output to out port out0:
Example of Reformat
Reformat uses the following transform function to write output to out port out1:
Example of Reformat
Filter by Expression
1. Reads record from the in port
2. Applies the expression in the select_expr parameter to each record. If the
expression returns
0 :it writes the record to deselect port & if you do not connect
deselect port, discards the record.
NULL :it writes the record to the reject port and a descriptive error
message to the error port.
3. Filter by Expression stops the execution of graph when the number of reject
events exceeds the tolerance value.
Input port
expr
true?
Yes
Out port
No
Deselect
May 18, 2010
Diagnostic Ports :
REJECT
Filter by Expression
Parameters of Filter by Expression Component :
Typical
..
Abort on any error
Abort after 50 errors
Abort if more than 2 in 100 records causes error
Never Abort
Filter by Expression
Logging: specifies whether or not you want the component to generate log records for
certain events. The values of logging parameter is True or False.
log_input: indicates how often you want the component to send an input record to
its log port.
For example: If you select 100,then the component sends every 100 th input record to its log
port
log_output: indicates how often you want the component to send an output record
to its log port.
For example: If you select 100,then the component sends every 100 th output record to its
log port
log_reject:indicates how often you want the component to send an reject record
to its log port.
For example: If you select 100,then the component sends every 100 th reject record to its log
port
Redefine Format
1. Redefine format copies data records from its input to its
output without changing the values in the
data records.
2. Reads records from in port.
3. writes the data records to the out port
with the fields renamed according to the record format of the
out port.
Parameters: None
personal_info;
salary;
May 18, 2010
Replicate
Example of Replicate
Suppose you want to aggregate the flow of records and also
send them to the another computer, you can accomplish this by
using Replicate component.
Aggregate
Reads record from the in port
If you have defined the select parameter, it applies the expression in the
select parameter to each record. If the expression returns
OUT
Diagnostic Ports :
REJECT
Aggregate
Parameters of Aggregate component :
Sorted-input :
Abort on first reject: The component stops the execution of graph at the
first reject event it generates.
Never Abort: The component does not stops execution of the graph, no
matter how many reject events it generates
Use Limit/Ramp: The component uses the settings in the ramp & limit
parameters to determine how many reject events to allow before it stops
the execution of graph.
May 18, 2010
Aggregate
Limit: contains an integer that represents a number of reject events
Ramp: contains a real number that represents a rate of reject events in the number of
records processed.
Logging: specifies whether or not you want the component to generate log records for
certain events. The values of logging parameter is True or False.
The default value is False.
log_input: indicates how often you want the component to send an input
record to its log port.
For example: If you select 100,then the component sends every 100th input record to its
log port
Example of Aggregate
Example of Aggregate
The Aggregate uses the following key specifier to sort the data.
Key
Example of Aggregate
After the processing the graph produces the following Output File :
Sort
Sort component sorts and merges the data records.
The sort component :
Reads the records from all the flows connected to the in port until it
reaches the number of bytes specified in the max-core parameter
Sorts the records and writes the results to a temporary file on disk
Repeat this procedure until it has read all the records
Merges all the temporary files, maintaining the sort order
Writes the result to the out port
Ports:
1.IN:records are read from this port
2.OUT:records after sorting are written to this port
Sort
i.
ii.
Join
1. Reads records from multiple input ports
2. Operates on records with matching keys using a multi-input transform function
3. Writes result to the output ports
Parameters of Join:
Count: An integer from 2 to 20 specifying number of following ports and
parameters. Default is 2.
In ports
Unused ports
Reject ports
Error ports
Record-required parameter
Dedup parameter
Select parameter
1.
Override-key parameter
1. Key: Name of the fields in the input record that must have matching values
for Join to call transform function
May 18, 2010
Join
Sorted-input:
Input must be sorted: Join accepts unsorted input, and permits the use of
maintain-order parameter
In memory: Input need not be sorted : Join requires sorted input, and
maintain-order parameter is not available.
Default is Input must be sorted
Logging: specifies whether or not you want the component to generate log records for
certain events. The values of logging parameter is True or False.
log_input: indicates how often you want the component to send an input
record to its log port.
For example: If you select 100,then the component sends every 100 th input record to its log
port
log_output: indicates how often you want the component to send an output
record
to its log port.
For example: If you select 100,then the component sends every 100 th output record to its log
port
Join
Max-core : maximum memory usage in bytes
Transform : either name of the file containing the transform function, or the transform
string.
Selectn: filter for data records before aggregation. One per inn port.
Abort on first reject: The component stops the execution of graph at the first
reject event it generates.
Never Abort: The component does not stops execution of the graph, no matter
how many reject events it generates
Use Limit/Ramp: The component uses the settings in the ramp & limit
parameters to determine how many reject events to allow before it stops the
execution of graph.
Ramp: contains a real number that represents a rate of reject events in the number of
records processed.
Driving: number of the port to which you connect the driving input. The driving input is
the
largest input. All the other inputs are read into memory.
The driving parameter is only available when the sorted-input parameter is set to
In memory: Input need not be sorted. Specify the port number as the value of the driving
parameter. The Join reads all other inputs into memory
Default is 0
Max-memory: maximum memory usage in bytes before Join writes temporary files to
disk. Only available when the sorted-input parameter is set to Inputs must be sorted.
Join
Maintain-order: set to True to ensure that records remain in the original order of the
driving input. Only available when the sorted-input parameter is set to In
memory:Input need not be sorted.
Default is False.
Override-keyn: alternative names for the key fields for a particular inn port.
Default value is 0.0
Dedupn: set the dedupn parameter to True to remove duplicates from the corresponding
inn port before joining.
Default is False, which does not remove duplicates.
Inner join: sets the record-requiredn parameter for all ports to True. Inner join
is the default.
Outer join: sets the record-requiredn parameters for all ports to False.
Explicit: allows you to set the record-requiredn parameter for each port
individually.
When there are 2 inputs, set record-requiredn to True for the input port for
which you want to call the transform for every record regardless of whether there
is a matching record on the other input port.
When there are more than 2 inputs, set record-requiredn to True when you
want to call the transform only when there are records with matching keys on all
input ports for which record-requiredn is True.
Example of Join
Example of Join
Example of Join
The sort component uses the following key to sort the data .
Custid
Join uses the following transform function to write output.
Join uses the default value, Inner join, for the join-type parameter.
Example of Join
Given the preceding data, record formats, parameter, and transform function,
the graph produces Output File with the following data.
Rollup
Rollup performs a general aggregation of data i.e. it reduces the group of records to a
single output record
Parameters of Rollup Component:
Sorted-input:
Key: names of the key fields Rollup can use to group or to define groups of data
records.
If the value of the key-method parameter is Use key-specifier ,you must specify the value
for the key parameter.
Transform : either name of the file containing the type and transform function, or the
transform string.
check-sort: indicates whether or not to abort execution on the first input record that is
out of sorted order. The Default is True.
This parameter is available only when key-method parameter is Use key-specifier
Rollup
Ramp: contains a real number that represents a rate of reject events in the number of
records processed.
Logging: specifies whether or not you want the component to generate log records for
certain events. The values of logging parameter is True or False.
log_input: indicates how often you want the component to send an input record to
its log port.
For example: If you select 100,then the component sends every 100 th input record to its log port
log_output: indicates how often you want the component to send an output record
to its log port.
For example: If you select 100,then the component sends every 100 th output record to its log port
log_reject:indicates how often you want the component to send an reject record
to its log port.
For example: If you select 100,then the component sends every 100 th reject record to its log port
Abort on first reject: The component stops the execution of graph at the first
reject event it generates.
Never Abort: The component does not stops execution of the graph, no matter how
many reject events it generates
Use Limit/Ramp: The component uses the settings in the ramp & limit parameters
to determine how many reject events to allow before it stops the execution of
graph.
May 18, 2010
Rollup
in:
Do for first record
Initialize:
..
in each group
temp:
Rollup: ...
in each group
Finalize: ...
in each group
out:
Dedup Sorted
Separates one specified record in each group of
records from the rest of the records in that group
Requires grouped input.
Reads grouped flow of records from the in port.
If your records are not already grouped, use Sort Component to group them
It applies the expression in the select parameter to each record. If the
expression returns
NULL : writes the record to the reject port & a descriptive error
message to the error port.
If you do not supply an expression for the select parameter, Dedup Sorted
processes all the records on the in port.
Dedup sorted considers any consecutive records with the same key value
to be in the same group.
OUT
DUP
Diagnostic Ports :
REJECT
Dedup Sorted
Parameters of Dedup Sorted Component :
Key: name of the key field, you want Dedup sorted to use when determining
group of data records.
select: filter for records before Dedup sorted separates duplicates.
keep: determines which record Dedup sorted keeps to write to the out port
first: keeps first record of the group. This is the default.
last: keeps the last record of the group.
unique- only: keeps only records with unique key values.
Dedup sorted writes the remaining records of the each group to the dup port
Reject- threshold: The components tolerance for reject events
Abort on first reject: The component stops the execution of graph at the first reject
event it generates.
Never Abort: The component does not stops execution of the graph, no matter how
many reject events it generates
Use Limit/Ramp: The component uses the settings in the ramp & limit parameters to
determine how many reject events to allow before it stops the execution of graph.
Limit: contains an integer that represents a number of reject events
Ramp: contains a real number that represents a rate of reject events in the number of
records processed.
Check- sort: indicates whether you want processing to abort on the first record that is out of
sorted order.
May 18, 2010
Dedup Sorted
Logging: specifies whether or not you want the component to generate log records
for certain events. The values of logging parameter is True or False.
log_input: indicates how often you want the component to send an input
record to its log port.
For example: If you select 100,then the component sends every 100th input record to its
log port
July 6, 2010
Multifiles
A Multidirectory
A directory spanning across partitions on different hosts
mfile://host1/u/jo/mfs/mydir
//host1/u1/jo/mfs
//host1/vol4/pA/mydir
//host2/vol3/pB/mydir
//host3/vol7/pC/mydir
Data
Partition
on Host2
Data
Partition
on Host3
<.mdir>
Control
Partition
Data
Partition
on Host1
A Multifile
A file spanning across partitions on different hosts
mfile://host1/u/jo/mfs/mydir/myfile.dat
//host1/u1/jo/mfs/mydir
/myfile.dat
Control
Partition
//host1/vol4/pA/mydir
/myfile.dat
Data
Partition
on Host1
//host2/vol3/pB/mydir
/myfile.dat
//host3/vol7/pC/mydir
/myfile.dat
Data
Partition
on Host2
Data
Partition
on Host3
Agent Nodes
A multifile
Control file
Parallelism
Parallel Runtime Environment
Where some or all of the components of an application datasets
and processing modules are replicated into a number of
partitions, each spawning a process.
Ab Initio can process data in parallel runtime environment
Forms of Parallelism
Component Parallelism
Pipeline Parallelism
Inherent in Ab Initio
Data Parallelism
Component Parallelism
When different instances of same component run on separate data sets
Sorting Customers
Sorting Transactions
Pipeline Parallelism
When multiple components run on same data set
Processing Record 99
Data Parallelism
When data is divided into segments or partitions and processes
run simultaneously on each partition
Expanded View
ns
o
i
it
t
r
Pa
Global View
Multifile
Partition by Round-robin
Writes records to each partition evenly
Block-size records go into one partition before moving on to
the next.
Record1
Record1
Record1
Record2
Record2
Record3
Record3
Record4
Record4
Record5
Record5
Record6
Record6
Record4
Record2
Record5
Record3
Record6
Partition 1
Partition 2
Partition 3
May 18, 2010
Partition by Key
Distributes data records to its output flow partitions according
to key values
100
100
91
91
57
57
25
25
122
122
213
213
Hash function
100 % 3
Hash value
91 % 3
57 % 3
25 % 3
122 % 3
213 % 3
57
213
100
91
25
122
Partition by Expression
Distributes data records to partitions according to DML
expression values
99 / 40
Expression
Value
2
91 / 40
57 / 40
25 / 40
22 / 40
73 / 40
DML
Expression
99
99
91
91
57
57
25
25
22
22
73
73
25
22
57
73
99
91
Broadcast
Combines all data records it receives into a single flow
Writes copy of that flow into each output data partition
Partition0 Partition1 Partition2
AA
BB
CC
DD
EE
FF
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
Partition by Percentage
Distributes a specified percentage of the total number of input
data records to each output flow
Record1
Record1
Record2
Record2
Record3
Record3
Record4
Record4
Record5
Record5
Record6
Record6
Record7
Record7
Record8
Record8
Record9
Record9
Record10
Record10
Partition0
Partition1
Record1
Record2
Record3
Record4
Record5
Partition2
Record6
Record7
Record8
Record9
Record10
Partition by Range
Distributes data records to its output flow partitions according to
the ranges of key values specified for each partition.
Typically used in conjunction with Find Splitter component for
better load balancing
Partition by Range
Find Split output
76
76
10
10
17
17
99
45
45
22
84
84
98
98
29
29
73
73
10
73
Partition0
Partition1
10
9
2
17
45
29
73
Partition2
76
84
98
Num_Partitions = 3
Key-Based
Balancing
Uses
Round-robin
No
Even
Record-independent
parallelism
Partition by Key
Yes
Key-dependent
parallelism
Partition by
Expression
Yes
Application specific
Broadcast
No
Even
Record-independent
parallelism
Partition by
Percentage
No
Depends on the
percentage specified
Application specific
Depends on splitters
Key-dependent
parallelism, Global
Ordering
Partition by Range
Yes
Departitioning Components
Gather
Concatenate
Merge
Interleave
Departitioning Components
Gather
Concatenate
Concatenate
Merge
Interleave
Departitioning Components
Summary of Departitioning Methods
Method
Ordering
Uses
No
Global
Interleave
No
Inverse of Round
Robin partition
Merge
Yes
Sorted
Creating ordered
serial flows
Gather
No
Arbitrary
Unordered
departitioning
Concatenate
Key-Based
Case Studies
July 6, 2010
Case Study 1
Field
Name
Data
Type
Cust_id
Decimal | (pipe)
None
amount
Decimal \n(newline)
None
Length/Delimiter Format/Mask
Cust_id
amount
215657
1000
462310
1500
462310
2000
215657
2500
462310
5500
Field Name
Data Type
Length/Delimite Format/Mask
r
Cust_id
Decimal
|(pipe)
None
Total_amount
Decimal
\n(newline)
None
Case Study 2
Consider the following BP_PRODUCT file , containing the
following fields :
Field Name
Data Type
Length/Delimiter
Format/Mask
product_id
Decimal
|(pipe)
None
product_code
String
|(pipe)
None
plan_details_id
Decimal
|(pipe)
None
plan_id
Decimal
|(pipe)
None
product_code
plan_details_id plan_id
147
OPS
11111
111
154
NULL
12121
222
324
VB
12312
111
148
PCAT
23412
999
476
VB
34212
666
Case Study 3
Data Type
Length/Delimiter
Format/Mask
Cust_id
String
|(pipe)
None
Cust_name
String
|(pipe)
None
cust_address
String
|(pipe)
None
newline
None
\n(newline)
None
Cust_name
Cust_address
215657
S Chakraborty
Saltlake
462310
J Nath
Kolkata
124343
D Banerjee
Kolkata
347492
A Bose
Kolkata
560124
C Tarafdar
Kolkata
439684
W Ganguly
Durgapur
Data Type
Length/Delimiter
Format/Mask
Cust_id
String
|(pipe)
None
Cust_name
String
|(pipe)
None
cust_address
String
|(pipe)
None
purchase_date
Date
|(pipe)
YYYYMMDD
product_name
String
|(pipe)
None
quantity
number
None
amount
number
None
new_line
none
\n(newline)
none
Cust_id
Cust_name
quantity amount
215657
Chakraborty Nagerbazar
20060626
P1
1000
462310
J Nath
Kolkata
20060626
P3
5000
124343
D Banerjee
Kolkata
20060626
P43
2123
Data Type
Length/Delimiter
Format/Mask
Cust_id
String
|(pipe)
None
Cust_name
String
|(pipe)
None
cust_address
String
|(pipe)
None
Purchase_date
number
|(pipe)
YYYYMMDD
product_name
String
|(pipe)
None
Total_sales
number
|(pipe)
none
newline
None
\n(newline)
None
Queries???
July 6, 2010
Thank You!!!
[email protected]