Utiliser SQL dans R

Author

Noé Barthelemy - ISEE

I) Introduction

SQL c’est bien. R aussi. Pourquoi ne pas utiliser les deux en un seul endroit ? Ici, je vous montre 3 méthodes pour utiliser SQL au sein de vos scripts dans Rstudio.

Je vous recommande la troisième méthode, qui permet d’utiliser dplyr directement sur une table d’une base de données :

dplyr, vous le savez surement, est une bibliothèque R qui offre une syntaxe cohérente et conviviale pour la manipulation de données, indépendamment de la source (cadres de données R, bases de données, etc.). Elle rend les opérations de manipulation de données plus simples et plus lisibles. Autrement dit, dplyr permet de travailler de manière similaire sur différentes sources de données, qu’il s’agisse de dataframes R, de bases de données ou d’autres sources. Cela peut faciliter le travail sur différentes plates-formes sans avoir à se soucier des différences de syntaxe SQL spécifiques à chaque système de gestion de base de données.


Pourquoi ça me concerne ?

Pour les utilisateurs habitués à R, l’utilisation de dplyr offre une syntaxe plus familière et intuitive que le SQL. Vous pourrez ainsi regrouper l’entiereté de votre analyse en un seul script et la commenter, puis en faire un Rmarkdown ou un PDF. Cela facilitera significativement la collaboration avec vos collègues de l’ISEE ou d’ailleurs, et rendre votre travail reproductible et transparent !

II) Méthode 1 : SQL dans R avec le package DBI

1) Créer une BDD SQL dans R

Il y a plusieurs façons d’utiliser SQL dans R.

Nous allons d’abord utiliser une manière assez directe. Pour cela, il nous faut des données. Prenons le jeu de données ‘mtcars’ intégré à R.

En R, on peut déjà observer ce jeu de données :

data("mtcars")
head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
mtcars_modif <- mtcars
mtcars_modif$`car name` <- rownames(mtcars_modif)  
# Créer une nouvelle colonne pour les noms des voitures
R: Motor Trend Car Road Tests
mtcars R Documentation

Motor Trend Car Road Tests

Description

The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).

Usage

mtcars

Format

A data frame with 32 observations on 11 (numeric) variables.

[, 1] mpg Miles/(US) gallon
[, 2] cyl Number of cylinders
[, 3] disp Displacement (cu.in.)
[, 4] hp Gross horsepower
[, 5] drat Rear axle ratio
[, 6] wt Weight (1000 lbs)
[, 7] qsec 1/4 mile time
[, 8] vs Engine (0 = V-shaped, 1 = straight)
[, 9] am Transmission (0 = automatic, 1 = manual)
[,10] gear Number of forward gears
[,11] carb Number of carburetors

Note

Henderson and Velleman (1981) comment in a footnote to Table 1: ‘Hocking [original transcriber]'s noncrucial coding of the Mazda's rotary engine as a straight six-cylinder engine and the Porsche's flat engine as a V engine, as well as the inclusion of the diesel Mercedes 240D, have been retained to enable direct comparisons to be made with previous analyses.’

Source

Henderson and Velleman (1981), Building multiple regression models interactively. Biometrics, 37, 391–411.

Examples

require(graphics)
pairs(mtcars, main = "mtcars data", gap = 1/4)
coplot(mpg ~ disp | as.factor(cyl), data = mtcars,
       panel = panel.smooth, rows = 1)
## possibly more meaningful, e.g., for summary() or bivariate plots:
mtcars2 <- within(mtcars, {
   vs <- factor(vs, labels = c("V", "S"))
   am <- factor(am, labels = c("automatic", "manual"))
   cyl  <- ordered(cyl)
   gear <- ordered(gear)
   carb <- ordered(carb)
})
summary(mtcars2)



Commençons ici par créer une base de données (BDD) vide, dans laquelle nous allons stocker mtcars. Elle nous servira d’exemple pour les traitements SQL à venir. En revanche, la manière de se connecter à votre BDD dépendra de la solution utilisée (SQlite, MySQL, SQLserver, etc) et de l’adresse de la BDD en question.

N’hésitez pas à me contacter en cas de problèmes.

Le but ici : Créer une connection vers la base de données. Pour cela, nous allons utiliser “pool” : Une ‘pool’ vous permettras de gérer vos connections à la BDD sans avoir à réflechir. Pensez simplement à la fermer après usage (voir ci dessous). #Pour plus d’infos voir : https://shiny.posit.co/r/articles/build/pool-basics/

# Créer une connection.
con <- dbPool(RSQLite::SQLite(), dbname = ":memory:")

Maintenant, crééons la table “mtcars” au sein de notre BDD.

# Créer une table SQL avec le jeu de données "mtcars".
dbWriteTable(con, "mtcars", mtcars_modif)
dbListTables(con)
[1] "mtcars"
# Voila, notre BDD est crée !
dbListFields(con, "mtcars")
 [1] "mpg"      "cyl"      "disp"     "hp"       "drat"     "wt"      
 [7] "qsec"     "vs"       "am"       "gear"     "carb"     "car name"
dbReadTable(con, "mtcars")
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb            car.name
1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4           Mazda RX4
2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4       Mazda RX4 Wag
3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1          Datsun 710
4  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1      Hornet 4 Drive
5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2   Hornet Sportabout
6  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1             Valiant
7  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4          Duster 360
8  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2           Merc 240D
9  22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2            Merc 230
10 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4            Merc 280
11 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4           Merc 280C
12 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3          Merc 450SE
13 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3          Merc 450SL
14 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3         Merc 450SLC
15 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4  Cadillac Fleetwood
16 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4 Lincoln Continental
17 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4   Chrysler Imperial
18 32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1            Fiat 128
19 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2         Honda Civic
20 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1      Toyota Corolla
21 21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1       Toyota Corona
22 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2    Dodge Challenger
23 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2         AMC Javelin
24 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4          Camaro Z28
25 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2    Pontiac Firebird
26 27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1           Fiat X1-9
27 26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2       Porsche 914-2
28 30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2        Lotus Europa
29 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4      Ford Pantera L
30 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6        Ferrari Dino
31 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8       Maserati Bora
32 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2          Volvo 142E

