Достижение распределения данных шарда на нескольких Postgres серверах в R - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть 3 базы данных шарда на 3 разных Postgres серверах, и я пытаюсь подключить эти серверы и написать sql, чтобы вернуть значение в R. Я могу подключиться и написать запрос для первого, но мне нужно результат данных из трех таблиц вместе. Что я должен сделать для этого?

require("RPostgreSQL")
library(DBI)
library('dplyr')

# password
pw <- "postgres"

# loads the PostgreSQL driver
drv <- dbDriver("PostgreSQL")

# creates a connection to the postgres database
con1 <- dbConnect(
  drv,
  dbname = "postgres",
  host = "0.0.0.0",
  port = 5436,
  user = "postgres",
  password = pw
)
con2 <- dbConnect(
  drv,
  dbname = "postgres",
  host = "0.0.0.0",
  port = 5431,
  user = "postgres",
  password = pw
)
con3 <- dbConnect(
  drv,
  dbname = "postgres",
  host = "0.0.0.0",
  port = 5436,
  user = "postgres",
  password = pw
)
rm(pw) # removes the password


# check for connection
dbExistsTable(con1, "shard1")
dbExistsTable(con2, "shard2")
dbExistsTable(con3, "shard3")
# TRUE

# the amount of paid installs by company, which happened in May
query = "SELECT company, SUM(installs)
FROM shard1
WHERE paid= 'TRUE' AND to_char(created_at,'mm')='05'
GROUP BY company"
dsub = tbl(con1, sql(query))
dsub

1 Ответ

0 голосов
/ 05 февраля 2020

Просто связать строки всех результирующих кадров данных. Поскольку имена изменяются в шаблоне 1-2-3, используйте get() в объекте соединения и интерполяцию строки для имени таблицы в запросе SQL, причем обе динамически ссылаются с использованием paste0:

# RETURN LIST DATA FRAMES FOR EACH CONNECTION
df_list <- lapply(c(1:3), function(i) {

      query <- "SELECT company, SUM(installs) AS total_installs
                FROM %s
                WHERE paid = 'TRUE' 
                  AND to_char(created_at,'mm')='05'
                GROUP BY company"

      dbGetQuery(get(paste0("con", i)), sprintf(query, paste0("shard", i)))
})

final_df <- do.call(rbind, df_list)     # BASE R CHAIN APPEND METHOD
# final_df <- bind_rows(df_list)        # DPLYR CHAIN APPEND METHOD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...