Key_generation Function In Bods

09.12.2020by
  1. Key_generation Function In Bods 2016
  2. Key Generation In Bods
  3. Key_generation Function In Bods 1
  4. Key Generation In Sap Bods
  5. Key Generation Function In Bods
  6. Key Generation Function In Sap Bods

Chateaux did a great job of understanding our overall needs, designing solutions, and implementing those solutions to support our growing business. Their professionalism and ability to work with both the business and technology folks has been very impressive! We look forward to working with the Chateaux team in a variety of capacities that will. Note on KeyGeneration: To generate artificial keys in DI we can use either KeyGeneration Transform or KeyGeneration Funtion. It looks into the table and fetches max. Existing key value and that will be used as a starting value. Based on this starting value, transform/function increments the value for each row. Dec 03, 2015  First, let's look at the keygeneration function. This is the function the can be called only from the dataflow (when used in column mapping), so we are not interested in it at this point as we cannot use it in the Data Services scripts. This function is actually similar to the KeyGeneration transform object that can be used as part of a dataflow as well, and it is used. Feb 29, 2012 Although the Key Generation Transform actually does execute a SQL I put it into the Streamline category because it executes one and only one SQL at the start of the transform and this is a 'select max(key) from table'. In almost all cases this key will be the primary key column which is indexed.

SAP Data services is one of the finest ETL(Extract, Transform, Load) tools which delivers a single enterprise-class solution for data integration, data quality, data profiling, and text data processing that allows you to integrate, transform, improve, and deliver trusted data to. First, let's look at the keygeneration function. This is the function the can be called only from the dataflow (when used in column mapping), so we are not interested in it at this point as we cannot use it in the Data Services scripts. Apr 23, 2019 This video explains about GENERATED KEY COLUMN feature of table comparison. Visit the below tutorials before viewing this: Basics of Table Comparison: https.

Skip to end of metadataGo to start of metadata

Although the Key Generation Transform actually does execute a SQL I put it into the Streamline category because it executes one and only one SQL at the start of the transform and this is a 'select max(key) from table'. In almost all cases this key will be the primary key column which is indexed. So to find a max() the database has to walk to the last element in the key which is an operation done in no-time. Based on this starting value, the transform increases the value by one for each row with OP code Insert or Normal and puts the value into the 'Generated Key Column'.

Throughput

237'000 rows/sec

CPU

100%

Memory

none

Disk

none

DoP

singularization point

Transform Usage


Transform Settings


To test it, we had to rename the column from DI_ROW_ID to KEY_ID which is the primary key name of another table.

The execution time for above flow without the key generation was 84 secs, so the overhead for the query is about 20 secs. The execution time with Key Generation Transform added as well was 422 seconds which is quite surprising.

Key_generation Function In Bods 2016

Anyway, no memory is consumed, only CPU and the throughput is still at excellent 237'000 rows per second.


Attachment
Job_Key_Generation_Transform.zip (4.98 KB)


Key Generation In Bods


Skip to end of metadataGo to start of metadata

When you import a table with an Identity column it is treated like any other regular INT datatype column. And when you load it, an error is raised by the database: 'An explicit value kann not be inserted into an Identity column if IDENTITY_INSERT is set to OFF'.

But how can we load a table that has an Identity column?

First, simply do not set any column to type Identity. DI has the key generation transform to provide values for surrogate keys. It works similar to the identity column logic, take the highest key value and increment it by one. However, the Identity column checks the highest value for each and every row, Key Generation transform only once, at the beginning of the dataflow. So you cannot use the Key Generation if....

Key_generation Function In Bods 1

  • two DI dataflows run in parallel loading the same table. Both will use the same key values.
  • DI loading the table and at the same time some other application inserts data.

What is the problem with identity columns actually? DI adds them into the insert statement, even if they have a NULL value and SQL Server complaints. It wouldn't be a problem if SQL Server would look at the column value, figure there is a NULL value and hence ignore the column by itself. But no, the logic for SQL Server is: Identity column has to be omitted from the insert statement.

Actually, this can be accomplished in DI quite easily. DI does not base the insert/update/delete statement on the table schema, it does use the columns of the input schema. So all we have to do is to remove the identitiy column from the query before the table loader. And as this column is the physical primary key to the table, wher have to check the flag 'use input keys' in the table loader.

Just keep in mind, above works for insert statements only. In update statements the primary key column is not updated anyway, it is used in the where clause only. Hence, for deletes/updates not only is there no problem, but the key column is required there. That makes a dataflow with mixed inserts and updates quite ugly. We need two separate streams of data, updates go into the table unchanged, inserts are converted to normal rows so we can add a query downstream where the identity column is omitted.

Key Generation In Sap Bods

A completely different approach is to do what the SQL Server error message advised us: To issue the command 'set IDENTITY_INSERT table ON'. This is a session command, so needs to be part of the session loading the data. A sql() function call cannot be used as this would be a session of its own. The only place where you can add that is the Preload Command in the table loader.

Key Generation Function In Bods


Key Generation Function In Sap Bods

Neither of this solution is perfect. So long term a feature has to be implemented where the enduser simply can chose what method should be used, let DI generate the key or omit the identity column in inserts.

Comments are closed.