Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: demo for relational API #6526

Closed
wants to merge 56 commits into from
Closed

WIP: demo for relational API #6526

wants to merge 56 commits into from

Conversation

krlmlr
Copy link
Member

@krlmlr krlmlr commented Nov 3, 2022

Needs https://github.com/duckdb/duckdb and https://github.com/duckdblabs/relational.

CC @hannes.

library(tidyverse)

options(duckdb.materialize_message = TRUE)

df <- palmerpenguins::penguins

# No materialization should happen here!
out <-
  df %>%
  slice_head(n = 10)

# Materializing should happen only here!
out
#> [1] TRUE
#> materializing:
#> ---------------------
#> --- Relation Tree ---
#> ---------------------
#> Limit 10
#>   r_dataframe_scan(0x108df73c8)
#> 
#> ---------------------
#> -- Result Columns  --
#> ---------------------
#> - species (species)
#> - island (island)
#> - bill_length_mm (DOUBLE)
#> - bill_depth_mm (DOUBLE)
#> - flipper_length_mm (INTEGER)
#> - body_mass_g (INTEGER)
#> - sex (sex)
#> - year (INTEGER)
#> 
#> # A tibble: 10 × 8
#>    species island    bill_length_mm bill_depth_mm flipper_…¹ body_…² sex    year
#>    <fct>   <fct>              <dbl>         <dbl>      <int>   <int> <fct> <int>
#>  1 Adelie  Torgersen           39.1          18.7        181    3750 male   2007
#>  2 Adelie  Torgersen           39.5          17.4        186    3800 fema…  2007
#>  3 Adelie  Torgersen           40.3          18          195    3250 fema…  2007
#>  4 Adelie  Torgersen           NA            NA           NA      NA <NA>   2007
#>  5 Adelie  Torgersen           36.7          19.3        193    3450 fema…  2007
#>  6 Adelie  Torgersen           39.3          20.6        190    3650 male   2007
#>  7 Adelie  Torgersen           38.9          17.8        181    3625 fema…  2007
#>  8 Adelie  Torgersen           39.2          19.6        195    4675 male   2007
#>  9 Adelie  Torgersen           34.1          18.1        193    3475 <NA>   2007
#> 10 Adelie  Torgersen           42            20.2        190    4250 <NA>   2007
#> # … with abbreviated variable names ¹​flipper_length_mm, ²​body_mass_g

Created on 2022-11-12 with reprex v2.0.2

@krlmlr
Copy link
Member Author

krlmlr commented Nov 24, 2022

Now, with most recent code and main branch from duckdb:

# pkgload::load_all()
# pkgload::load_all("../relational")
# pkgload::load_all("../duckdb/tools/rpkg")
library(tidyverse)

df <- palmerpenguins::penguins

# No materialization should happen here!
out <-
  df %>%
  transmute(bill_area = bill_length_mm * bill_depth_mm, bill_length_mm, species, sex) %>%
  filter(bill_length_mm < 40) %>%
  select(-bill_length_mm) %>%
  slice_head(n = 5)

out %>%
  explain()
#> ┌───────────────────────────┐
#> │      STREAMING_LIMIT      │
#> └─────────────┬─────────────┘                             
#> ┌─────────────┴─────────────┐
#> │         PROJECTION        │
#> │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
#> │         bill_area         │
#> │          species          │
#> │            sex            │
#> └─────────────┬─────────────┘                             
#> ┌─────────────┴─────────────┐
#> │           FILTER          │
#> │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
#> │  (bill_length_mm < 40.0)  │
#> └─────────────┬─────────────┘                             
#> ┌─────────────┴─────────────┐
#> │      R_DATAFRAME_SCAN     │
#> │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
#> │         data.frame        │
#> │   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
#> │           EC=344          │
#> └───────────────────────────┘

# Materializing should happen only here!
out
#> materializing:
#> ---------------------
#> --- Relation Tree ---
#> ---------------------
#> Limit 5
#>   Projection [bill_area as bill_area, species as species, sex as sex]
#>     Filter [<(bill_length_mm, 40.0)]
#>       Projection [*(bill_length_mm, bill_depth_mm) as bill_area, bill_length_mm as bill_length_mm, species as species, sex as sex]
#>         r_dataframe_scan(0x124e754b8)
#> 
#> ---------------------
#> -- Result Columns  --
#> ---------------------
#> - bill_area (DOUBLE)
#> - species (species)
#> - sex (sex)
#> 
#> # A tibble: 5 × 3
#>   bill_area species sex   
#>       <dbl> <fct>   <fct> 
#> 1      731. Adelie  male  
#> 2      687. Adelie  female
#> 3      708. Adelie  female
#> 4      810. Adelie  male  
#> 5      692. Adelie  female

Created on 2022-11-24 with reprex v2.0.2

@krlmlr krlmlr closed this Nov 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant