SAS/ACCESS products share an autopartitioning scheme
based on the MOD function. Some products support additional techniques.
For example, if your Oracle tables are physically partitioned in the
DBMS,
SAS/ACCESS Interface to Oracle automatically partitions in accordance
with Oracle physical partitions rather than using MOD.
SAS/ACCESS
Interface to Teradata uses FastExport, if available, which lets the
FastExport Utility direct partitioning.
MOD is a mathematical
function that produces the remainder of a division operation. Your
DBMS table must contain a column to which SAS can apply the MOD function
— a numeric column constrained to integral values. DBMS integer
and small integer columns suit this purpose. Integral decimal (numeric)
type columns can work as well. On each thread, SAS appends a WHERE
clause to your SQL that uses the MOD function with the numeric column
to create a subset of the result set. Combined, these subsets add
up to exactly the result set for your original single SQL statement.
For example, assume
that your original SQL that SAS produced is
SELECT CHR1,
CHR2 FROM DBTAB
and that the Dbtab table contains the
IntCol integer column. SAS creates two threads and issues these two
statements:
SELECT CHR1, CHR2 FROM DBTAB WHERE (MOD(INTCOL,2)=0)
SELECT CHR1, CHR2 FROM DBTAB WHERE (MOD(INTCOL,2)=1)
The first thread retrieves
rows with an even value for IntCol, and the second thread retrieves
rows with an odd value for IntCol. Distribution of rows across the
two threads is optimal if IntCol has a 50/50 distribution of even
and odd values.
SAS modifies the SQL
for columns containing negative integers, for nullable columns, and
to combine SAS WHERE clauses with the partitioning WHERE clauses.
SAS can also run more than two threads. You use the second parameter
of the DBSLICEPARM= option to increase the number of threads.
The success of this
technique depends on the distribution of the values in the chosen
integral column. Without knowledge of the distribution, your
SAS/ACCESS
product attempts to pick the best possible column. For example, indexed
columns are given preference for some DBMSs. However, column selection
is more or less a guess, and the SAS guess might cause poor distribution
of the result set across the threads. If no suitable numeric column
is found, MOD cannot be used at all, and threaded Reads do not occur
if your
SAS/ACCESS product has no other partitioning technique. For
these reasons, you should explore autopartitioning particulars for
your DBMS and judiciously use DBSLICE= to augment autopartitioning.
See the information for your DBMS for specific autopartitioning details.
-
-
-
-
-
-
-
-
Oracle (not supported under z/OS )
-
-
-
Teradata (supports only FastExport threaded Reads on z/OS and UNIX;
see Teradata documentation for details)