2) Effectuer une requête SQL dans R à l’aide d’un chunk dédié.

Bien, il est temps d’effectuer notre première requête !

Le language de la requête est SQL, mais on utilise la fonction dbGetQuery() du package DBI pour faire notre requête. Le chunk reste donc en language R.

Vous pouvez donc simplement copier la requête SQL qui vous a demandé tant d’efforts !

mt_cars_df <- dbGetQuery(con, "
SELECT *
FROM mtcars
WHERE hp > 150 AND mpg < 18
")

Voilà, c’est tout simple ! A vous de complexifier vos requêtes, et de découvrir les possibilités offertes par ce package.

3) Analyser les données de la requête

Maitenant, on repasse en R !

Et on utilise le résultat de notre requête pour faire un petit graphique !

theme_set(theme_bw())  

# Préparation des données
mt_cars_df$mpg_z <- round((mt_cars_df$mpg - mean(mt_cars_df$mpg))/sd(mt_cars_df$mpg), 2)  
# Calculer la consommation de carburant normalisée
mt_cars_df$mpg_type <- ifelse(mt_cars_df$mpg_z < 0, "en dessous", "au-dessus")  
# Indicateur au-dessus/en dessous de la moyenne
mt_cars_df <- mt_cars_df[order(mt_cars_df$mpg_z), ]  # Trier
mt_cars_df$`car name` <- factor(mt_cars_df$`car name`, levels = mt_cars_df$`car name`)  
# Convertir en facteur pour conserver l'ordre trié dans le graphique.

# Diagrammes en barres divergents
ggplot(mt_cars_df, aes(x=`car name`, y=mpg_z, label=mpg_z)) + 
  geom_bar(stat='identity', aes(fill=mpg_type), width=.5)  +
  scale_fill_manual(name="Consommation", 
                    labels = c("Au-dessus de la moyenne", "En dessous de la moyenne"), 
                    values = c("au-dessus"="#00ba38", "en dessous"="#f8766d")) + 
  labs(subtitle="Consommation normalisée de 'mtcars'", 
       title= "Diagrammes en barres divergents") + 
  coord_flip()

Ici, j’utilise ggplot2 pour créer un graphique en barres divergentes, en mettant en évidence les voitures ayant une consommation de carburant supérieure et inférieure à la moyenne.

Le graphique présente les noms des voitures sur l’axe des x et la consommation de carburant normalisée sur l’axe des y. Les barres sont colorées en fonction de la consommation de carburant par rapport à la moyenne.

Le graphique est affiché en orientation horizontale (coord_flip()) pour une meilleure lisibilité des noms des voitures.

III) Méthode 2 : SQL en chunks

Une autre solution pour utiliser SQL dans R studio : Créer des chunks ou le code sera executé en SQL !

Cette solution simple permet de copier+coller directement vos requêtes dans un chunk. Cela dit, vous devrez au préalable effectuer la connexion avec la base de données.

1) Effectuer une requête SQL dans R à l’aide d’un chunk dédié.

Insérons un chunk sql et sélectionnons les voitures à plus de 150 chevaux et consommant moins de 18 gallons par mile.

  SELECT *
  FROM mtcars
  WHERE hp > 150 AND mpg < 18

Dans l’entête de ce chunk à la place de {r} j’ai mis : {sql, connection=con, output.var = “mt_cars_df_2”}

Notez que la connection à été faite avec “connection = con”, et que le résultat de la requête à été stocké dans “mt_cars_df_2”, directement dans R studio !

2) Analyser

Tout comme avant, on peut analyser le résultat “mt_cars_df_2” directement en R.

ggplot(mt_cars_df_2) +
 aes(x = `car name`, y = mpg, fill = hp) +
 geom_col() +
 scale_fill_gradient() +
 theme_minimal()+
 labs(x = "C'est quoi ta bagnole ?", y = "Conso' de fioul !", fill = 
        "Nombre de chevals \n dans l'moteur !") +
 theme(axis.text.x = element_text(size = 8, angle = 60, hjust = 1))

IV) Méthode 3 : SQL & Dplyr !

Tu sais mieux coder en R qu’en SQL ? Cette solution est faite pour toi !

library(dbplyr)
library(dplyr)

Ici, on utilise le package dbplyr pour rédiger des commandes dplyr standard qui seront converties en SQL ! Une fois de plus, en utilisant la connexion et la base de données du premier exemple, vous pouvez rédiger un appel standard à la fonction filter() pour interroger les voitures avec quatre cylindres, cela renvoie un objet de type liste :

#On commence par faire la connection à la bonne base de données :
dbplyr_query <- tbl(con, "mtcars") %>% 
  # Puis on pipe une action, ici la fonction filter, 
  # comme on le ferait sur n'importe quel jeu de données. 
  filter(hp > 150 && mpg < 18)

Et comme notre “connection” (con) ici est une pool, on peut également utiliser dplyr directement dessus :

dbplyr_query <- con %>% tbl("mtcars") %>% 
  # Puis on pipe une action, ici la fonction filter, 
  # comme on le ferait sur n'importe quel jeu de données. 
  filter(hp > 150 && mpg < 18)

Si vous souhaitez voir la traduction en code SQL de votre commande, vous pouvez utiliser la fonction show_query() du package dbplyr :

show_query(dbplyr_query)
<SQL>
SELECT `mtcars`.*
FROM `mtcars`
WHERE (`hp` > 150.0 AND `mpg` < 18.0)

Lorsque vous êtes satisfait des résultats de votre requête, vous utilisez la fonction collect() du package dbplyr pour sauvegarder vos résultats sous forme de dataframe :

tibble_from_dbplyr <- tbl(con, "mtcars") %>% 
  filter(hp > 150 && mpg < 18) %>% 
  collect()

Et voila ! Avec ce tableau, on peut continuer nos analyses.

Par exemple, y-aurait-il une corrélation entre le nombre de KM parcourus avec un gallon (la conso’ donc) et la puissance dans nos voitures ?

