jan*_*cki 5 postgresql r plpgsql plr
我很难找到一个可以接受两个postgres表的PL/R函数的例子.PL/R docs没有提供任何这样的例子.
要有一个工作示例,我们可以考虑在R端使用两个postgres表的合并.
在postgres有两张桌子
CREATE TABLE x (a numeric, b text);
CREATE TABLE y (a numeric, d text);
INSERT INTO x VALUES (1, 'a'),(2, 'b');
INSERT INTO y VALUES (2, 'b'),(3, 'c');
Run Code Online (Sandbox Code Playgroud)
我想替换以下查询
SELECT * FROM x INNER JOIN y ON x.a=y.a;
Run Code Online (Sandbox Code Playgroud)
使用R中定义的PL/R函数:
my_function = function(x, y){
merge(x, y, by = "a")
}
Run Code Online (Sandbox Code Playgroud)
我能够调用PL/R函数,它接受单个表,但不是两个.
我不认为 postgeql 可以接受真实的表作为参数。
但还有另一种方法可以做到这一点。您可以将表名称作为参数传递。
这是函数
CREATE OR REPLACE FUNCTION merge(t1 text, t2 text)
returns setof x as
BEGIN
execute 'select * from ' || t1 ||' join ' || t2 || ' on t1.a=t2.a';
END
Run Code Online (Sandbox Code Playgroud)
以上是postgresql的函数,也可以用R函数编写。
这是R的代码
我们必须将表 x 的所有值存储到变量 x 中。请参阅下面的代码
x <- dbGetQuery(con, "SELECT * from sandbox.x")--con 是连接到数据库的连接,sandbox 是模式名称,x 是表名称
将表 y 的值存储到变量 y 中
y<-dbGetQuery(con, "SELECT * from sandbox.y")
合并2个表
total <- merge(x,y,by="a")
您还可以编写另一个函数来包装合并函数,请参阅下面的代码
myTotal <- function(x,y) {
result <- merge(x,y,by="a")
return(result)
}
我附上步骤截图供您参考
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |