R: Как построить SQL, используя имена таблиц, столбцов и схем из фрейма данных? - PullRequest
0 голосов
/ 18 марта 2019

Я хочу запустить тот же SQL для стека таблиц, столбцов и схем БД. У меня есть датафрейм, похожий на этот:

schema <- c('schema_1','schema_1','schema_1', 'schema_2', 'schema_2')
table <- c('table_1','table_1','table_2', 'table_3', 'table_3')
column <- c('A','B','V','X','Y')
df <- data.frame(schema, table, column)

Я хочу запустить простой SQL с первыми строками столбца, подобным этому, во всех строках df:

библиотека (postGIStools)

get_postgis_query(con_ent_gis, "select column from schema.table LIMIT 6")

Насколько я понимаю, я мог бы написать что-то похожее на

get_postgis_query(con_ent_gis, "select df$column[i] from df$schema[i].df$table[i] LIMIT 6")

в петле, Райт? Или какой-либо пакет или функция, как это применимо, удовлетворенно .. делает что-то подобное, без необходимости цикла?

1 Ответ

2 голосов
/ 18 марта 2019

Просто используйте paste (или его оболочку без пробелов, paste0), чтобы построить вектор операторов SQL, поскольку все объекты имеют одинаковую длину. Затем передайте вектор в lapply для итеративных вызовов запросов для списка возвращаемых объектов.

# BUILD VECTOR OF SQL STATEMENTS
sqls <- paste0("select ", df$column, " from ", df$schema, ".", df$table, " LIMIT 6")
sqls    
# [1] "select A from schema_1.table_1 LIMIT 6"
# [2] "select B from schema_1.table_1 LIMIT 6"
# [3] "select V from schema_1.table_2 LIMIT 6"
# [4] "select X from schema_2.table_3 LIMIT 6"
# [5] "select Y from schema_2.table_3 LIMIT 6"

# ITERATIVELY RUN EACH QUERY TO RETURN LIST OF OBJECTS
data_list <- lapply(sqls, function(s) get_postgis_query(con_ent_gis, s))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...