cor.test(x = tibble_from_dbplyr$mpg, tibble_from_dbplyr$hp, "less", "pearson")

    Pearson's product-moment correlation

data:  tibble_from_dbplyr$mpg and tibble_from_dbplyr$hp
t = -0.098037, df = 8, p-value = 0.4622
alternative hypothesis: true correlation is less than 0
95 percent confidence interval:
 -1.0000000  0.5277646
sample estimates:
        cor 
-0.03464065 

Hé ben pas tellement on dirait ! Les grosses voitures que nous avons sélectionné doivent toutes polluer autant les unes que les autres :)

V) Exemple sur une BDD de l’ISEE

Voyons voir ce que cela donne dans la vie réelle, c’est à dire en utilisant une BDD de l’ISEE.

La BDD en question est AdventureWorks. C’est une BDD mise à disposition par Microsoft pour faire des tests.

library(odbc)
odbcListDrivers()
                                                     name        attribute
1                                              SQL Server         APILevel
2                                              SQL Server ConnectFunctions
3                                              SQL Server        CPTimeout
4                                              SQL Server    DriverODBCVer
5                                              SQL Server        FileUsage
6                                              SQL Server         SQLLevel
7                                              SQL Server       UsageCount
8                           SQL Server Native Client 11.0       UsageCount
9                           SQL Server Native Client 11.0         APILevel
10                          SQL Server Native Client 11.0 ConnectFunctions
11                          SQL Server Native Client 11.0        CPTimeout
12                          SQL Server Native Client 11.0    DriverODBCVer
13                          SQL Server Native Client 11.0        FileUsage
14                          SQL Server Native Client 11.0         SQLLevel
15                          ODBC Driver 13 for SQL Server       UsageCount
16                          ODBC Driver 13 for SQL Server         APILevel
17                          ODBC Driver 13 for SQL Server ConnectFunctions
18                          ODBC Driver 13 for SQL Server        CPTimeout
19                          ODBC Driver 13 for SQL Server    DriverODBCVer
20                          ODBC Driver 13 for SQL Server        FileUsage
21                          ODBC Driver 13 for SQL Server         SQLLevel
22                      SQL Server Native Client RDA 11.0       UsageCount
23                      SQL Server Native Client RDA 11.0         APILevel
24                      SQL Server Native Client RDA 11.0 ConnectFunctions
25                      SQL Server Native Client RDA 11.0        CPTimeout
26                      SQL Server Native Client RDA 11.0    DriverODBCVer
27                      SQL Server Native Client RDA 11.0        FileUsage
28                      SQL Server Native Client RDA 11.0         SQLLevel
29                          ODBC Driver 17 for SQL Server       UsageCount
30                          ODBC Driver 17 for SQL Server         APILevel
31                          ODBC Driver 17 for SQL Server ConnectFunctions
32                          ODBC Driver 17 for SQL Server        CPTimeout
33                          ODBC Driver 17 for SQL Server    DriverODBCVer
34                          ODBC Driver 17 for SQL Server        FileUsage
35                          ODBC Driver 17 for SQL Server         SQLLevel
36               Microsoft Access Driver (*.mdb, *.accdb)       UsageCount
37               Microsoft Access Driver (*.mdb, *.accdb)         APILevel
38               Microsoft Access Driver (*.mdb, *.accdb) ConnectFunctions
39               Microsoft Access Driver (*.mdb, *.accdb)    DriverODBCVer
40               Microsoft Access Driver (*.mdb, *.accdb)        FileUsage
41               Microsoft Access Driver (*.mdb, *.accdb)        FileExtns
42               Microsoft Access Driver (*.mdb, *.accdb)         SQLLevel
43 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)       UsageCount
44 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)         APILevel
45 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) ConnectFunctions
46 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)    DriverODBCVer
47 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)        FileUsage
48 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)        FileExtns
49 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)         SQLLevel
50            Microsoft Access Text Driver (*.txt, *.csv)       UsageCount
51            Microsoft Access Text Driver (*.txt, *.csv)         APILevel
52            Microsoft Access Text Driver (*.txt, *.csv) ConnectFunctions
53            Microsoft Access Text Driver (*.txt, *.csv)    DriverODBCVer
54            Microsoft Access Text Driver (*.txt, *.csv)        FileUsage
55            Microsoft Access Text Driver (*.txt, *.csv)        FileExtns
56            Microsoft Access Text Driver (*.txt, *.csv)         SQLLevel
57    Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)       UsageCount
58    Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)         APILevel
59    Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) ConnectFunctions
60    Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)    DriverODBCVer
61    Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)        FileUsage
62    Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)        FileExtns
63    Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)         SQLLevel
                  value
1                     2
2                   YYY
3                    60
4                 03.50
5                     0
6                     1
7                     1
8                     1
9                     2
10                  YYY
11                   60
12                03.80
13                    0
14                    1
15                    1
16                    2
17                  YYY
18                   60
19                03.80
20                    0
21                    1
22                    1
23                    2
24                  YYY
25                   60
26                03.80
27                    0
28                    1
29                    1
30                    2
31                  YYY
32                   60
33                03.80
34                    0
35                    1
36                    3
37                    1
38                  YYN
39                02.50
40                    2
41        *.mdb,*.accdb
42                    0
43                    3
44                    1
45                  YYN
46                02.50
47                    2
48 *.xls,*.xlsx, *.xlsb
49                    0
50                    3
51                    1
52                  YYN
53                02.50
54                    2
55         *.txt, *.csv
56                    0
57                    3
58                    1
59                  YYN
60                02.50
61                    2
62  *.dbf, *.ndx, *.mdx
63                    0
# Vu que ce script est public, je ne peux pas partager le nom du serveur. 
# J'ai donc stocké cette donnée dans un fichier texte auquel vous n'aurez pas accès. 
# Si vous voulez reproduire l'exemple, c'est simple, il suffit de demander le nom de serveur aux collègues !

Donnees_confidentielles <- read_delim("Donnees_confidentielles.txt", 
    delim = "\t", escape_double = FALSE, 
    trim_ws = TRUE)

