<!DOCTYPE html>
TUTORIAL: The aims of this vignette is to learn how to request tables with dplyr package.
Install the present package and use its core functions
remotes::install_github('inrae/diades.atlas')
##
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
##
## filter, lag
## Les objets suivants sont masqués depuis 'package:base':
##
## intersect, setdiff, setequal, union
##
## Attachement du package : 'diades.atlas'
## L'objet suivant est masqué _par_ '.GlobalEnv':
##
## frontiers
# pkgload::load_all()
You can use this package without opening the Shiny application
se <- new.env()
conn_eurodiad <- dbConnect(
RPostgres::Postgres(),
dbname = 'eurodiad',
host = '<your-host>',
port = 5432,
user = '<your-username>',
password = rstudioapi::askForPassword("Database password"))
session$userData$con <-conn_eurodiad
# For ThinkR only
se <- new.env()
conn_eurodiad <- connect(session = se)
DBI::dbListTables(conn_eurodiad)
## [1] "outlet_distance" "hydiadparameter" "basin_location" "ices_rectangle2"
## [5] "ices_division" "cices" "abundance" "v_abundance"
## [9] "dbversion" "v_iucn" "abundance_level" "v_hybrid_model_mavg"
## [13] "v_ecosystemic_services" "v_occurence" "v_basin" "v_species_ices_occurence"
## [17] "v_hybrid_model" "species_iucn" "ices_area" "ices_rectangle"
## [21] "iucn_classification" "iucn_level" "species_division" "species_rectangle"
## [25] "v_ices_geom" "esvalue" "locale" "hybrid_model_result"
## [29] "casestudy" "ecosystemic_services" "basin" "basin_outlet"
## [33] "casestudy_basin" "climatic_model" "species" "category"
## [37] "subcategory" "v_maxvalue_es" "lang85_85" "ices_grass"
It is recommended to use tbl() instead of
dbGetQuery() to connect to a table in the database.tbl() does not download the table, it only connect to the
database and let it run the query. This means that if you run a
filter() or a mutate() after that, the
database executes it, not R, which is more efficient.
However, at
some point, some of your {tidyverse} operations can not be realised or
translated in SQL, hence, you need to download the resulting dataset
using collect(). Then you can continue as usual.
For instance.
dbGetQuery() download data in R
filter() is executed by R in your R session
!! is a specific to using {dplyr} with SQL there.
species_id) is
defined in the R session, but not in the database. Therefore, before
sending the SQL query to the database, R has to transform the variable
by its real value in R. Otherwise, it will send the word
"species_id" which does not make sense for the SQL
database, instead of the number you wanted to put.
# Create a function
get_data_dbi <- function(conn_eurodiad, species_id, scenario) {
query <- "SELECT * FROM diadesatlas.v_hybrid_model"
dbGetQuery(conn_eurodiad, query) %>%
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario)
}
# Use it
get_data_dbi(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85')
## hybrid_model_result_id basin_id species_id climatic_model_id year nit hsi saturation_rate
## 1 60705 1 6 2 1951 1176.10865 0.24424759 0.557657000
## 2 60706 1 6 2 1952 1143.58207 0.32226324 0.410966634
## 3 60707 1 6 2 1953 1119.68854 0.19459266 0.666378201
## 4 60708 1 6 2 1954 1096.77221 0.24571498 0.516933634
## 5 60709 1 6 2 1955 733.80042 0.08498220 1.000000000
## 6 60710 1 6 2 1956 997.76524 0.23510293 0.491496377
## 7 60711 1 6 2 1957 948.55155 0.32735810 0.335573647
## 8 60712 1 6 2 1958 911.75573 0.41504563 0.254409106
## 9 60713 1 6 2 1959 724.22078 0.24550794 0.341629559
## 10 60714 1 6 2 1960 669.87258 0.37964568 0.204344865
## 11 60715 1 6 2 1961 605.41363 0.27040872 0.259287450
## 12 60716 1 6 2 1962 684.41456 0.24577305 0.322503903
## 13 60717 1 6 2 1963 565.59345 0.22412295 0.292259095
## 14 60718 1 6 2 1964 449.55752 0.25041559 0.207909291
## 15 60719 1 6 2 1965 331.77212 0.32038514 0.119927153
## 16 60720 1 6 2 1966 317.39593 0.25260188 0.145517346
## 17 60721 1 6 2 1967 280.88310 0.36233798 0.089776310
## 18 60722 1 6 2 1968 229.64019 0.26426540 0.100636979
## 19 60723 1 6 2 1969 130.63829 0.32815258 0.046104642
## 20 60724 1 6 2 1970 77.45504 0.07997118 0.112167277
## 21 60725 1 6 2 1971 49.64420 0.32295007 0.017802589
## 22 60726 1 6 2 1972 36.16250 0.26076233 0.016060668
## 23 60727 1 6 2 1973 17.78938 0.32594177 0.006320782
## 24 60728 1 6 2 1974 5.98065 0.32919022 0.002104028
## 25 60729 1 6 2 1975 0.00000 0.33330411 0.000000000
## 26 60730 1 6 2 1976 0.00000 0.07650311 0.000000000
## 27 60731 1 6 2 1977 0.00000 0.12106809 0.000000000
## 28 60732 1 6 2 1978 0.00000 0.24494783 0.000000000
## 29 60733 1 6 2 1979 0.00000 0.26687631 0.000000000
## 30 60734 1 6 2 1980 0.00000 0.24788790 0.000000000
## 31 60735 1 6 2 1981 0.00000 0.25248367 0.000000000
## 32 60736 1 6 2 1982 0.00000 0.05853723 0.000000000
## 33 60737 1 6 2 1983 0.00000 0.43384268 0.000000000
## 34 60738 1 6 2 1984 0.00000 0.24605194 0.000000000
## 35 60739 1 6 2 1985 0.00000 0.32409335 0.000000000
## 36 60740 1 6 2 1986 0.00000 0.30049253 0.000000000
## 37 60741 1 6 2 1987 0.00000 0.31984017 0.000000000
## 38 60742 1 6 2 1988 0.00000 0.24944539 0.000000000
## 39 60743 1 6 2 1989 0.00000 0.26567151 0.000000000
## 40 60744 1 6 2 1990 0.00000 0.23825317 0.000000000
## 41 60745 1 6 2 1991 0.00000 0.32738422 0.000000000
## 42 60746 1 6 2 1992 0.00000 0.32538706 0.000000000
## 43 60747 1 6 2 1993 0.00000 0.31455448 0.000000000
## 44 60748 1 6 2 1994 0.00000 0.25445784 0.000000000
## 45 60749 1 6 2 1995 0.00000 0.32881698 0.000000000
## 46 60750 1 6 2 1996 0.00000 0.40264379 0.000000000
## 47 60751 1 6 2 1997 0.00000 0.32566102 0.000000000
## 48 60752 1 6 2 1998 0.00000 0.35783520 0.000000000
## 49 60753 1 6 2 1999 0.00000 0.37290455 0.000000000
## 50 60754 1 6 2 2000 0.00000 0.33744471 0.000000000
## 51 60755 1 6 2 2001 0.00000 0.26335707 0.000000000
## 52 60756 1 6 2 2002 0.00000 0.17640363 0.000000000
## 53 60757 1 6 2 2003 0.00000 0.35140068 0.000000000
## 54 60758 1 6 2 2004 0.00000 0.29239221 0.000000000
## 55 60759 1 6 2 2005 0.00000 0.18490081 0.000000000
## 56 60760 1 6 2 2006 0.00000 0.25068678 0.000000000
## 57 60761 1 6 2 2007 0.00000 0.25083582 0.000000000
## 58 60762 1 6 2 2008 0.00000 0.12043068 0.000000000
## climatic_scenario climatic_model_code oceanic_model atmospheric_model climatic_model_hm basin_name
## 1 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 2 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 3 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 4 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 5 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 6 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 7 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 8 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 9 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 10 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 11 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 12 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 13 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 14 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 15 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 16 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 17 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 18 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 19 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 20 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 21 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 22 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 23 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 24 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 25 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 26 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 27 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 28 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 29 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 30 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 31 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 32 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 33 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 34 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 35 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 36 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 37 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 38 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 39 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 40 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 41 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 42 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 43 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 44 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 45 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 46 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 47 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 48 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 49 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 50 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 51 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 52 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 53 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 54 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 55 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 56 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 57 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 58 rcp85 cnrmcm5 CNRM-CM5 CNRM-CERFACS-CNRM-CM5 cn Aa
## fish_name latin_name simplified_name
## 1 Allis shad Alosa alosa A. alosa
## 2 Allis shad Alosa alosa A. alosa
## 3 Allis shad Alosa alosa A. alosa
## 4 Allis shad Alosa alosa A. alosa
## 5 Allis shad Alosa alosa A. alosa
## 6 Allis shad Alosa alosa A. alosa
## 7 Allis shad Alosa alosa A. alosa
## 8 Allis shad Alosa alosa A. alosa
## 9 Allis shad Alosa alosa A. alosa
## 10 Allis shad Alosa alosa A. alosa
## 11 Allis shad Alosa alosa A. alosa
## 12 Allis shad Alosa alosa A. alosa
## 13 Allis shad Alosa alosa A. alosa
## 14 Allis shad Alosa alosa A. alosa
## 15 Allis shad Alosa alosa A. alosa
## 16 Allis shad Alosa alosa A. alosa
## 17 Allis shad Alosa alosa A. alosa
## 18 Allis shad Alosa alosa A. alosa
## 19 Allis shad Alosa alosa A. alosa
## 20 Allis shad Alosa alosa A. alosa
## 21 Allis shad Alosa alosa A. alosa
## 22 Allis shad Alosa alosa A. alosa
## 23 Allis shad Alosa alosa A. alosa
## 24 Allis shad Alosa alosa A. alosa
## 25 Allis shad Alosa alosa A. alosa
## 26 Allis shad Alosa alosa A. alosa
## 27 Allis shad Alosa alosa A. alosa
## 28 Allis shad Alosa alosa A. alosa
## 29 Allis shad Alosa alosa A. alosa
## 30 Allis shad Alosa alosa A. alosa
## 31 Allis shad Alosa alosa A. alosa
## 32 Allis shad Alosa alosa A. alosa
## 33 Allis shad Alosa alosa A. alosa
## 34 Allis shad Alosa alosa A. alosa
## 35 Allis shad Alosa alosa A. alosa
## 36 Allis shad Alosa alosa A. alosa
## 37 Allis shad Alosa alosa A. alosa
## 38 Allis shad Alosa alosa A. alosa
## 39 Allis shad Alosa alosa A. alosa
## 40 Allis shad Alosa alosa A. alosa
## 41 Allis shad Alosa alosa A. alosa
## 42 Allis shad Alosa alosa A. alosa
## 43 Allis shad Alosa alosa A. alosa
## 44 Allis shad Alosa alosa A. alosa
## 45 Allis shad Alosa alosa A. alosa
## 46 Allis shad Alosa alosa A. alosa
## 47 Allis shad Alosa alosa A. alosa
## 48 Allis shad Alosa alosa A. alosa
## 49 Allis shad Alosa alosa A. alosa
## 50 Allis shad Alosa alosa A. alosa
## 51 Allis shad Alosa alosa A. alosa
## 52 Allis shad Alosa alosa A. alosa
## 53 Allis shad Alosa alosa A. alosa
## 54 Allis shad Alosa alosa A. alosa
## 55 Allis shad Alosa alosa A. alosa
## 56 Allis shad Alosa alosa A. alosa
## 57 Allis shad Alosa alosa A. alosa
## 58 Allis shad Alosa alosa A. alosa
## [ reached 'max' / getOption("max.print") -- omitted 60242 rows ]
tbl() only connects to the table, only a glimpse of the
data is presented
filter() is run by the SQL database
get_data_tbl <- function(conn_eurodiad, species_id, scenario) {
tbl(conn_eurodiad, "v_hybrid_model") %>%
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario)
}
# Use it
get_data_tbl(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85')
## # Source: lazy query [?? x 17]
## # Database: postgres [ptlambert@citerne.bordeaux.irstea.priv:5432/eurodiad]
## hybrid_model_result_id basin_id species_id climatic_model_id year nit hsi saturation_rate climatic_scenar…
## <int> <int> <int> <int> <int> <dbl> <dbl> <dbl> <chr>
## 1 60705 1 6 2 1951 1176. 0.244 0.558 rcp85
## 2 60706 1 6 2 1952 1144. 0.322 0.411 rcp85
## 3 60707 1 6 2 1953 1120. 0.195 0.666 rcp85
## 4 60708 1 6 2 1954 1097. 0.246 0.517 rcp85
## 5 60709 1 6 2 1955 734. 0.0850 1 rcp85
## 6 60710 1 6 2 1956 998. 0.235 0.491 rcp85
## 7 60711 1 6 2 1957 949. 0.327 0.336 rcp85
## 8 60712 1 6 2 1958 912. 0.415 0.254 rcp85
## 9 60713 1 6 2 1959 724. 0.246 0.342 rcp85
## 10 60714 1 6 2 1960 670. 0.380 0.204 rcp85
## # … with more rows, and 8 more variables: climatic_model_code <chr>, oceanic_model <chr>,
## # atmospheric_model <chr>, climatic_model_hm <chr>, basin_name <chr>, fish_name <chr>, latin_name <chr>,
## # simplified_name <chr>
get_data_tbl_collect <- function(conn_eurodiad, species_id, scenario) {
tbl(conn_eurodiad, "v_hybrid_model") %>%
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario) %>%
# From collect(), the full data is in the R session
collect()
}
# Use it
get_data_tbl_collect(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85') %>%
filter(basin_id == 1) %>%
ggplot(aes(x = year)) +
geom_line(aes(y = hsi))
tbl()
get_data_tbl_query_collect <- function(conn_eurodiad, species_id, scenario) {
query <- "SELECT * FROM diadesatlas.v_hybrid_model"
tbl(conn_eurodiad, sql(query)) %>%
# Adds a filter to be run as SQL in the database
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario) %>%
# From collect(), the full data is in the R session
collect()
}
# Use it
get_data_tbl_query_collect(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85') %>%
filter(basin_id == 1) %>%
ggplot(aes(x = year)) +
geom_line(aes(y = hsi))
DBI::dbDisconnect(conn_eurodiad)