Autopartitioning Scheme for HP Neoview

Overview

Autopartitioning for SAS/ACCESS Interface to HP Neoview is a modulo (MOD) function method. For general information about this feature, see Autopartitioning Techniques in SAS/ACCESS.

Autopartitioning Restrictions

SAS/ACCESS Interface to HP Neoview places additional restrictions on the columns that you can use for the partitioning column during the autopartitioning phase. Here is how columns are partitioned.
  • BIGINT, INTEGER, SMALLINT, and SMALLINT columns are given preference.
  • You can use DECIMAL, DOUBLE, FLOAT, NUMERIC, or REAL columns for partitioning if the precision minus the scale of the column is greater than 0 but less than 19—namely, 0<(precision-scale)<19.

Nullable Columns

If you select a nullable column for autopartitioning, the OR<column-name>IS NULL SQL statement is appended at the end of the SQL code that is generated for the threaded Read. This ensures that any possible NULL values are returned in the result set.

Using WHERE Clauses

Autopartitioning does not select a column to be the partitioning column if it appears in a SAS WHERE clause. For example, this DATA step cannot use a threaded Read to retrieve the data because all numeric columns in the table are in the WHERE clause:
data work.locemp;
  set neolib.MYEMPS;
  where EMPNUM<=30 and ISTENURE=0 and
        SALARY<=35000 and NUMCLASS>2;
run;

Using DBSLICEPARM=

Although SAS/ACCESS Interface to HP Neoview defaults to three threads when you use autopartitioning, do not specify a maximum number of threads for the threaded Read in the DBSLICEPARM= LIBNAME option.

Using DBSLICE=

You might achieve the best possible performance when using threaded Reads by specifying the DBSLICE= data set option for HP Neoview in your SAS operation. This is especially true if you defined an index on one column in the table. SAS/ACCESS Interface to HP Neoview selects only the first integer-type column in the table. This column might not be the same column that is being used as the partitioning key. If so, you can specify the partition column using DBSLICE=, as shown in this example.
proc print data=neolib.MYEMPS(DBSLICE=("EMPNUM BETWEEN 1 AND 33"
"EMPNUM BETWEEN 34 AND 66" "EMPNUM BETWEEN 67 AND 100"));
run;
Using DBSLICE= also gives you flexibility in column selection. For example, if you know that the STATE column in your employee table contains only a few distinct values, you can customize your DBSLICE= clause accordingly.
datawork.locemp;
set neolib2.MYEMP(DBSLICE=("STATE='FL'" "STATE='GA'"
  "STATE='SC'" "STATE='VA'" "STATE='NC'"));
where EMPNUM<=30 and ISTENURE=0 and SALARY<=35000 and NUMCLASS>2;
run;