nom_serveur_test <- as.character(Donnees_confidentielles[2,2])



# Créer une connection vers AdventureWorks2016 ! 

CON_AW2016 <- dbConnect(odbc(), 
                        Driver = "SQL Server", 
                        Server = nom_serveur_test, 
                        Database = "AdventureWorks2016",
                        Trusted_Connection = "True")       
# La trusted connection fonctionne car vous êtes déjà authentifié sur votre session windows :) 

dbListTables(CON_AW2016)
  [1] "AWBuildVersion"                                      
  [2] "DatabaseLog"                                         
  [3] "ErrorLog"                                            
  [4] "Department"                                          
  [5] "Employee"                                            
  [6] "EmployeeDepartmentHistory"                           
  [7] "EmployeePayHistory"                                  
  [8] "JobCandidate"                                        
  [9] "Shift"                                               
 [10] "Address"                                             
 [11] "AddressType"                                         
 [12] "BusinessEntity"                                      
 [13] "BusinessEntityAddress"                               
 [14] "BusinessEntityContact"                               
 [15] "ContactType"                                         
 [16] "CountryRegion"                                       
 [17] "EmailAddress"                                        
 [18] "Password"                                            
 [19] "Person"                                              
 [20] "PersonPhone"                                         
 [21] "PhoneNumberType"                                     
 [22] "StateProvince"                                       
 [23] "BillOfMaterials"                                     
 [24] "Culture"                                             
 [25] "Document"                                            
 [26] "Illustration"                                        
 [27] "Location"                                            
 [28] "Product"                                             
 [29] "ProductCategory"                                     
 [30] "ProductCostHistory"                                  
 [31] "ProductDescription"                                  
 [32] "ProductDocument"                                     
 [33] "ProductInventory"                                    
 [34] "ProductListPriceHistory"                             
 [35] "ProductModel"                                        
 [36] "ProductModelIllustration"                            
 [37] "ProductModelProductDescriptionCulture"               
 [38] "ProductPhoto"                                        
 [39] "ProductProductPhoto"                                 
 [40] "ProductReview"                                       
 [41] "ProductSubcategory"                                  
 [42] "ScrapReason"                                         
 [43] "TransactionHistory"                                  
 [44] "TransactionHistoryArchive"                           
 [45] "UnitMeasure"                                         
 [46] "WorkOrder"                                           
 [47] "WorkOrderRouting"                                    
 [48] "ProductVendor"                                       
 [49] "PurchaseOrderDetail"                                 
 [50] "PurchaseOrderHeader"                                 
 [51] "ShipMethod"                                          
 [52] "Vendor"                                              
 [53] "CountryRegionCurrency"                               
 [54] "CreditCard"                                          
 [55] "Currency"                                            
 [56] "CurrencyRate"                                        
 [57] "Customer"                                            
 [58] "PersonCreditCard"                                    
 [59] "SalesOrderDetail"                                    
 [60] "SalesOrderHeader"                                    
 [61] "SalesOrderHeaderSalesReason"                         
 [62] "SalesPerson"                                         
 [63] "SalesPersonQuotaHistory"                             
 [64] "SalesReason"                                         
 [65] "SalesTaxRate"                                        
 [66] "SalesTerritory"                                      
 [67] "SalesTerritoryHistory"                               
 [68] "ShoppingCartItem"                                    
 [69] "SpecialOffer"                                        
 [70] "SpecialOfferProduct"                                 
 [71] "Store"                                               
 [72] "trace_xe_action_map"                                 
 [73] "trace_xe_event_map"                                  
 [74] "vEmployee"                                           
 [75] "vEmployeeDepartment"                                 
 [76] "vEmployeeDepartmentHistory"                          
 [77] "vJobCandidate"                                       
 [78] "vJobCandidateEducation"                              
 [79] "vJobCandidateEmployment"                             
 [80] "CHECK_CONSTRAINTS"                                   
 [81] "COLUMN_DOMAIN_USAGE"                                 
 [82] "COLUMN_PRIVILEGES"                                   
 [83] "COLUMNS"                                             
 [84] "CONSTRAINT_COLUMN_USAGE"                             
 [85] "CONSTRAINT_TABLE_USAGE"                              
 [86] "DOMAIN_CONSTRAINTS"                                  
 [87] "DOMAINS"                                             
 [88] "KEY_COLUMN_USAGE"                                    
 [89] "PARAMETERS"                                          
 [90] "REFERENTIAL_CONSTRAINTS"                             
 [91] "ROUTINE_COLUMNS"                                     
 [92] "ROUTINES"                                            
 [93] "SCHEMATA"                                            
 [94] "SEQUENCES"                                           
 [95] "TABLE_CONSTRAINTS"                                   
 [96] "TABLE_PRIVILEGES"                                    
 [97] "TABLES"                                              
 [98] "VIEW_COLUMN_USAGE"                                   
 [99] "VIEW_TABLE_USAGE"                                    
