@@ -13,11 +13,11 @@ If you are using a different version of SAP HANA and the SAP HANA APL library, t
1313 For more details about the APL function, check the online <a href="https://help.sap.com/viewer/cb31bd99d09747089754a0ba75067ed2/3.1/en-US/9bf31268c57e4c079f0cbabd36f39640.html" target="new"> documentation</a >.
1414  ;
1515
16- ## Prerequisites
16+ ## Prerequisites
1717 - ** Proficiency:** Beginner
1818
1919## Details
20- ### You will learn
20+ ### You will learn
2121
2222- How to use SAP HANA APL Recommendation algorithm from SAP HANA APL version 3.2
2323
@@ -63,50 +63,50 @@ However, the ***SAP HANA APL*** installation package includes a script where you
6363Here is a quick code example with the direct technique:
6464
6565```
66- -- --------------------------------------------------------------------------
67- -- Create the table type for the dataset
68- -- --------------------------------------------------------------------------
69- drop type TRAINING_DATASET_T;
70- create type TRAINING_DATASET_T as table ( .... );
71-
72- -- --------------------------------------------------------------------------
73- -- Create the AFL wrapper corresponding to the target APL function
74- -- --------------------------------------------------------------------------
75- DROP TABLE CREATE_MODEL_SIGNATURE;
76- create column table CREATE_MODEL_SIGNATURE like PROCEDURE_SIGNATURE_T;
77-
78- -- the signature is defined in the APL API documentation
79- INSERT INTO CREATE_MODEL_SIGNATURE values (1, 'MYSCHEMA','FUNCTION_HEADER_T' , 'IN');
80- INSERT INTO CREATE_MODEL_SIGNATURE values (2, 'MYSCHEMA','OPERATION_CONFIG_T' , 'IN');
81- INSERT INTO CREATE_MODEL_SIGNATURE values (3, 'MYSCHEMA','TRAINING_DATASET_T' , 'IN');
82- INSERT INTO CREATE_MODEL_SIGNATURE values (4, 'MYSCHEMA','MODEL_BIN_OID_T' , 'OUT');
83- INSERT INTO CREATE_MODEL_SIGNATURE values (5, 'MYSCHEMA','VARIABLE_DESC_OID_T', 'OUT');
84-
85- call SYS.AFLLANG_WRAPPER_PROCEDURE_DROP('MYSCHEMA','APLWRAPPER_CREATE_MODEL');
86- call SYS.AFLLANG_WRAPPER_PROCEDURE_CREATE('APL_AREA','CREATE_MODEL','MYSCHEMA', 'APLWRAPPER_CREATE_MODEL', CREATE_MODEL_SIGNATURE);
87-
88- -- --------------------------------------------------------------------------
89- -- Create the input/output tables used as arguments for the APL function
90- -- --------------------------------------------------------------------------
91- DROP TABLE FUNCTION_HEADER;
92- CREATE COLUMN TABLE FUNCTION_HEADER LIKE FUNCTION_HEADER_T;
93- INSERT INTO FUNCTION_HEADER values ('key', 'value');
94-
95- DROP TABLE OPERATION_CONFIG;
96- CREATE COLUMN TABLE OPERATION_CONFIG LIKE OPERATION_CONFIG_T;
97- INSERT INTO OPERATION_CONFIG values ('key', 'value');
98-
99- DROP TABLE TRAINED_MODEL;
100- CREATE COLUMN TABLE TRAINED_MODEL LIKE MODEL_BIN_OID_T;
101-
102- DROP TABLE VARIABLE_DESC;
103- CREATE COLUMN TABLE VARIABLE_DESC LIKE VARIABLE_DESC_OID_T;
104-
105- -- --------------------------------------------------------------------------
66+ -- --------------------------------------------------------------------------
67+ -- Create the table type for the dataset
68+ -- --------------------------------------------------------------------------
69+ drop type TRAINING_DATASET_T;
70+ create type TRAINING_DATASET_T as table ( .... );
71+
72+ -- --------------------------------------------------------------------------
73+ -- Create the AFL wrapper corresponding to the target APL function
74+ -- --------------------------------------------------------------------------
75+ DROP TABLE CREATE_MODEL_SIGNATURE;
76+ create column table CREATE_MODEL_SIGNATURE like PROCEDURE_SIGNATURE_T;
77+
78+ -- the signature is defined in the APL API documentation
79+ INSERT INTO CREATE_MODEL_SIGNATURE values (1, 'MYSCHEMA','FUNCTION_HEADER_T' , 'IN');
80+ INSERT INTO CREATE_MODEL_SIGNATURE values (2, 'MYSCHEMA','OPERATION_CONFIG_T' , 'IN');
81+ INSERT INTO CREATE_MODEL_SIGNATURE values (3, 'MYSCHEMA','TRAINING_DATASET_T' , 'IN');
82+ INSERT INTO CREATE_MODEL_SIGNATURE values (4, 'MYSCHEMA','MODEL_BIN_OID_T' , 'OUT');
83+ INSERT INTO CREATE_MODEL_SIGNATURE values (5, 'MYSCHEMA','VARIABLE_DESC_OID_T', 'OUT');
84+
85+ call SYS.AFLLANG_WRAPPER_PROCEDURE_DROP('MYSCHEMA','APLWRAPPER_CREATE_MODEL');
86+ call SYS.AFLLANG_WRAPPER_PROCEDURE_CREATE('APL_AREA','CREATE_MODEL','MYSCHEMA', 'APLWRAPPER_CREATE_MODEL', CREATE_MODEL_SIGNATURE);
87+
88+ -- --------------------------------------------------------------------------
89+ -- Create the input/output tables used as arguments for the APL function
90+ -- --------------------------------------------------------------------------
91+ DROP TABLE FUNCTION_HEADER;
92+ CREATE COLUMN TABLE FUNCTION_HEADER LIKE FUNCTION_HEADER_T;
93+ INSERT INTO FUNCTION_HEADER values ('key', 'value');
94+
95+ DROP TABLE OPERATION_CONFIG;
96+ CREATE COLUMN TABLE OPERATION_CONFIG LIKE OPERATION_CONFIG_T;
97+ INSERT INTO OPERATION_CONFIG values ('key', 'value');
98+
99+ DROP TABLE TRAINED_MODEL;
100+ CREATE COLUMN TABLE TRAINED_MODEL LIKE MODEL_BIN_OID_T;
101+
102+ DROP TABLE VARIABLE_DESC;
103+ CREATE COLUMN TABLE VARIABLE_DESC LIKE VARIABLE_DESC_OID_T;
104+
105+ -- --------------------------------------------------------------------------
106106-- Execute the APL function using its AFL wrapper and the actual input/output tables
107107-- --------------------------------------------------------------------------
108108call APLWRAPPER_CREATE_MODEL(FUNCTION_HEADER, OPERATION_CONFIG, MYSCHEMA.TRAINING_DATASET, TRAINED_MODEL, VARIABLE_DESC) with overview;
109- ```
109+ ```
110110
111111- ** The procedure technique** :
112112
@@ -118,30 +118,30 @@ These APL stored procedures are part of the `HCO_PA_APL` delivery unit which is
118118Here is a quick code example with the procedure technique:
119119
120120```
121- SET SESSION 'APL_CACHE_SCHEMA' = 'APL_CACHE';
121+ SET SESSION 'APL_CACHE_SCHEMA' = 'APL_CACHE';
122122
123- -- --------------------------------------------------------------------------
124- -- Create the input/output tables used as arguments for the APL function
125- -- --------------------------------------------------------------------------
126- DROP TABLE FUNCTION_HEADER;
123+ -- --------------------------------------------------------------------------
124+ -- Create the input/output tables used as arguments for the APL function
125+ -- --------------------------------------------------------------------------
126+ DROP TABLE FUNCTION_HEADER;
127127CREATE COLUMN TABLE FUNCTION_HEADER LIKE "SAP_PA_APL"."sap.pa.apl.base::BASE.T.FUNCTION_HEADER";
128- INSERT INTO FUNCTION_HEADER values ('key', 'value');
128+ INSERT INTO FUNCTION_HEADER values ('key', 'value');
129129
130- DROP TABLE OPERATION_CONFIG;
131- CREATE COLUMN TABLE OPERATION_CONFIG LIKE "SAP_PA_APL"."sap.pa.apl.base::BASE.T.OPERATION_CONFIG_DETAILED";
132- INSERT INTO OPERATION_CONFIG values ('key', 'value');
130+ DROP TABLE OPERATION_CONFIG;
131+ CREATE COLUMN TABLE OPERATION_CONFIG LIKE "SAP_PA_APL"."sap.pa.apl.base::BASE.T.OPERATION_CONFIG_DETAILED";
132+ INSERT INTO OPERATION_CONFIG values ('key', 'value');
133133
134- DROP TABLE TRAINED_MODEL;
135- CREATE COLUMN TABLE TRAINED_MODEL LIKE "SAP_PA_APL"."sap.pa.apl.base::BASE.T.MODEL_BIN_OID";
134+ DROP TABLE TRAINED_MODEL;
135+ CREATE COLUMN TABLE TRAINED_MODEL LIKE "SAP_PA_APL"."sap.pa.apl.base::BASE.T.MODEL_BIN_OID";
136136
137- DROP TABLE VARIABLE_DESC;
138- CREATE COLUMN TABLE VARIABLE_DESC LIKE "SAP_PA_APL"."sap.pa.apl.base::BASE.T.VARIABLE_DESC_OID";
137+ DROP TABLE VARIABLE_DESC;
138+ CREATE COLUMN TABLE VARIABLE_DESC LIKE "SAP_PA_APL"."sap.pa.apl.base::BASE.T.VARIABLE_DESC_OID";
139139
140- -- --------------------------------------------------------------------------
140+ -- --------------------------------------------------------------------------
141141-- Execute the APL function using its AFL wrapper and the actual input/output tables
142142-- --------------------------------------------------------------------------
143- call "SAP_PA_APL"."sap.pa.apl.base::CREATE_MODEL"(FUNCTION_HEADER, OPERATION_CONFIG, 'MYSCHEMA','TRAINING_DATASET', TRAINED_MODEL, VARIABLE_DESC) with overview;
144- ```
143+ call "SAP_PA_APL"."sap.pa.apl.base::CREATE_MODEL"(FUNCTION_HEADER, OPERATION_CONFIG, 'MYSCHEMA','TRAINING_DATASET', TRAINED_MODEL, VARIABLE_DESC) with overview;
144+ ```
145145
146146We will use the procedure technique in this tutorial.
147147
@@ -396,7 +396,7 @@ FROM (
396396 , " MOVIES" ." TITLE"
397397 , " MOVIES" ." GENRES"
398398 , " LINKS" ." IMDBID"
399- , " LINKS" ." TMDBID"
399+ , " LINKS" ." TMDBID"
400400 FROM (
401401 SELECT
402402 " T1" ." USERID"
@@ -544,7 +544,7 @@ FROM (
544544 , " MOVIES" ." TITLE"
545545 , " MOVIES" ." GENRES"
546546 , " LINKS" ." IMDBID"
547- , " LINKS" ." TMDBID"
547+ , " LINKS" ." TMDBID"
548548 FROM (
549549 SELECT
550550 " T1" ." MOVIEID"
@@ -610,7 +610,7 @@ Let's verify how many distinct movies will actually get recommended to a user (p
610610``` SQL
611611SELECT
612612 COUNT (1 ) AS " MOVIE_COUNT"
613- , COUNT (1 ) * 100 / (SELECT COUNT (1 ) AS " COUNT" FROM " MOVIELENS" ." public.aa.movielens.hdb::data.MOVIES" ) AS " MOVIE_RATIO"
613+ , COUNT (1 ) * 100 / (SELECT COUNT (1 ) AS " COUNT" FROM " MOVIELENS" ." public.aa.movielens.hdb::data.MOVIES" ) AS " MOVIE_RATIO"
614614FROM (
615615 SELECT " MOVIEID"
616616 FROM " MOVIELENS" ." APL_RECO_MODEL_ITEMS_RESULTS"
0 commit comments