Internally, SAS numbers
and dates are floating-point values. Teradata has varying formats
for numbers, including integers, floating-point values, and decimal
values. Number conversion must occur when you are reading Teradata
numbers that are not floating point (Teradata FLOAT).
SAS/ACCESS can
use the Teradata CAST= function to cause Teradata to perform numeric
conversions. The parallelism of Teradata makes it suitable for performing
this work. This is especially true when running SAS on
z/OS, where
CPU activity can be costly.
CAST= can cause more
data to be transferred from Teradata to SAS, as a result of the option
forcing the Teradata type into a larger SAS type. For example, the
CAST= transfer of a Teradata BYTEINT to SAS floating point adds seven
overhead bytes to each row transferred.
These Teradata types
are candidates for casting.
SAS/ACCESS limits data
expansion for CAST= to 20% to trade rapid data conversion by Teradata
for extra data transmission. If casting does not exceed a 20% data
increase, all candidate columns are cast. If the increase exceeds
this limit, SAS attempts to cast only Teradata DECIMAL types.
If casting only DECIMAL types still exceeds the increase limit, SAS
performs the data conversions.
You can alter the casting
rules by using the CAST= or CAST_OVERHEAD_MAXPERCENT= LIBNAME option.
With CAST_OVERHEAD_MAXPERCENT=, you can change the 20% overhead limit.
With CAST=, you can override the percentage rules.
-
CAST=YES forces Teradata to cast
all candidate columns.
-
CAST=NO cancels all Teradata casting.
CAST= applies only when
you are reading Teradata tables into SAS, not when you are writing
Teradata tables from SAS.
Also, CAST= applies
only to SQL that SAS generates for you. If you supply your own SQL
with the explicit SQL feature of PROC SQL, you must code your own
casting clauses. Data conversions are therefore forced to occur in
Teradata instead of SAS.