[100] "VIEWS"                                               
[101] "vAdditionalContactInfo"                              
[102] "vStateProvinceCountryRegion"                         
[103] "vProductAndDescription"                              
[104] "vProductModelCatalogDescription"                     
[105] "vProductModelInstructions"                           
[106] "vVendorWithAddresses"                                
[107] "vVendorWithContacts"                                 
[108] "vIndividualCustomer"                                 
[109] "vPersonDemographics"                                 
[110] "vSalesPerson"                                        
[111] "vSalesPersonSalesByFiscalYears"                      
[112] "vStoreWithAddresses"                                 
[113] "vStoreWithContacts"                                  
[114] "vStoreWithDemographics"                              
[115] "all_columns"                                         
[116] "all_objects"                                         
[117] "all_parameters"                                      
[118] "all_sql_modules"                                     
[119] "all_views"                                           
[120] "allocation_units"                                    
[121] "assemblies"                                          
[122] "assembly_files"                                      
[123] "assembly_modules"                                    
[124] "assembly_references"                                 
[125] "assembly_types"                                      
[126] "asymmetric_keys"                                     
[127] "availability_databases_cluster"                      
[128] "availability_group_listener_ip_addresses"            
[129] "availability_group_listeners"                        
[130] "availability_groups"                                 
[131] "availability_groups_cluster"                         
[132] "availability_read_only_routing_lists"                
[133] "availability_replicas"                               
[134] "backup_devices"                                      
[135] "certificates"                                        
[136] "change_tracking_databases"                           
[137] "change_tracking_tables"                              
[138] "check_constraints"                                   
[139] "column_encryption_key_values"                        
[140] "column_encryption_keys"                              
[141] "column_master_keys"                                  
[142] "column_store_dictionaries"                           
[143] "column_store_row_groups"                             
[144] "column_store_segments"                               
[145] "column_type_usages"                                  
[146] "column_xml_schema_collection_usages"                 
[147] "columns"                                             
[148] "computed_columns"                                    
[149] "configurations"                                      
[150] "conversation_endpoints"                              
[151] "conversation_groups"                                 
[152] "conversation_priorities"                             
[153] "credentials"                                         
[154] "crypt_properties"                                    
[155] "cryptographic_providers"                             
[156] "data_spaces"                                         
[157] "database_audit_specification_details"                
[158] "database_audit_specifications"                       
[159] "database_credentials"                                
[160] "database_files"                                      
[161] "database_filestream_options"                         
[162] "database_mirroring"                                  
[163] "database_mirroring_endpoints"                        
[164] "database_mirroring_witnesses"                        
[165] "database_permissions"                                
[166] "database_principals"                                 
[167] "database_query_store_options"                        
[168] "database_recovery_status"                            
[169] "database_role_members"                               
[170] "database_scoped_configurations"                      
[171] "database_scoped_credentials"                         
[172] "databases"                                           
[173] "default_constraints"                                 
[174] "destination_data_spaces"                             
[175] "dm_audit_actions"                                    
[176] "dm_audit_class_type_map"                             
[177] "dm_broker_activated_tasks"                           
[178] "dm_broker_connections"                               
[179] "dm_broker_forwarded_messages"                        
[180] "dm_broker_queue_monitors"                            
[181] "dm_cdc_errors"                                       
[182] "dm_cdc_log_scan_sessions"                            
[183] "dm_clr_appdomains"                                   
[184] "dm_clr_loaded_assemblies"                            
[185] "dm_clr_properties"                                   
[186] "dm_clr_tasks"                                        
[187] "dm_column_store_object_pool"                         
[188] "dm_cryptographic_provider_properties"                
[189] "dm_database_encryption_keys"                         
[190] "dm_db_column_store_row_group_operational_stats"      
[191] "dm_db_column_store_row_group_physical_stats"         
[192] "dm_db_file_space_usage"                              
[193] "dm_db_fts_index_physical_stats"                      
[194] "dm_db_index_usage_stats"                             
[195] "dm_db_log_space_usage"                               
[196] "dm_db_mirroring_auto_page_repair"                    
[197] "dm_db_mirroring_connections"                         
[198] "dm_db_mirroring_past_actions"                        
[199] "dm_db_missing_index_details"                         
[200] "dm_db_missing_index_group_stats"                     
[201] "dm_db_missing_index_groups"                          
[202] "dm_db_partition_stats"                               
[203] "dm_db_persisted_sku_features"                        
[204] "dm_db_rda_migration_status"                          
[205] "dm_db_rda_schema_update_status"                      
[206] "dm_db_script_level"                                  
[207] "dm_db_session_space_usage"                           
[208] "dm_db_task_space_usage"                              
[209] "dm_db_uncontained_entities"                          
[210] "dm_db_xtp_checkpoint_files"                          
[211] "dm_db_xtp_checkpoint_stats"                          
[212] "dm_db_xtp_gc_cycle_stats"                            
[213] "dm_db_xtp_hash_index_stats"                          
[214] "dm_db_xtp_index_stats"                               
[215] "dm_db_xtp_memory_consumers"                          
[216] "dm_db_xtp_nonclustered_index_stats"                  
[217] "dm_db_xtp_object_stats"                              
[218] "dm_db_xtp_table_memory_stats"                        
[219] "dm_db_xtp_transactions"                              
[220] "dm_exec_background_job_queue"                        
[221] "dm_exec_background_job_queue_stats"                  
[222] "dm_exec_cached_plans"                                
[223] "dm_exec_compute_node_errors"                         
[224] "dm_exec_compute_node_status"                         
[225] "dm_exec_compute_nodes"                               
[226] "dm_exec_connections"                                 
[227] "dm_exec_distributed_request_steps"                   
[228] "dm_exec_distributed_requests"                        
[229] "dm_exec_distributed_sql_requests"                    
[230] "dm_exec_dms_services"                                
[231] "dm_exec_dms_workers"                                 
[232] "dm_exec_external_operations"                         
[233] "dm_exec_external_work"                               
[234] "dm_exec_function_stats"                              
[235] "dm_exec_procedure_stats"                             
[236] "dm_exec_query_memory_grants"                         
[237] "dm_exec_query_optimizer_info"                        
[238] "dm_exec_query_optimizer_memory_gateways"             
[239] "dm_exec_query_parallel_workers"                      
[240] "dm_exec_query_profiles"                              
[241] "dm_exec_query_resource_semaphores"                   
[242] "dm_exec_query_stats"                                 
[243] "dm_exec_query_transformation_stats"                  
[244] "dm_exec_requests"                                    
[245] "dm_exec_session_wait_stats"                          
[246] "dm_exec_sessions"                                    
[247] "dm_exec_trigger_stats"                               
[248] "dm_exec_valid_use_hints"                             
[249] "dm_external_script_execution_stats"                  
[250] "dm_external_script_requests"                         
[251] "dm_filestream_file_io_handles"                       
[252] "dm_filestream_file_io_requests"                      
[253] "dm_filestream_non_transacted_handles"                
[254] "dm_fts_active_catalogs"                              
[255] "dm_fts_fdhosts"                                      
[256] "dm_fts_index_population"                             
[257] "dm_fts_memory_buffers"                               
[258] "dm_fts_memory_pools"                                 
[259] "dm_fts_outstanding_batches"                          
[260] "dm_fts_population_ranges"                            
[261] "dm_fts_semantic_similarity_population"               
[262] "dm_hadr_auto_page_repair"                            
[263] "dm_hadr_automatic_seeding"                           
[264] "dm_hadr_availability_group_states"                   
[265] "dm_hadr_availability_replica_cluster_nodes"          
[266] "dm_hadr_availability_replica_cluster_states"         
[267] "dm_hadr_availability_replica_states"                 
[268] "dm_hadr_cluster"                                     
[269] "dm_hadr_cluster_members"                             
[270] "dm_hadr_cluster_networks"                            
[271] "dm_hadr_database_replica_cluster_states"             
[272] "dm_hadr_database_replica_states"                     
[273] "dm_hadr_instance_node_map"                           
[274] "dm_hadr_name_id_map"                                 
[275] "dm_hadr_physical_seeding_stats"                      
[276] "dm_io_backup_tapes"                                  
[277] "dm_io_cluster_shared_drives"                         
[278] "dm_io_cluster_valid_path_names"                      
[279] "dm_io_pending_io_requests"                           
[280] "dm_logpool_hashentries"                              
[281] "dm_logpool_stats"                                    
[282] "dm_os_buffer_descriptors"                            
[283] "dm_os_buffer_pool_extension_configuration"           
[284] "dm_os_child_instances"                               
[285] "dm_os_cluster_nodes"                                 
[286] "dm_os_cluster_properties"                            
[287] "dm_os_dispatcher_pools"                              
[288] "dm_os_dispatchers"                                   
[289] "dm_os_hosts"                                         
[290] "dm_os_latch_stats"                                   
[291] "dm_os_loaded_modules"                                
[292] "dm_os_memory_allocations"                            
[293] "dm_os_memory_broker_clerks"                          
[294] "dm_os_memory_brokers"                                
[295] "dm_os_memory_cache_clock_hands"                      
[296] "dm_os_memory_cache_counters"                         
[297] "dm_os_memory_cache_entries"                          
[298] "dm_os_memory_cache_hash_tables"                      
[299] "dm_os_memory_clerks"                                 
[300] "dm_os_memory_node_access_stats"                      
[301] "dm_os_memory_nodes"                                  
[302] "dm_os_memory_objects"                                
[303] "dm_os_memory_pools"                                  
[304] "dm_os_nodes"                                         
[305] "dm_os_performance_counters"                          
[306] "dm_os_process_memory"                                
[307] "dm_os_ring_buffers"                                  
[308] "dm_os_schedulers"                                    
[309] "dm_os_server_diagnostics_log_configurations"         
[310] "dm_os_spinlock_stats"                                
[311] "dm_os_stacks"                                        
[312] "dm_os_sublatches"                                    
[313] "dm_os_sys_info"                                      
[314] "dm_os_sys_memory"                                    
[315] "dm_os_tasks"                                         
[316] "dm_os_threads"                                       
[317] "dm_os_virtual_address_dump"                          
[318] "dm_os_wait_stats"                                    
[319] "dm_os_waiting_tasks"                                 
[320] "dm_os_windows_info"                                  
[321] "dm_os_worker_local_storage"                          
[322] "dm_os_workers"                                       
[323] "dm_qn_subscriptions"                                 
[324] "dm_repl_articles"                                    
[325] "dm_repl_schemas"                                     
[326] "dm_repl_tranhash"                                    
[327] "dm_repl_traninfo"                                    
[328] "dm_resource_governor_configuration"                  
[329] "dm_resource_governor_external_resource_pool_affinity"
[330] "dm_resource_governor_external_resource_pools"        
[331] "dm_resource_governor_resource_pool_affinity"         
[332] "dm_resource_governor_resource_pool_volumes"          
[333] "dm_resource_governor_resource_pools"                 
[334] "dm_resource_governor_workload_groups"                
[335] "dm_server_audit_status"                              
[336] "dm_server_memory_dumps"                              
[337] "dm_server_registry"                                  
[338] "dm_server_services"                                  
[339] "dm_tcp_listener_states"                              
[340] "dm_tran_active_snapshot_database_transactions"       
[341] "dm_tran_active_transactions"                         
[342] "dm_tran_commit_table"                                
[343] "dm_tran_current_snapshot"                            
[344] "dm_tran_current_transaction"                         
[345] "dm_tran_database_transactions"                       
[346] "dm_tran_global_recovery_transactions"                
[347] "dm_tran_global_transactions"                         
[348] "dm_tran_global_transactions_enlistments"             
[349] "dm_tran_global_transactions_log"                     
[350] "dm_tran_locks"                                       
[351] "dm_tran_session_transactions"                        
[352] "dm_tran_top_version_generators"                      
[353] "dm_tran_transactions_snapshot"                       
[354] "dm_tran_version_store"                               
[355] "dm_tran_version_store_space_usage"                   
[356] "dm_xe_map_values"                                    
[357] "dm_xe_object_columns"                                
[358] "dm_xe_objects"                                       
[359] "dm_xe_packages"                                      
[360] "dm_xe_session_event_actions"                         
[361] "dm_xe_session_events"                                
[362] "dm_xe_session_object_columns"                        
[363] "dm_xe_session_targets"                               
[364] "dm_xe_sessions"                                      
[365] "dm_xtp_gc_queue_stats"                               
[366] "dm_xtp_gc_stats"                                     
[367] "dm_xtp_system_memory_consumers"                      
[368] "dm_xtp_threads"                                      
[369] "dm_xtp_transaction_recent_rows"                      
[370] "dm_xtp_transaction_stats"                            
[371] "endpoint_webmethods"                                 
[372] "endpoints"                                           
[373] "event_notification_event_types"                      
[374] "event_notifications"                                 
[375] "events"                                              
[376] "extended_procedures"                                 
[377] "extended_properties"                                 
[378] "external_data_sources"                               
[379] "external_file_formats"                               
[380] "external_tables"                                     
[381] "filegroups"                                          
[382] "filetable_system_defined_objects"                    
[383] "filetables"                                          
[384] "foreign_key_columns"                                 
[385] "foreign_keys"                                        
[386] "fulltext_catalogs"                                   
[387] "fulltext_document_types"                             
[388] "fulltext_index_catalog_usages"                       
[389] "fulltext_index_columns"                              
[390] "fulltext_index_fragments"                            
[391] "fulltext_indexes"                                    
[392] "fulltext_languages"                                  
[393] "fulltext_semantic_language_statistics_database"      
[394] "fulltext_semantic_languages"                         
[395] "fulltext_stoplists"                                  
[396] "fulltext_stopwords"                                  
[397] "fulltext_system_stopwords"                           
[398] "function_order_columns"                              
[399] "hash_indexes"                                        
[400] "http_endpoints"                                      
[401] "identity_columns"                                    
[402] "index_columns"                                       
[403] "indexes"                                             
[404] "internal_partitions"                                 
[405] "internal_tables"                                     
[406] "key_constraints"                                     
[407] "key_encryptions"                                     
[408] "linked_logins"                                       
[409] "login_token"                                         
[410] "masked_columns"                                      
[411] "master_files"                                        
[412] "master_key_passwords"                                
[413] "memory_optimized_tables_internal_attributes"         
[414] "message_type_xml_schema_collection_usages"           
[415] "messages"                                            
[416] "module_assembly_usages"                              
[417] "numbered_procedure_parameters"                       
[418] "numbered_procedures"                                 
[419] "objects"                                             
[420] "openkeys"                                            
[421] "parameter_type_usages"                               
[422] "parameter_xml_schema_collection_usages"              
[423] "parameters"                                          
[424] "partition_functions"                                 
[425] "partition_parameters"                                
[426] "partition_range_values"                              
[427] "partition_schemes"                                   
[428] "partitions"                                          
[429] "periods"                                             
[430] "plan_guides"                                         
[431] "procedures"                                          
[432] "query_context_settings"                              
[433] "query_store_plan"                                    
[434] "query_store_query"                                   
[435] "query_store_query_text"                              
[436] "query_store_runtime_stats"                           
[437] "query_store_runtime_stats_interval"                  
[438] "registered_search_properties"                        
[439] "registered_search_property_lists"                    
[440] "remote_data_archive_databases"                       
[441] "remote_data_archive_tables"                          
[442] "remote_logins"                                       
[443] "remote_service_bindings"                             
[444] "resource_governor_configuration"                     
[445] "resource_governor_external_resource_pool_affinity"   
[446] "resource_governor_external_resource_pools"           
[447] "resource_governor_resource_pool_affinity"            
[448] "resource_governor_resource_pools"                    
[449] "resource_governor_workload_groups"                   
[450] "routes"                                              
[451] "schemas"                                             
[452] "securable_classes"                                   
[453] "security_policies"                                   
[454] "security_predicates"                                 
[455] "selective_xml_index_namespaces"                      
[456] "selective_xml_index_paths"                           
[457] "sequences"                                           
[458] "server_assembly_modules"                             
[459] "server_audit_specification_details"                  
[460] "server_audit_specifications"                         
[461] "server_audits"                                       
[462] "server_event_notifications"                          
[463] "server_event_session_actions"                        
[464] "server_event_session_events"                         
[465] "server_event_session_fields"                         
[466] "server_event_session_targets"                        
[467] "server_event_sessions"                               
[468] "server_events"                                       
[469] "server_file_audits"                                  
[470] "server_permissions"                                  
[471] "server_principal_credentials"                        
[472] "server_principals"                                   
[473] "server_role_members"                                 
[474] "server_sql_modules"                                  
[475] "server_trigger_events"                               
[476] "server_triggers"                                     
[477] "servers"                                             
[478] "service_broker_endpoints"                            
[479] "service_contract_message_usages"                     
[480] "service_contract_usages"                             
[481] "service_contracts"                                   
[482] "service_message_types"                               
[483] "service_queue_usages"                                
[484] "service_queues"                                      
[485] "services"                                            
[486] "soap_endpoints"                                      
[487] "spatial_index_tessellations"                         
[488] "spatial_indexes"                                     
[489] "spatial_reference_systems"                           
[490] "sql_dependencies"                                    
[491] "sql_expression_dependencies"                         
[492] "sql_logins"                                          
[493] "sql_modules"                                         
[494] "stats"                                               
[495] "stats_columns"                                       
[496] "symmetric_keys"                                      
[497] "synonyms"                                            
[498] "sysaltfiles"                                         
[499] "syscacheobjects"                                     
[500] "syscharsets"                                         
[501] "syscolumns"                                          
[502] "syscomments"                                         
[503] "sysconfigures"                                       
[504] "sysconstraints"                                      
[505] "syscurconfigs"                                       
[506] "syscursorcolumns"                                    
[507] "syscursorrefs"                                       
[508] "syscursors"                                          
[509] "syscursortables"                                     
[510] "sysdatabases"                                        
[511] "sysdepends"                                          
[512] "sysdevices"                                          
[513] "sysfilegroups"                                       
[514] "sysfiles"                                            
[515] "sysforeignkeys"                                      
[516] "sysfulltextcatalogs"                                 
[517] "sysindexes"                                          
[518] "sysindexkeys"                                        
[519] "syslanguages"                                        
[520] "syslockinfo"                                         
[521] "syslogins"                                           
[522] "sysmembers"                                          
[523] "sysmessages"                                         
[524] "sysobjects"                                          
[525] "sysoledbusers"                                       
[526] "sysopentapes"                                        
[527] "sysperfinfo"                                         
[528] "syspermissions"                                      
[529] "sysprocesses"                                        
[530] "sysprotects"                                         
[531] "sysreferences"                                       
[532] "sysremotelogins"                                     
[533] "sysservers"                                          
[534] "system_columns"                                      
[535] "system_components_surface_area_configuration"        
[536] "system_internals_allocation_units"                   
[537] "system_internals_partition_columns"                  
[538] "system_internals_partitions"                         
[539] "system_objects"                                      
[540] "system_parameters"                                   
[541] "system_sql_modules"                                  
[542] "system_views"                                        
[543] "systypes"                                            
[544] "sysusers"                                            
[545] "table_types"                                         
[546] "tables"                                              
[547] "tcp_endpoints"                                       
[548] "time_zone_info"                                      
[549] "trace_categories"                                    
[550] "trace_columns"                                       
[551] "trace_event_bindings"                                
[552] "trace_events"                                        
[553] "trace_subclass_values"                               
[554] "traces"                                              
[555] "transmission_queue"                                  
[556] "trigger_event_types"                                 
[557] "trigger_events"                                      
[558] "triggers"                                            
[559] "type_assembly_usages"                                
[560] "types"                                               
[561] "user_token"                                          
[562] "via_endpoints"                                       
[563] "views"                                               
[564] "xml_indexes"                                         
[565] "xml_schema_attributes"                               
[566] "xml_schema_collections"                              
[567] "xml_schema_component_placements"                     
[568] "xml_schema_components"                               
[569] "xml_schema_elements"                                 
[570] "xml_schema_facets"                                   
[571] "xml_schema_model_groups"                             
[572] "xml_schema_namespaces"                               
[573] "xml_schema_types"                                    
[574] "xml_schema_wildcard_namespaces"                      
[575] "xml_schema_wildcards"                                
[576] "#BB3E6793"                                           

