Вы находитесь на странице: 1из 6

What is the relation between EME , GDE and Co-operating system ? ans.

EME is said as enterprise metdata env, GDE as graphical devlopment env and Cooperating sytem can be said as asbinitio server relation b/w this CO-OP, EME AND GDE is as fallows Co operating system is the Abinitio Server. this co-op is installed on perticular O.S platform that is called NATIVE O.S .comming to the EME, its i just as repository in informatica , its hold the metadata,trnsformations,db config files source and targets informations. comming to GDE its is end user envirinment where we can devlop the graphs(mapping just like in informatica) desinger uses the GDE and designs the graphs and save to the EME or Sand box it is at user side.where EME is ast server side. What is the use of aggregation when we have rollup as we know rollup component in abinitio is used to summirize group of data record. then where we will use aggregation ? ans: Aggregation and Rollup both can summerise the data but rollup is much more convenient to use. In order to understand how a particular summerisation being rollup is much more explanatory compared to aggregate. Rollup can do some other functionalities like input and output filtering of records. Aggregate and rollup perform same action, rollup display intermediat result in main memory, Aggregate does not support intermediat result what are kinds of layouts does ab initio supports Basically there are serial and parallel layouts supported by AbInitio. A graph can have both at the same time. The parallel one depends on the degree of data parallelism. If the multi-file system is 4-way parallel then a component in a graph can run 4 way parallel if the layout is defined such as it's same as the degree of parallelism. How can you run a graph infinitely? To run a graph infinitely, the end script in the graph should call the .ksh file of the graph. Thus if the name of the graph is abc.mp then in the end script of the graph there should be a call to abc.ksh. Like this the graph will run infinitely. How do you add default rules in transformer? Double click on the transform parameter of parameter tab page of component properties, it will open transform editor. In the transform editor click on the Edit menu and then select Add

Default Rules from the dropdown. It will show two options - 1) Match Names 2) Wildcard. Do you know what a local lookup is? If your lookup file is a multifile and partioned/sorted on a particular key then local lookup function can be used ahead of lookup function call. This is local to a particular partition depending on the key. Lookup File consists of data records which can be held in main memory. This makes the transform function to retrieve the records much faster than retirving from disk. It allows the transform component to process the data records of multiple files fastly. What is the difference between look-up file and look-up, with a relevant example? Generally Lookup file represents one or more serial files(Flat files). The amount of data is small enough to be held in the memory. This allows transform functions to retrive records much more quickly than it could retrive from Disk. A lookup is a component of abinitio graph where we can store data and retrieve it by using a key parameter. A lookup file is the physical file where the data for the lookup is stored. How many components in your most complicated graph? It depends the type of components you us. usually avoid using much complicated transform function in a graph. Explain what is lookup? Lookup is basically a specific dataset which is keyed. This can be used to mapping values as per the data present in a particular file (serial/multi file). The dataset can be static as well dynamic ( in case the lookup file is being generated in previous phase and used as lookup file in current phase). Sometimes, hash-joins can be replaced by using reformat and lookup if one of the input to the join contains less number of records with slim record length. AbInitio has built-in functions to retrieve values using the key for the lookup What is a ramp limit? The limit parameter contains an integer that represents a number of reject events The ramp parameter contains a real number that represents a rate of reject events in the number of records processed. no of bad records allowed = limit + no of records*ramp. ramp is basically the percentage value (from 0 to 1) This two together provides the threshold value of bad records. Have you worked with packages? Multistage transform components by default uses packages. However user can create his own set of functions in a transfer function and can include this in other transfer functions. Have you used rollup component? Describe how.

If the user wants to group the records on particular field values then rollup is best way to do that. Rollup is a multi-stage transform function and it contains the following mandatory functions. 1. initialise 2. rollup 3. finalise Also need to declare one temporary variable if you want to get counts of a particular group. For each of the group, first it does call the initialise function once, followed by rollup function calls for each of the records in the group and finally calls the finalise function once at the end of last rollup call. How do you add default rules in transformer? Add Default Rules Opens the Add Default Rules dialog. Select one of the following: Match Names Match names: generates a set of rules that copies input fields to output fields with the same name. Use Wildcard (.*) Rule Generates one rule that copies input fields to output fields with the same name. )If it is not already displayed, display the Transform Editor Grid. 2)Click the Business Rules tab if it is not already displayed. 3)Select Edit > Add Default Rules. In case of reformat if the destination field names are same or subset of the source fields then no need to write anything in the reformat xfr unless you dont want to use any real transform other than reducing the set of fields or split the flow into a number of flows to achive the functionality. What is the difference between partitioning with key and round robin?

Partition by Key or hash partition -> This is a partitioning technique which is used to partition data when the keys are diverse. If the key is present in large volume then there can large data skew. But this method is used more often for parallel data processing. Round robin partition is another partitioning technique to uniformly distribute the data on each of the destination data partitions. The skew is zero in this case when no of records is divisible by number of partitions. A real life example is how a pack of 52 cards is distributed among 4 players in a round-robin manner. How do you improve the performance of a graph?

There are many ways the performance of the graph can be improved. 1) Use a limited number of components in a particular phase 2) Use optimum value of max core values for sort and join components 3) Minimise the number of sort components 4) Minimise sorted join component and if possible replace them by in-memory join/hash join 5) Use only required fields in the sort, reformat, join components

