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

#r #loops #apply #lapply

#r #циклы #применить #lapply

Вопрос:

Я хочу запустить тот же 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")
  

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

Ответ №1:

Просто используйте paste (или его оболочку без пробелов, paste0 ) для построения вектора инструкций SQL, поскольку все объекты имеют одинаковую длину. Затем передайте vector в 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))