A noter que vous pouvez utiliser autre chose que RSQLite (pour du MySQL, PostGre, etc…)

MyAdventure2016_db <- CON_AW2016 %>% 
  tbl(in_schema("Sales", "CreditCard")) %>% 
  # Puis on pipe une action, ici la fonction filter, 
  # comme on le ferait sur n'importe quel jeu de données. 
  filter(CreditCardID < 300) 

Ce qui est génial, c’est que la commande ci-dessus ne stocke pas les données sur R, car les données restent stockées sur le server ! En fait, cette commande ne touche même pas à la base de données du server, tant qu’on ne demande pas d’afficher les résultats, comme ceci :

MyAdventure2016_db
# Source:   SQL [?? x 6]
# Database: Microsoft SQL Server 13.00.6300[dbo@SQL-DATA\TEST/AdventureWorks2016]
   CreditCardID CardType      CardNumber    ExpMonth ExpYear ModifiedDate       
          <int> <chr>         <chr>            <int>   <int> <dttm>             
 1            1 SuperiorCard  333326646953…       11    2006 2013-07-29 00:00:00
 2            2 Distinguish   555521272497…        8    2005 2013-12-05 00:00:00
 3            3 ColonialVoice 777783448383…        7    2005 2014-01-14 00:00:00
 4            4 ColonialVoice 777749157182…        7    2006 2013-05-20 00:00:00
 5            5 Vista         111144046000…        4    2005 2013-02-01 00:00:00
 6            6 Distinguish   555571320361…        9    2006 2014-04-10 00:00:00
 7            7 Distinguish   555536354010…        6    2007 2013-02-01 00:00:00
 8            8 SuperiorCard  333360811931…        7    2007 2013-06-30 00:00:00
 9            9 Distinguish   555534656259…        2    2005 2013-09-23 00:00:00
