Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从数据库获取最少数据的最快方法_R_Postgresql - Fatal编程技术网

R 从数据库获取最少数据的最快方法

R 从数据库获取最少数据的最快方法,r,postgresql,R,Postgresql,我有一个Postgres数据库。我想从某个表中找到名为calendarid的列的最小值,该列的类型为integer,格式为yyyymmdd。我可以通过以下代码执行此操作 get_history_startdate <- function(src) { get_required_table(src) %>% # This gives me the table tbl(src, "table_name") select(calendarid) %>% as_da

我有一个Postgres数据库。我想从某个表中找到名为calendarid的列的最小值,该列的类型为integer,格式为yyyymmdd。我可以通过以下代码执行此操作

get_history_startdate <- function(src) {
  get_required_table(src) %>% # This gives me the table tbl(src, "table_name")
    select(calendarid) %>%
    as_data_frame %>%
    collect() %>%
    min() # Result : 20150131
}

但是这种方法非常慢,因为它将所有数据从数据库加载到内存。有什么办法可以改进吗

如果只需要整个表中calendarid列的最小值,请使用以下命令:

SELECT MIN(calendarid) AS min_calendarid
FROM your_table;
我不知道你的R代码到底在做什么,但是如果它把整个表从Postgres带到R中,那是非常浪费的。如果是这样的话,那么直接在Postgres上运行上述查询应该会提高性能

get_required_table(src) %>% 
  summarise(max(calendarid, na.rm = TRUE)) %>% 
  pull

将运行相应的SQL查询。

我的方法是将最小的查找任务委托给数据库。但我不知道怎么做。我将非常感谢在这个方向上的任何线索或任何其他更好的解决方案。可能获得所需的\u tablesrc%>%summaryMaxalendarId,na.rm=TRUE%>%pull?它应该运行适当的SQL查询。但无论如何,在大多数数据库管理系统上,这个查询将是Tim Biegelseisen在下面提出的。@Scarabee这正是我要找的。我不想在代码中加入显式SQL查询。我想让包裹来处理它。你能把它贴出来作为答案吗?或者我可以接受它作为答案。我已经想到了这种方法。但在我看来,发送SQL查询是在创建对数据库类型的依赖。我想在R中处理它。更详细地说,我想R生成与您在幕后提到的相同的SQL查询。但我是R的新手,我不知道该怎么做!我使用RPostgres包初始化数据库,使用DBI包连接数据库。作为最后的手段,我将构建一个您提到的查询。但我想探索任何其他优雅的解决方案。我读了一些关于dplyr pkg的摘要、切片等。但我不能把我的头绕在它周围你不能两全其美。要么在Postgres上执行查询,这会导致一些网络延迟,是的,依赖于RDBMS,要么导入所有数据,它使用了更多的网络带宽,然后占用了R中的大量内存。R中的库可以让您在SQL数据库上相当无缝地执行查询。我不认为对DBMS有任何依赖性。从z中选择minx作为y;应该可以在任何SQL数据库中使用。而且{x,y,z}的值可能会有所不同。