在SAP HANA中的R脚本中执行for循环

时间:2017-11-08 09:04:15

标签: sql r for-loop sap hana

我编写了几个R脚本,我在SAP HANA中的RLANG存储过程中调用它们。

到目前为止,脚本工作正常,直到我在R脚本中包含for循环。我收到了这个错误。

Could not execute 'CREATE_PROCEDURE USE_ML(IN pred "PRED", IN model "MODEL", OUT result "RES") LANGUAGE RLANG ...'
SAP DBTech JDBC: [257]: sql syntax error: unterminated external language"

我所包含的代码与以下内容类似,如果直接在我的R控制台中启动,则可以正常工作。

pred <- data.frame(vendor = as.factor(c("John", "Jack", "John", "Jack")),
                    product = as.factor(c("Milk", "Water", "Beef", "Water")))
modLevel <- list(vendor = as.factor(c("John", "William", "Jack")), 
                  product = as.factor(c("Milk","Beef", "Water", "Peanut")))
params <- c("vendor", "product")
for (p in params){ 
   pred[,p] <- factor(pred[,p], levels(modLevel[[p]]))
}

毋庸置疑,我希望在此for循环中传递更多参数。

我的问题是以下问题。是(1)可以在SQL语句中包含这个for循环而不会出现语法错误,或者(2)我是否必须更改脚本的结构(如果是,我该怎么办)?

非常感谢任何帮助。

编辑以下是HANA中的完整SQL过程。

DROP PROCEDURE USE_ML_MODEL;
CREATE PROCEDURE USE_ML_MODEL(IN pred "PRED", IN model "MODEL", OUT result "RES")
LANGUAGE RLANG AS
BEGIN
    modLevel <- unserialize(model$MOD_LEV[[1]])
    params <- c("VENDOR", "PRODUCT")
    for (p in params){ 
       pred[,p] <- factor(pred[,p], levels(modLevel[[p]]))
    }
    result <- pred
END;

DROP PROCEDURE SQL_R_USE_MODEL;
CREATE PROCEDURE SQL_R_USE_MODEL(OUT result "RES")
LANGUAGE SQLSCRIPT AS
BEGIN
    pred = SELECT VENDOR, PRODUCT FROM "PRED";
    model = SELECT * FROM "MODEL";
    CALL USE_ML_MODEL(:pred, :model , result);
END;

CALL SQL_R_USE_MODEL("RES") WITH OVERVIEW;

1 个答案:

答案 0 :(得分:0)

似乎在R脚本中使用while循环解决了这个问题。

p <- 1
while (p < length(params)){ 
   pred[,params[p]] <- factor(pred[,params[p]], levels(modLevel[[params[p]]]))
   p <- p+1
}

如果有人可以使用for解释问题是什么,我会将问题保持打开状态。

相关问题