10           10 SuperiorCard  333321263864…        8    2008 2011-08-31 00:00:00
# ℹ more rows

Et cela ne nous empêche pas de faire ce qu’on veut avec, comme par exemple faire un plot :

ggplot(as.data.frame(MyAdventure2016_db)) +
  aes(x = CardType) +
  geom_bar(fill = "#112446") +
  theme_minimal() +
  facet_wrap(vars(ExpYear))

Si vous souhaitez voir la traduction en code SQL de votre commande, vous pouvez utiliser la fonction show_query() du package dbplyr :

show_query(MyAdventure2016_db)
<SQL>
SELECT "CreditCard".*
FROM "Sales"."CreditCard"
WHERE ("CreditCardID" < 300.0)

Maintenant qu’on a bien peaufiné notre “requête” (écrite par nous même en R avec la syntaxe dplyr, mais traduite en SQL par dbplyr), on peut collecter les données. Notez bien que, tant qu’on n’a pas explicitement dit à dbplyr de “collecter” les données, tout reste sur le server ! Pour traiter les données sur R ou pour tout autre raison, vous pouvez collecter les données comme ceci :

MyAdventure2016 <- MyAdventure2016_db %>% 
  collect()

Et voila, nous avons une table sur laquelle opérer !



Modifier la base de données directement, c’est possible ?

