The "Discretize Apply" function applies models generated from the "Discretize" function to new data. It partitions the new data based on the bin boundaries in the model and performs smoothing in each bin of each column. The structure of the new data should be the same as the one used to generate the model, and the new data does not update the binning model.
------

SET SCHEMA DM_PAL;

DROP TABLE PAL_DISC_DATA_TBL;
CREATE COLUMN TABLE PAL_DISC_DATA_TBL (
	"ID" INTEGER,
	"ATT1" DOUBLE,
	"ATT2" INTEGER,
	"ATT3" INTEGER,
	"ATT4" NVARCHAR(10)
);
INSERT INTO PAL_DISC_DATA_TBL VALUES(1, 10.0, 100, 1, 'A');
INSERT INTO PAL_DISC_DATA_TBL VALUES(2, 10.1, 101, 1, 'A');
INSERT INTO PAL_DISC_DATA_TBL VALUES(3, 10.2, 100, 1, 'A');
INSERT INTO PAL_DISC_DATA_TBL VALUES(4, 10.4, 103, 1, 'A');
INSERT INTO PAL_DISC_DATA_TBL VALUES(5, 10.3, 100, 1, 'A');
INSERT INTO PAL_DISC_DATA_TBL VALUES(6, 40.0, 400, 4, 'C');
INSERT INTO PAL_DISC_DATA_TBL VALUES(7, 40.1, 402, 4, 'B');
INSERT INTO PAL_DISC_DATA_TBL VALUES(8, 40.2, 400, 4, 'B');
INSERT INTO PAL_DISC_DATA_TBL VALUES(9, 40.4, 402, 4, 'B');
INSERT INTO PAL_DISC_DATA_TBL VALUES(10, 40.3, 400, 4, 'A');
INSERT INTO PAL_DISC_DATA_TBL VALUES(11, 90.0, 900, 2, 'C');
INSERT INTO PAL_DISC_DATA_TBL VALUES(12, 90.1, 903, 1, 'B');
INSERT INTO PAL_DISC_DATA_TBL VALUES(13, 90.2, 901, 2, 'B');
INSERT INTO PAL_DISC_DATA_TBL VALUES(14, 90.4, 900, 1, 'B');
INSERT INTO PAL_DISC_DATA_TBL VALUES(15, 90.3, 900, 1, 'B');

DROP TABLE PAL_DISC_RESULT_TBL;
CREATE COLUMN TABLE PAL_DISC_RESULT_TBL (
	"ID" INTEGER,
	"ATT1" DOUBLE,
	"ATT2" DOUBLE,
	"ATT3" DOUBLE,
	"ATT4" NVARCHAR(10)
);

DROP TABLE PAL_DISC_ASSIGN_TBL;
CREATE COLUMN TABLE PAL_DISC_ASSIGN_TBL (
	"ID" INTEGER,
	"BIN_INDX" DOUBLE
);

DROP TABLE PAL_DISC_MODEL_TBL;
CREATE COLUMN TABLE PAL_DISC_MODEL_TBL (
    "ROW_INDEX" INT,
    "MODEL_CONTENT" VARCHAR(5000)
);

DROP TABLE PAL_DISC_STAT_TBL;
CREATE COLUMN TABLE PAL_DISC_STAT_TBL (
    "STAT_NAME" VARCHAR(256),
    "STAT_VALUE" VARCHAR(1000)
);

DROP TABLE PAL_PARAMETER_TBL;
CREATE COLUMN TABLE PAL_PARAMETER_TBL (
	"PARAM_NAME" VARCHAR(100),
	"INT_VALUE" INTEGER,
	"DOUBLE_VALUE" DOUBLE,
	"STRING_VALUE" VARCHAR(100)
);
INSERT INTO PAL_PARAMETER_TBL VALUES('BINNING_VARIABLE', NULL, NULL, 'ATT1');
INSERT INTO PAL_PARAMETER_TBL VALUES('METHOD', 0, NULL, NULL);
INSERT INTO PAL_PARAMETER_TBL VALUES('BIN_NUMBER', 3, NULL, NULL);
INSERT INTO PAL_PARAMETER_TBL VALUES('DEFAULT_SMOOTHING_METHOD', 2, NULL, NULL);
INSERT INTO PAL_PARAMETER_TBL VALUES('SMOOTHING_METHOD', 1, NULL, 'ATT2');
INSERT INTO PAL_PARAMETER_TBL VALUES('CATEGORICAL_VARIABLE', NULL, NULL, 'ATT3');

DO BEGIN
	LT_DATA = SELECT * FROM PAL_DISC_DATA_TBL;
	LT_PARAM = SELECT * FROM PAL_PARAMETER_TBL;
	CALL _SYS_AFL.PAL_DISCRETIZE(:LT_DATA, :LT_PARAM, LT_RES, LT_ASSIGN, LT_MODEL, LT_STAT);
	INSERT INTO PAL_DISC_MODEL_TBL SELECT * FROM :LT_MODEL;
END;

------ APPLY ------
DROP TABLE PAL_DISC_APPLY_TBL;
CREATE COLUMN TABLE PAL_DISC_APPLY_TBL (
	"ID" INTEGER,
	"ATT1" DOUBLE,
	"ATT2" INTEGER,
	"ATT3" INTEGER,
	"ATT4" NVARCHAR(10)
);
INSERT INTO PAL_DISC_APPLY_TBL VALUES(1, 20.0, 120, 1, 'A');
INSERT INTO PAL_DISC_APPLY_TBL VALUES(2, 30.0, 110, 2, 'A');
INSERT INTO PAL_DISC_APPLY_TBL VALUES(3, 10.7, 143, 1, 'B');
INSERT INTO PAL_DISC_APPLY_TBL VALUES(4, 15.8, 256, 2, 'C');
INSERT INTO PAL_DISC_APPLY_TBL VALUES(5, 88.9, 100, 1, 'A');
INSERT INTO PAL_DISC_APPLY_TBL VALUES(6, 76.5, 402, 2, 'A');
INSERT INTO PAL_DISC_APPLY_TBL VALUES(7, 55.3, 905, 4, 'B');

DROP TABLE #PAL_PARAMETER_TBL;
CREATE LOCAL TEMPORARY COLUMN TABLE #PAL_PARAMETER_TBL (
	"PARAM_NAME" VARCHAR(100),
	"INT_VALUE" INTEGER,
	"DOUBLE_VALUE" DOUBLE,
	"STRING_VALUE" VARCHAR(100)
);

CALL _SYS_AFL.PAL_DISCRETIZE_APPLY(PAL_DISC_APPLY_TBL, PAL_DISC_MODEL_TBL, #PAL_PARAMETER_TBL, ?, ?, ?);
