Функция 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

  1. Мы должны хранить все значения таблицы x в переменной x. Смотрите коды ниже

    x <- dbGetQuery(con, "SELECT * from sandbox.x") --con - это соединение, которое подключается к вашей базе данных, песочница - это имя схемы, x - это имя таблицы.

  2. Сохранить значения таблицы y в переменную y

    y<-dbGetQuery(con, "SELECT * from sandbox.y")

  3. объединить 2 таблицы

    total <- merge(x,y,by="a")

  4. Вы также можете написать другую функцию, чтобы обернуть функцию слияния, см. Коды ниже

    myTotal <- function(x,y) {result <- merge(x,y,by="a")return(result)}

Я приложил скриншот шагов для вашей справки

Другие вопросы по тегам