我想知道是否可以在 R 中的
duckdb
工作流程期间在 arrow
上发送 SQL 查询。 (https://duckdb.org/2021/12/03/duck-arrow.html)
我知道它的目的是使用
dplyr
动词,但有一些动词翻译不顺畅,这些代码适用于 dplyr
后端,但不适用于 duckdb
或 arrow
。
我想在通话期间使用直接
SQL
查询,如下例所示:
library(duckdb)
library(arrow)
library(dplyr)
# Open dataset using year,month folder partition
ds <- arrow::open_dataset("nyc-taxi", partitioning = c("year", "month"))
ds %>%
# Pass off to DuckDB
to_duckdb() |>
SQL_QUERY("SELECT * LIMIT 100") |> # <- something like this
collect()
既然你这样做了
dplyr
风格并且跳过了SQL
风格,那不是这样吗?
ds %>%
to_duckdb() %>%
head(100) %>%
collect()
根据您想要完成的任务,您可以使用带有
dplyr
动词的 SQL 查询片段:
ds |>
to_duckdb() |>
filter(sql("vendor_name = 'VTS' AND year = 2009 AND month = 1")) |>
collect()
您可以在其中一个 dbplyr 插图中找到有关此方法的更多信息。
此方法不能扩展到更复杂的查询。但是,您可以使用
to_duckdb()
返回的信息通过 DBI 包发送完整的 SQL 查询:
db_tbl <- ds |>
to_duckdb(table_name = "nyc_tbl")
con <- db_tbl$src$con
dbGetQuery(con, "SELECT * FROM 'nyc_tbl' LIMIT 100")