6) Use phasing/flow buffers in case of merge, sorted joins 7) If the two inputs are huge then use sorted join, otherwise use hash join with proper driving port 8) For large dataset don't use broadcast as partitioner 9) Minimise the use of regular expression functions like re_index in the trasfer functions 10) Avoid repartitioning of data unnecessarily Try to run the graph as long as possible in MFS. For these input files should be partitioned and if possible output file should also be partitioned. How do you truncate a table? From Abinitio run sql component using the DDL "trucate table By using the Truncate table component in Ab Initio Have you eveer encountered an error called "depth not equal"? When two components are linked together if their layout doesnot match then this problem can occur during the compilation of the graph. A solution to this problem would be to use a partitioning component in between if there was change in layout. What is the function you would use to transfer a string into a decimal?

In this case no specific function is required if the size of the string and decimal is same. Just use decimal cast with the size in the transform function and will suffice. For example, if the source field is defined as string(8) and the destination as decimal(8) then (say the field name is field1). out.field :: (decimal(8)) in.field If the destination field size is lesser than the input then use of string_substring function can be used likie the following. say destination field is decimal(5). out.field :: (decimal(5))string_lrtrim(string_substring(in.field,1,5)) /* string_lrtrim used to trim leading and trailing spaces */ What are primary keys and foreign keys?

Ab Initio Best Practices

11 These are general guidelines that is ideal to implement in Ab Initio projects involving development, maintenance, testing activities. These are tips collected from various other sources from the net as well as from expert Ab Initio developers. Project access control - Checking In and Checking out practices * Before Checking In any graphs make sure that it has been deployed successfully. * Also before Checking In inform the ETL Admin about the same.

* To obtain the latest version of the graph Check Out from EME Data store. * Before running a graph Check Out from EME Data store to your individual sand box. In case the graph is not present in the EME Data store Check In and then run it. * The Abinitio Sand Box for all authorized users should be created only by the ETL Admin. * Before creating graphs on the server ensure that the User-ID, Password in the EME Settings and the Run Settings are the same. * Before modifying a graph ensure that it is locked to prevent any sharing conflicts. When you lock a graph you prevent other users modifying it at the same time. It is advisable that individual graphs are handled by separate users. * Do not create any table in the target database. In case it is needed, ask the DBA to do so. * Any database related activities and problems should be reported to the concerned DBA immediately. * Before you need to modify any table in the target database inform the concerned DBA and get his approval. * Do not change any of the environment variables. As these environment variables are global to all graphs they should not be tampered with. Only the ETL Admin has rights to set or modify the environment variables. Good practices for project implementation * While running a graph one may encounter errors. Hence maintain error logs for every error you come across. A consolidated, detailed error sheet should be maintained containing error related and resolution information of all users. This can be used for reference when facing similar errors later on. In case you have a database error contact the DBA immediately. * Ensure that you are using the relevant dbc file in all your graphs. * Always validate a graph before executing it and ensure that it validates successfully. Deploy the graph after successful validation. * ab_project_setup.ksh should be executed on regular basis. Contact ETL Admin for further details. * Before running a graph check whether the test parameters are valid. * After implementing the desired modifications save and unlock the graph. Handling run time related errors * If you are testing a graph created by some one else contact the person who created the graph or the person who made recent modifications to it. He will assist you or himself perform the needful. * If the error encountered relates to an Admin settings problem contact the ETL Admin immediately. * If you face a problem that you have not encountered and resolved before, look in to the consolidated error sheet and check to see whether that problem has been previously faced and resolved by any other user. You can also approach various online tech forums to get further input on the error. Documentation practices * Maintain documents regarding all the modifications performed on existing graphs or scripts. * Maintain ETL design documents for all graphs created or modified. The documents should be modified accordingly if any changes are performed on the existing graphs.

* While testing any graph follow the testing rules as per the testing template. Maintain documents for all testing activities performed. What is good about underlying tables * Ensure that in all the graphs where we are using RDBMS tables as input, the join condition is on indexed columns. If not then ensure that indexes are created on the columns that are used in the join condition. This is very important because if indexes are absent then there would be full table scan thereby resulting in very poor performance. Before execution of any graph use Oracle's Explain Plan utility to find the execution path of query. * Ensure that if there are indexes on target table, then they are dropped before running the graph and recreated after the graph is run. * If possible try to shift the sorting or aggregating of data to the source tables (provided you are using RDBMS as a source and not a flat file). SQL order by or group by clause will be much faster than Ab Initio because invariably the database server would be more powerful than Ab Initio server (even otherwise SQL order by or group by is done efficiently (compared to any ETL tool) because Oracle runs the statement in optimal mode. * Bitmap indexes may not be created on tables that are updated frequently. Bitmap indexes tend to occupy a lot of disk space. Instead a normal index (B-tree index) may be created. DML & XFR Usage * Do not embed the DML if it belongs to a landed file or if it is going to be reused in another graph. Create DML files and specify as path. * Do not embed the XFR if it is going to be re-used in another graph. Create XFR files and specify as path. Efficient usage of components * Skinny the file, if the source file contains more data elements than what you need for down stream processing. Add a Reformat as your first component to eliminate any data elements that are not needed for down stream processing. * Apply any filter criteria as early in the flow as possible. This will reduce the number of records you will need to process early in the flow. * Apply any Rollups early in the flow as possible. This will reduce the number of records you will need to process early in the flow. * Separate out the functionality between components. If you need to perform a reformat and filter on some data, use a reformat component and a filter component. Do not perform Reformat and filter in the same component. If you have a justifiable reason to merge functionality then specify the same in component description.