我使用dplyr从sql数据库获取数据,它通常工作得很好。
但是有时候我的代码运行速度很慢,我不确定为什么。在大多数情况下,我连接到具有100万行的表时,我会过滤一些数据,然后使用像这样的collect函数
ERROR: b'142 <172>1 2019-07-03T10:06:07+00:00 host heroku logplex - Error L10 (output buffer overflow): 6 messages dropped since 2019-07-03T09:43:52+00:00.595 <158>1 2019-07-03T10:06:07.509894+00:00 host heroku router - at=info ...
从数据库加载数据仅需几秒钟。但是有时候我的代码很慢,我也不知道为什么。它可能与存储在数据库中的数据类型有关,例如持续时间。在这种情况下,使用与上面相同的代码加载数据需要10分钟。
只有运行得总是快的东西
flights <- tbl(
getDbConn("flight_data"),
in_schema(
"flights",
"usa")
) %>%
filter(destination == "east_coast") %>%
filter(city %in% c("NYC", "MIA") == F) %>%
filter(passanger_id %in% passangers$id) %>%
select(city, passanger_id, date) %>%
collect()
上面的代码运行几秒钟。但是,一旦我使用此数据收集功能,它就会很慢-10分钟或更长时间。我很好奇,有没有其他快速的收集方法?我尝试了tbl_df,但是模拟速度很慢。
答案 0 :(得分:0)
这是由于懒惰的评估。 这部分仅计划工作:
flights <- tbl(
getDbConn("flight_data"),
in_schema(
"flights",
"usa")
) %>%
filter(destination == "east_coast",
city %in% c("NYC", "MIA"),
passanger_id %in% passangers$id) %>%
select(city, passanger_id, date)
您可以看到您实际创建的查询:
flights %>%
show_query()
仅当您运行收集时,才会执行查询并传输数据:
flights %>%
collect()