The content explains how to run selected PAL procedures in parallel using the `WITH HINT (PARALLEL_BY_PARAMETER_PARTITIONS ())` clause in SAP HANA SQLScript. This feature allows for parallel execution of scoring procedures with a trained model from PAL supervised learning algorithms. The scoring procedure is initiated on each data partition of a partitioned data table, sharing the same trained model and other procedure parameters. This feature works in both single-node and multiple-node SAP HANA environments.

The content also provides an example of using the hint to perform scoring for various PAL procedures, such as decision trees, random decision trees, logistic regression, support vector machine, etc. The example includes sample code for creating tables, inserting data, and calling the PAL procedures with the hint.

The expected result of the example is not provided in the content.
------

SET SCHEMA DM_PAL;

DROP TABLE  PAL_C45_TRAINING_DATA_TBL;
CREATE COLUMN TABLE PAL_C45_TRAINING_DATA_TBL (
    "OUTLOOK" VARCHAR(20),
    "TEMP" INTEGER,
    "HUMIDITY" DOUBLE,
    "WINDY" VARCHAR(10),
    "CLASS" VARCHAR(20)
);
INSERT INTO PAL_C45_TRAINING_DATA_TBL VALUES ('Sunny',    75, 70.0, 'Yes', 'Play');
INSERT INTO PAL_C45_TRAINING_DATA_TBL VALUES ('Sunny',    80, 90.0, 'Yes', 'Do not Play');
INSERT INTO PAL_C45_TRAINING_DATA_TBL VALUES ('Sunny',    85, 85.0, 'No',  'Do not Play');
INSERT INTO PAL_C45_TRAINING_DATA_TBL VALUES ('Overcast', 72, 90.0, 'Yes', 'Play');
INSERT INTO PAL_C45_TRAINING_DATA_TBL VALUES ('Overcast', 83, 78.0, 'No',  'Play');
INSERT INTO PAL_C45_TRAINING_DATA_TBL VALUES ('Rain',     71, 80.0, 'Yes', 'Do not Play');

DROP TABLE PAL_TRAINING_PARAMETER_TBL;
CREATE COLUMN TABLE PAL_TRAINING_PARAMETER_TBL (
    "PARAM_NAME" VARCHAR (256),
    "INT_VALUE" INTEGER,
    "DOUBLE_VALUE" DOUBLE,
    "STRING_VALUE" VARCHAR (1000)
);
INSERT INTO PAL_TRAINING_PARAMETER_TBL VALUES ('ALGORITHM',                1, null, null);
INSERT INTO PAL_TRAINING_PARAMETER_TBL VALUES ('SPLIT_THRESHOLD',       null, 1e-5, null);
INSERT INTO PAL_TRAINING_PARAMETER_TBL VALUES ('MAX_DEPTH',                4, null, null);
INSERT INTO PAL_TRAINING_PARAMETER_TBL VALUES ('MIN_RECORDS_OF_PARENT',    2, null, null);
INSERT INTO PAL_TRAINING_PARAMETER_TBL VALUES ('MIN_RECORDS_OF_LEAF',      1, null, null);
INSERT INTO PAL_TRAINING_PARAMETER_TBL VALUES ('IS_OUTPUT_RULES',          1, null, null);

DROP TABLE PAL_C45_TREEMODEL_TBL;
CREATE COLUMN TABLE PAL_C45_TREEMODEL_TBL (
    "ID" INTEGER,
    "TREEMODEL" VARCHAR(5000)
);

DO BEGIN
  lt_data = SELECT * FROM PAL_C45_TRAINING_DATA_TBL;
  lt_param = SELECT * FROM PAL_TRAINING_PARAMETER_TBL;
  CALL "_SYS_AFL"."PAL_DECISION_TREE"(:lt_data, :lt_param, lt_model, lt_rule, lt_cm, lt_stat, lt_cv);
  INSERT INTO PAL_C45_TREEMODEL_TBL SELECT * FROM :lt_model;
END;

DROP TABLE PAL_DT_SCORING_DATA_TBL;
CREATE COLUMN TABLE PAL_DT_SCORING_DATA_TBL (
	"ID" INTEGER,
	"OUTLOOK" VARCHAR(20),
	"TEMP" INTEGER,
	"HUMIDITY" DOUBLE,
	"WINDY" VARCHAR(10)
	) GROUP TYPE "MULTI_NODE" 
      GROUP NAME "NODE_ALL"
      PARTITION BY RANGE(ID) (
          PARTITION 0<=VALUES<2,
          PARTITION 2<=VALUES<4,
          PARTITION 4<=VALUES<6,
          PARTITION OTHERS);

INSERT INTO PAL_DT_SCORING_DATA_TBL VALUES (0, 'Overcast', 75, 70, 'Yes');
INSERT INTO PAL_DT_SCORING_DATA_TBL VALUES (1, 'Rain',     78, 70, 'Yes');
INSERT INTO PAL_DT_SCORING_DATA_TBL VALUES (2, 'Sunny',    66, 70, 'Yes');
INSERT INTO PAL_DT_SCORING_DATA_TBL VALUES (3, 'Sunny',    69, 70, 'Yes');
INSERT INTO PAL_DT_SCORING_DATA_TBL VALUES (4, 'Rain',   null, 70, 'Yes');
INSERT INTO PAL_DT_SCORING_DATA_TBL VALUES (5, null,       70, 70, 'Yes');
INSERT INTO PAL_DT_SCORING_DATA_TBL VALUES (6, '***',      70, 70, 'Yes');

DROP TABLE #PAL_SCORING_PARAMETER_TBL;
CREATE LOCAL TEMPORARY COLUMN TABLE #PAL_SCORING_PARAMETER_TBL (
    "PARAM_NAME" VARCHAR (256),
    "INT_VALUE" INTEGER,
    "DOUBLE_VALUE" DOUBLE,
    "STRING_VALUE" VARCHAR (1000)
);
INSERT INTO #PAL_SCORING_PARAMETER_TBL VALUES ('IS_OUTPUT_PROBABILITY', 1, null, null);
INSERT INTO #PAL_SCORING_PARAMETER_TBL VALUES ('MODEL_FORMAT', 0, null, null);

CALL "_SYS_AFL"."PAL_DECISION_TREE_PREDICT"(PAL_DT_SCORING_DATA_TBL, PAL_C45_TREEMODEL_TBL, #PAL_SCORING_PARAMETER_TBL, ?)
    WITH HINT (PARALLEL_BY_PARAMETER_PARTITIONS(p1));
