通过 PL/R 在 Greenplum 中反序列化模型对象时出错
我将模型对象存储在 greenplum 数据库(开源版本)中,并且我已经成功地能够序列化我的模型对象,将它们插入到 greenplum 中的表中并在需要时取消序列化,但是使用我的机器上安装的 R 版本 3.5(本地)。这是下面成功运行的 R 代码:
代码:
fromtable = 'modelObjDevelopment'
mod.id = '7919'
model_obj <-
dbGetQuery(conn,
sprintf("SELECT val from standard.%s where model_id::int = '%s';",
fromtable, mod.id))
iter_model <- postgresqlUnescapeBytea(model_obj)
lm_obj_back <- unserialize(iter_model)
summary(lm_obj_back)
最近,我在 greenplum 上安装了 PL/R 以及我通常使用的所有必要库。我正在尝试重新创建在本地 R 中使用的代码(如上所述)以在 greenplum 上运行。经过大量研究,我一直在尝试运行以下转换后的代码,它不断失败并给我同样的错误。
代码:
DROP FUNCTION IF EXISTS mdl_load(val bytea);
CREATE FUNCTION mdl_load(val bytea)
RETURNS text AS
$$
require("RPostgreSQL")
iter_model<-postgresqlUnescapeBytea(val)
model<-unserialize(iter_model)
return(length(val))
$$
LANGUAGE 'plr';
select length(val::bytea) as len, mdl_load(val) as t
from modelObjDevelopment
where model_id::int = 7919
此时我不在乎我返回什么,我只希望反序列化函数工作。
错误:
[22000] 错误:R 解释器表达式评估错误详细信息:反序列化错误(iter_model):未知输入格式其中:在 PL/R 函数 mdl_load
希望有人有类似的问题,并且可能对我有所帮助。似乎 bytea 对象在传递到 Pl/R 后会改变大小。我是这种方法的新手,希望有人能提供帮助。