Bien sur, rappelez-vous que vous portez l’entière responsabilité des commandes SQL que vous lancez sur les bases de données. Si vous avez un doute sur votre syntaxe, faites la vérifier !

# Supposons que vous voulez mettre à jour la colonne 'CardType' où 'CreditCardID' est égal à 1
update_query <- "UPDATE Sales.CreditCard SET CardType = 'NouveauType' WHERE CreditCardID = 1"

# Exécuter la requête pour mettre à jour la table dans la base de données
dbExecute(CON_AW2016, update_query)

Ici, cela ne fonctionne pas : Nous n’avons pas les droits ! Mais vous voyez l’idée, remplacez seulement votre requête SQL entre guillements.

(De plus, dbplyr ne fait pas tout ! En fait, il se concentre surtout sur les SELECT et ses dérivés.Nous devrons utiliser la première méthode (I), décrite plus haut.)

VI) Fermez la connection !

Avoir trop de connections à une base de données, surtout si elles sont inutilisées, c’est mauvais (Pour la sécurité, la performance, etc).

On va donc fermer notre pool :

# Fermer la pool de connexions
pool::poolClose(con)

N’oubliez pas de le faire !

VII) Liens utiles

Les bases de dbplyr : Les bases de DPLYR

FIN

J’espère que cela vous aura été utile.

N’hésitez pas à me contacter en cas de problème, ni à améliorer votre pratique à l’aide des forums et des IA !

Bon code !