Функция PL/R, принимающая две таблицы в качестве аргументов
Я изо всех сил пытаюсь найти примеры функции PL/R, которая может принимать две таблицы postgres. PL/R docs не дает такого примера.
Чтобы иметь рабочие примеры, рассмотрим возможность объединения двух таблиц postgres на стороне R.
Наличие двух таблиц в 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');
Я ищу заменить следующий запрос
SELECT * FROM x INNER JOIN y ON x.a=y.a;
С функцией PL/R, определенной в R как:
my_function = function(x, y){
merge(x, y, by = "a")
}
Я был в состоянии вызвать функцию PL/R, которая принимает одну таблицу, но не две.
1 ответ
Я не думаю, что 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
Выше приведена функция для postgresql, она также может быть записана в функции R.
Вот код для R
Мы должны хранить все значения таблицы x в переменной x. Смотрите коды ниже
x <- dbGetQuery(con, "SELECT * from sandbox.x")
--con - это соединение, которое подключается к вашей базе данных, песочница - это имя схемы, 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)
}
Я приложил скриншот шагов для вашей справки