Datastage Transformer Functions
Datastage Transformer Functions
The following functions are in the Type Conversion category of the expression editor. Square
brackets indicate an argument is optional. The default date format is %yyyy-%mm-%dd.
Char
Generates an ASCII character from its numeric code value. You can optionally specify the
allow8bits argument to convert 8-bit ASCII values.
Char(65)
DateToString
Returns the string representation of the given date. The format of the string can optionally be
specified.
DateToString(mylink.mydate)
The following example outputs the date contained in the column mylink.mydate to a string with
the format dd:mm:yyyy. If mylink.mydate contained the date 18th August, 2009, then the output
string would be “18:08:2009″:
DateToString(mylink.mydate, "%dd:%mm:%yyyy")
DateToDecimal
Returns the given date as a packed decimal value. If your target decimal specifies a scale, part of
the date appears after the decimal point. You can optionally specify a format string that specifies
how the date is stored in the decimal number. The default format string is “%yyyy%mm%dd”,
so, for example, the date 2009-08-25 is stored as the decimal number 20090825. Format strings
can only specify a format that contains numbers. For example, you cannot specify a format string
such as “%yyyy-%mm-%dd”, because the hyphen character (-) cannot be stored in a packed
decimal value. The following tokens are valid for conversions to or from decimal values:
If the column mylink.basedate contains the date 2012-08-18, and the target column has a length
of 10 and a scale of 2, then the following function stores the date as the decimal number
201208.18:
DateToDecimal (mylink.basedate)
DecimalToDate
Returns the given packed decimal as a date. Both the sign and the scale of the decimal number
are ignored when it is converted to a date. You can optionally specify a format string that
specifies how the date is stored in the decimal number. The default format string is “%yyyy
%mm%dd”, so, for example, the date 2009-08-25 is stored as the decimal number 20090825.
Format strings can only specify a format that contains numbers. For example, you cannot specify
a format string such as “%yyyy-%mm-%dd”, because the hyphen character (-) cannot be stored
in a packed decimal value. The following tokens are valid for conversions to or from decimal
values:
%yyyy (four-digit year)
If the column mylink.mydecdata contains the value -201208.18, then the following function
returns the date 2012-08-18:
DecimalToDate (mylink.basedate)
DecimalToDecimal
Returns the given decimal in decimal representation with precision and scale specified in the
target column definition. The argument rtype optionally specifies a rounding type, and is set to
one of the following values:
ceil. Round the source field toward positive infinity. For example, 1.4 -> 2, -1.6 -> -1.
floor. Round the source field toward negative infinity. For example, 1.6 -> 1, -1.4 -> -2.
round_inf. Round or truncate the source field toward the nearest representable value, breaking
ties by rounding positive values toward positive infinity and negative values toward negative
infinity. For example, 1.4 -> 1, 1.5 -> 2, -1.4 -> -1, -1.5 -> -2.
trunc_zero. Discard any fractional digits to the right of the rightmost fractional digit supported
in the destination, regardless of sign. For example, if the destination is an integer, all fractional
digits are truncated. If the destination is another decimal with a smaller scale, round or truncate
to the scale size of the destination decimal. For example, 1.6 -> 1, -1.6 -> -1.
Input: decimal (decimal) [,rtype (string)]
Output: result (decimal)
Examples. If the column mylink.mydec contains the decimal number 2.5345, the
following function returns the decimal number 00000002.54.
DecimalToDecimal(mylink.mydec,"ceil")
DecimalToDecimal(mylink.mydec,"floor")
DecimalToDecimal(mylink.mydec,"trunc_zero")
DecimalToDecimal(mylink.mydec,"round_inf")
In all these examples, the target decimal has a length of 10 and a scale of 2.
DecimalToDFloat
Returns the given decimal in dfloat representation. The argument “fix_zero” optionally specifies
that all zero decimal values are regarded as valid (by default, decimal numbers comprising all
zeros are treated as invalid).
DecimalToDFloat(mylink.mydec,"fix_zero")
If the column mylink.mydec contains the decimal number 00012344.00 the following function
returns the dfloat number 1.23440000000000000E+04.
DecimalToDFloat(mylink.mydec,"fix_zero")
If the column mylink.mydec contains the decimal number 00012344.120 the following function
returns the dfloat number 1.23441200000000010E+04.
DecimalToDFloat(mylink.mydec,"fix_zero")
If the column mylink.mydec contains the decimal number 00012344.120 the following function
returns the dfloat number 1.23441200000000010E+04.
DecimalToDFloat(mylink.mydec)
If the column mylink.mydec contains the decimal number 00012344.000 the following function
returns the dfloat number 1.23440000000000000E+04.
DecimalToDFloat(mylink.mydec)
DecimalToString
Returns the given decimal as a string. The argument “fix_zero” optionally specifies that all zero
decimal values are regarded as valid (by default, decimal numbers comprising all zeros are
treated as invalid). This covers the case where the sign bits of the packed decimal representation
are all 0 as well as all the content digits. This cast is not considered valid unless “fix_zero” is
true.
DecimalToString(mylink.mydec,"suppress_zero")
If the column mylink.mydec contains the decimal number 00000004.00, the following function
returns the string “0000000000000000000000000004.0000000000″.
DecimalToString(mylink.mydec,"fix_zero")
If the column mylink.mydec contains the decimal number 00012344.00, the following function
returns the string “12344″.
DecimalToString(mylink.mydec,"suppress_zero")
If the column mylink.mydec contains the decimal number 00012344.00, the following function
returns the string “0000000000000000000000012344.0000000000″.
DecimalToString(mylink.mydec,"fix_zero")
If the column mylink.mydec contains the decimal number 00012344.120, the following function
returns the string “0000000000000000000000012344.1200000000″.
DecimalToString(mylink.mydec,"fix_zero")
If the column mylink.mydec contains the decimal number 00012344.120, the following function
returns the string “12344.12″:
DecimalToString(mylink.mydec,"suppress_zero")
If the column mylink.mydec contains the decimal number 00012344.120, the following function
returns the string “0000000000000000000000012344.120000000″.
DecimalToString(mylink.mydec)
If the column mylink.mydec contains the decimal number 00012344.000, the following function
returns the string “0000000000000000000000012344.0000000000″.
DecimalToString(mylink.mydec)
DecimalToTime
Returns the given packed decimal as a time. You can optionally specify a format string that
specifies how the time is stored in the decimal number. The default format string is ” %hh%nn
%ss”, so, for example, the time 14:03:22 is stored as the decimal number 140322. Format strings
can only specify a format that contains numbers. For example, you cannot specify a format string
such as “%hh:%nn:%ss”, because the colon character (:) cannot be stored in a packed decimal
value. The following tokens are valid for conversions to or from decimal values:
%ss.N (two-digit seconds, plus the number of fractional digits allowed. The number of fractional
digits is from one to six inclusive).
If your specified format includes microseconds (for example, %ss.4), then the position of the
decimal point is inferred in the decimal value. The position of the decimal point does not have to
coincide with the specified scale of the decimal (for example, scale = 4).
If the column mylink.mytimedec contains the decimal value 580620, then the following function
returns the time 20:06:58:
DecimalToTime(mylink.mytimedec, "%ss%nn%hh")
DecimalToTimestamp
Returns the given packed decimal as a timestamp. You can optionally specify a format string that
specifies how the timestamp is stored in the decimal number. The default format string is ”
%yyyy%mm%dd%hh%nn%ss”, so, for example, the timestamp 2009-08-25 14:03:22 is stored
as the decimal number 20090825140322. Format strings can only specify a format that contains
numbers. For example, you cannot specify a format string such as “%yyyy/%mm/%dd%hh:%nn:
%ss”, because the slash character (/) and the colon character (:) cannot be stored in a packed
decimal value. The following tokens are valid for conversions to or from decimal values:
%ss.N (two-digit seconds, plus the number of fractional digits allowed. The number of fractional
digits is from one to six inclusive).
If your specified format includes microseconds (for example, %ss.4), then the position of the
decimal point is inferred in the decimal value. The position of the decimal point does not have to
coincide with the specified scale of the decimal (for example, scale = 4).
DecimalToTimestamp(mylink.mytimestampdec)
If the column mylink.mytimestampdec contains the decimal value 200658580818, then the
following function returns the timestamp 1958–08–18 20:06:58:
DecimalToTimestamp(mylink.mytimestampdec, "%hh%nn%ss%yy%mm%dd")
DFloatToDecimal
Returns the given dfloat in decimal representation. The argument rtype optionally specifies a
rounding type, and is set to one of the following values:
ceil. Round the source field toward positive infinity. For example, 1.4 -> 2, -1.6 -> -1.
floor. Round the source field toward negative infinity. For example, 1.6 -> 1, -1.4 -> -2.
round_inf. Round or truncate the source field toward the nearest representable value, breaking
ties by rounding positive values toward positive infinity and negative values toward negative
infinity. For example, 1.4 -> 1, 1.5 -> 2, -1.4 -> -1, -1.5 -> -2.
trunc_zero. Discard any fractional digits to the right of the rightmost fractional digit supported
in the destination, regardless of sign. For example, if the destination is an integer, all fractional
digits are truncated. If the destination is another decimal with a smaller scale, round or truncate
to the scale size of the destination decimal. For example, 1.6 -> 1, -1.6 -> -1.
DFloatToDecimal(mylink.mydec,"ceil")
If the column mylink.myfloat contains the dfloat number 2.534, the following function returns
the decimal number 00000002.53.
DFloatToDecimal(mylink.mydec,"floor")
If the column mylink.myfloat contains the dfloat number 2.534, the following function returns
the decimal number 00000002.53.
DFloatToDecimal(mylink.mydec,"trunc_zero")
If the column mylink.myfloat contains the dfloat number 2.534, the following function returns
the decimal number 00000002.53.
DFloatToDecimal(mylink.mydec,"round_inf")
DfloatToStringNoExp
Returns the given dfloat in its string representation with no exponent, using the specified scale.
DfloatToStringNoExp(mylink.myfloat,2)
IsValid
Returns whether the given string is valid for the given type. Valid types are “date”, “decimal”,
“dfloat”, “sfloat”, “int8″, “uint8″, “int16″, “uint16″, “int32″, “uint32″, “int64″, “uint64″, “raw”,
“string”, “time”, “timestamp”, “ustring”. For data types of date, time, and timestamp, you can
optionally specify a format string. The format string describes the format that your input data
uses when it differs from the default formats for date, time, or timestamp. The default format for
date is “%yyyy-%mm-%dd”. The default format for time is “%hh:%mm:%ss”. The default
format for timestamp is “%yyyy-%mm-%dd %hh:%mm:%ss”.
IsValid("int8",mylink.mystring)
If the column mylink.mystring contains the string “380096.06″, then the following function
returns the value 0.
IsValid("int8",mylink.mystring)
IsValidDate
Returns whether the given value is valid for the type date.
Input: testdate (date)
Output: result (int8)
Examples. If the column mylink.mydate contains the date 2011-09-13, then the
following function returns the value 1.
IsValidDate(mylink.mydate)
If the column mylink.mydate contains the string “380096.06″, then the following function
returns the value 0, because the converted string is not a valid date.
IsValidDate(StringTodate (mylink.mydate))
IsValidDecimal
Returns whether the given value is valid for the type decimal. If the allzerosflag is set to 0, then
an all-zeroes representation is not valid. The allzerosflag is set to zero by default.
IsValidDecimal(mylink.mynum)
If the column mylink.mynum contains the string “wake-robin”, then the following function
returns the value 0, because the converted string is not a valid decimal.
IsValidDecimal(StringToDecimal (mylink.mynum))
IsValidTime
Returns whether the given time is valid for the type time.
IsValidTime(mylink.mytime)
If the column mylink.mydate contains the string “IbnKayeed”, then the following function
returns the value 0, because the converted string is not a valid time.
IsValidTime(StringToTime (mylink.mytime))
IsValidTimestamp
Returns whether the given timestamp is valid for the type timestamp.
IsValidTimestamp(mylink.mytimestamp)
If the column mylink.mytimestamp contains the string “one of two”, then the following function
returns the value 0, because the converted string is not a valid timestamp.
IsValidTimestamp(StringToTimestamp (mylink.mytimestamp))
RawNumAt
Returns the integer value at the specified index value in the specified raw field. The index starts
at 0.
RawNumAt(mylink.myraw, 0)
If the column mylink.myraw contains a raw value derived from the string “hello”, then the
following function returns 0 because the specified index is out of range:
RawNumAt(mylink.myraw, 12)
RawToString
Returns the given raw value as a string representation. You must ensure that the raw input value
contains a sequence of bytes that are valid as characters in the target character set in which the
output string is used. For example, the raw value { 0xE0 0×41 0×42 } is not a valid sequence of
UTF-8 characters, since the lead byte, 0xE0, is supposed to be followed by a byte in the range
[0x80..0xBF]. If a raw value { xE0 x41 x42 } is passed to the RawToString function, there could
be an error if the output string is then accessed as if it were encoded in UTF-8.
RawNumAt(mylink.myraw)
Seq
Generates a numeric code value from an ASCII character. You can optionally specify the
allow8bits argument to convert 8-bit ASCII values.
Seq("A")
SeqAt
Returns the numeric code point value of the character at the specified position in the given string.
The index starts at 0. If the specified index is out of range, the function returns 0.
SeqAt(mylink.mystring, 1)
StringToDate
Returns a date from the given string in the given format. You do not have to specify a format
string if your string contains a date in the default format yyyy-mm-dd.
StringToDate(mylink.mystring)
If the column mylink.mystring contains the string ″18:08:1958″, then the following function
returns the date 1958–08–18.
StringToDate(mylink.mystring,"%dd:%mm:%yyyy")
StringToDecimal
Returns the given string as a decimal representation. The argument rtype optionally specifies a
rounding type, and is set to one of the following values:
ceil. Round the source field toward positive infinity. For example, 1.4 -> 2, -1.6 -> -1.
floor. Round the source field toward negative infinity. For example, 1.6 -> 1, -1.4 -> -2.
round_inf. Round or truncate the source field toward the nearest representable value, breaking
ties by rounding positive values toward positive infinity and negative values toward negative
infinity. For example, 1.4 -> 1, 1.5 -> 2, -1.4 -> -1, -1.5 -> -2.
trunc_zero. Discard any fractional digits to the right of the rightmost fractional digit supported
in the destination, regardless of sign. For example, if the destination is an integer, all fractional
digits are truncated. If the destination is another decimal with a smaller scale, round or truncate
to the scale size of the destination decimal. For example, 1.6 -> 1, -1.6 -> -1.
StringToDecimal(mylink.mystring)
If the column mylink.mystring contains the string “19982.2276″, and the target is defined as
having a precision of 7 and a scale of 2, then the following function returns the decimal
19983.23.
StringToDecimal(mylink.mystring,"ceil")
StringToRaw
StringToRaw(mylink.mystring)
StringToTime
StringToTime(mylink.mystring)
If the column mylink.mystring contains the string “20: 6:58″, then the function returns a time of
20:06:58.
StringToTime(mylink.mystring,"%(h,s):$(n,s):$(s,s)")
StringToTimestamp
StringToTimestamp(mylink.mystring)
If the column mylink.mystring contains the string “8/ 8/1958 20: 6:58″, then the function returns
the timestamp 1958–08–08 20:06:58.
StringToTimestamp(mylink.mystring, "%(d,s)/%(m,s)/%yyyy%(h,s):$(n,s):$(s,s)")
StringToUstring
Returns a ustring from the given string, optionally using the specified map (otherwise uses
project default).
StringToUstring(mylink.mystring)
TimestampToDate
TimestampToDate(mylink.mytimestamp)
TimestampToDecimal
Returns the given timestamp as a packed decimal. You can optionally specify a format string that
specifies how the timestamp is stored in the decimal number. The default format string is ”
%yyyy%mm%dd%hh%nn%ss”, so, for example, the timestamp 2009-08-25 14:03:22 is stored
as the decimal number 20090825140322. Format strings can only specify a format that contains
numbers. For example, you cannot specify a format string such as “%yyyy/%mm/%dd%hh:%nn:
%ss”, because the slash character (/) and the colon character (:) cannot be stored in a packed
decimal value. The following tokens are valid for conversions to or from decimal values:
%ss.N (two-digit seconds, plus the number of fractional digits allowed. The number of fractional
digits is from one to six inclusive).
The literal digits 0 to 9 are also valid.
If your specified format includes microseconds (for example, %ss.4), then the position of the
decimal point is inferred in the decimal value. The position of the decimal point does not have to
coincide with the specified scale of the decimal (for example scale = 4).
TimestampToDecimal(mylink.mytimestamp)
If the column mylink.mytimestamp contains the timestamp 1958–08–18 20:06:58, then the
following function returns the decimal value 200658580818:
TimestampToDecimal(mylink.mytimestamp, "%hh%nn%ss%yy%mm%dd")
TimestampToString
TimestampToString(mylink.mytimestamp)
TimestampToTime
TimeToString
TimeToString(mylink.mytime)
If the column mylink.mytime contains the time 20:06:58, then the following function returns the
string “58:06:20″:
TimeToString(mylink.mytime, "%ss:$nn:$hh")
TimeToDecimal
Returns the given time as a packed decimal. You can optionally specify a format string that
specifies how the time is stored in the decimal number. The default format string is ” %hh%nn
%ss”, so, for example, the time 14:03:22 is stored as the decimal number 140322. Format strings
can only specify a format that contains numbers. For example, you cannot specify a format string
such as “%hh:%nn:%ss”, because the colon character (:) cannot be stored in a packed decimal
value. The following tokens are valid for conversions to or from decimal values:
%ss.N (two-digit seconds, plus the number of fractional digits allowed. The number of fractional
digits is from one to six inclusive).
If your specified format includes microseconds (for example, %ss.4), then the position of the
decimal point is inferred in the decimal value. The position of the decimal point does not have to
coincide with the specified scale of the decimal (for example scale = 4).
TimeToDecimal(mylink.mytime)
If the column mylink.mytime contains the time 20:06:58, then the following function returns the
decimal value 580620:
TimeToDecimal(mylink.mytime, "%ss%nn%hh")
UstringToString
Returns a string from the given ustring, optionally using the specified map (otherwise uses
project default).
Datastage-Utility functions
Utility functions
The utility functions have a variety of purposes.
GetEnvironment
GetEnvironment("APT_RDBMS_COMMIT_ROWS")
GetSavedInputRecord
This function is used to implement the aggregating of data on the input link of a Transformer
stage. You call the GetsSavedInputRecord function to a retrieve a copy of an input row that you
have previously saved to a cache area. The function retrieves the next input row from the cache
(in the order in which they were saved to the cache) and makes it the current input row. The
retrieved row overrides what was the current input row, and so any derivation using an input
column value will use the value of that column in the input row retrieved from the cache, not
what was previously the current input row. You must call GetSavedInputRecord in a loop
variable derivation, you cannot call it from anywhere else. For example, you cannot call
GetSavedInputRecord in the Loop Condition expression. You can call GetSavedInputRecord,
multiple times and retrieve the next cached row on each call. Use the SaveInputRecord function
to store rows to the cache. GetSavedInputRecord returns the cache index number of the record
retrieved from that cache.
Input: -
Output: cache_index_number
Examples. The following example is the derivation of a loop variable named
SavedRecordIndex in a Transformer stage:
SavedRecordIndex: GetSavedInputRecord()
NextSKChain
This function is used in the Slowly Changing Dimension stage as the derivation for a column
with the SKChain purpose code. The function is not used in the Transformer stage.
NextSKChain returns the value of the surrogate key column for the next row in the chain, or the
value that has been specified to use for the last record in the chain.
NextSKChain(180858)
NextSurrogateKey
Returns the value of the next surrogate key. You must have previously set up your surrogate key
source, and defined details on the Surrogate Key tab of the Stage page of the Transformer
properties window.
Input: -
Output: surrogate_key_value (int64)
Example. The derivation field of your surrogate key column contains the following
function:
NextSurrogateKey()
PrevSKChain
This function is used in the Slowly Changing Dimension stage as the derivation for a column
with the SKChain purpose code. The function is not used in the Transformer stage. PrevSKChain
Returns the value of the surrogate key column for the previous record in the chain, or the value
that has been specified to use for the first record in the chain.
PrevSKChain(121060)
SaveInputRecord
This function is used to implement the aggregating of data on the input link of a Transformer
stage. You call the SaveInputRecord function to save a copy of the current input row to a cache
area. The function returns the count of records in the cache, starting from 1. You can call
SaveInputRecord from within the derivation of a stage variable in the Transformer stage. You
can call SaveInputRecord multiple times for the same input row. The first call adds the input row
to the cache and each subsequent call adds a duplicate of that same input row into the cache. So,
for example, if SaveInputRecord is called three times for one input record, then the cache will
contain three rows, each identical to the original input row. Use the GetSavedInputRecord
function to retrieve the rows that you have stored.
Input: -
Output: cache_record_count (int64)
Examples. The following example is the derivation of a stage variable named
NumSavedRecords in a Transformer stage:
NumSavedRecords: SaveInputRecord()
Share this:
Facebook
Email
Ask a Question