You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R的Arrow工作流中能否通过DuckDB执行直接SQL查询?

在R的Arrow工作流中用DuckDB执行原生SQL查询

完全可以实现,你的思路没问题——当部分dplyr动词无法在Arrow/DuckDB后端正确转换时,直接用原生SQL确实是可靠的解决方案。不过你示例里的SQL_QUERY函数并不存在,下面是两种正确的实现方式:

方法1:在dplyr工作流中嵌入原生SQL

利用dplyr::sql()函数包裹原生SQL语句,配合tbl()可以无缝衔接Arrow到DuckDB的工作流:

library(duckdb)
library(arrow)
library(dplyr)

# 按分区打开Arrow数据集
ds <- arrow::open_dataset("nyc-taxi", partitioning = c("year", "month"))

# 转换到DuckDB并执行原生SQL查询
ds %>%
  to_duckdb() %>%
  tbl(sql("SELECT * LIMIT 100")) %>%
  collect()

方法2:直接操作DuckDB连接执行SQL

如果需要更灵活的SQL执行,可以提取DuckDB连接后用dbGetQuery()直接执行:

library(duckdb)
library(arrow)
library(dplyr)

ds <- arrow::open_dataset("nyc-taxi", partitioning = c("year", "month"))

# 将Arrow数据集导入DuckDB临时表,指定表名方便后续SQL调用
duck_tbl <- ds %>% to_duckdb(name = "nyc_taxi")
# 提取DuckDB连接对象
conn <- duck_tbl$src$con

# 直接执行原生SQL
result <- dbGetQuery(conn, "SELECT * FROM nyc_taxi LIMIT 100")

关键说明

  • to_duckdb()会把Arrow数据集转换为DuckDB中的临时表,默认会生成随机表名,建议通过name参数指定固定名称,方便SQL引用。
  • 两种方式都能保留Arrow的高效数据读取能力,同时借助DuckDB的SQL引擎执行复杂逻辑,完美解决dplyr转换失效的问题。

内容的提问来源于stack exchange,提问作者Matthew Son

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:37:26