跳到内容

这是一个适用于 dbplyr 的 SQL 后端,旨在充分利用 DuckDB 的能力。它主要遵循 PostgreSQL 的后端设计,但包含更多映射函数。

tbl_file()dplyr::tbl() 的一个实验性变体,用于直接访问磁盘文件。它比 dplyr::tbl() 更安全,因为它没有误解请求的风险,并且支持带有特殊字符的路径。

tbl_function()dplyr::tbl() 的一个实验性变体,用于从表生成函数创建延迟表,适用于读取非标准 CSV 文件或其他数据源。它比 dplyr::tbl() 更安全,因为它没有误解查询的风险。有关数据导入函数的详细信息,请参阅 https://duckdb.net.cn/docs/data/overview

作为替代方案,可以使用 dplyr::tbl(src, dplyr::sql("SELECT ... FROM ...")) 进行自定义 SQL 查询。

tbl_query() 已弃用,请改用 tbl_function()

结合使用 simulate_duckdb()lazy_frame(),可以在不打开 DuckDB 连接的情况下查看模拟的 SQL。

用法

tbl_file(src, path, ..., cache = FALSE)

tbl_function(src, query, ..., cache = FALSE)

tbl_query(src, query, ...)

simulate_duckdb(...)

参数

src

一个 DuckDB 连接对象

path

现有 Parquet、CSV 或 JSON 文件的路径

...

任何要转发的参数

cache

为 Parquet 文件启用对象缓存

query

SQL 代码,省略 FROM 子句

示例

if (FALSE) { # duckdb:::TEST_RE2 && rlang::is_installed("dbplyr")
library(dplyr, warn.conflicts = FALSE)
con <- DBI::dbConnect(duckdb(), path = ":memory:")

db <- copy_to(con, data.frame(a = 1:3, b = letters[2:4]))

db %>%
  filter(a > 1) %>%
  select(b)

path <- tempfile(fileext = ".csv")
write.csv(data.frame(a = 1:3, b = letters[2:4]))

db_csv <- tbl_file(con, path)
db_csv %>%
  summarize(sum_a = sum(a))

db_csv_fun <- tbl_function(con, paste0("read_csv_auto('", path, "')"))
db_csv %>%
  count()

DBI::dbDisconnect(con, shutdown = TRUE)
}