mutate
suivi de select
n’est pas neutre,
mais va plus vite que le calcul lui-même. Il est probable que l’on paye
l’optimisation de la requête SQL, mais le calcul est évité.
con <- DBI::dbConnect(duckdb::duckdb())
flights <- nycflights13::flights
DBI::dbWriteTable(con, name = "flights_table", value = flights)
On compare
zero
: on demande uniquement l’accès à la table
(peut-être les 10 premières lignes)nothing
: la matérialisation d’une table dans la
mémoire de DuckDBmutate_seul
: calculer une nouvelle variablemutate_select
: calcul suivi de la suppression de cette
variableOn force le calcul en demandant à DuckDB de stocker le résultat dans une table temporaire.
microbenchmark::microbenchmark(
zero = con %>% tbl("flights_table"),
nothing = con %>% tbl("flights_table") %>% compute(),
mutate_seul = con %>% tbl("flights_table") %>% mutate(calcul = exp(distance)) %>% compute(),
mutate_select = con %>% tbl("flights_table") %>% mutate(calcul = exp(distance)) %>% select(-calcul) %>% compute(),
times = 20L
) %>% ggplot2::autoplot()
DBI::dbDisconnect(con)