dplyr sql 连接

Phi*_*ack 2 sql r dplyr

考虑以下 SQL:

    SELECT D.product_name
      FROM business.payment P
 LEFT JOIN dim.product_name D 
        ON D.product_id = P.product_id
Run Code Online (Sandbox Code Playgroud)

该查询返回支付表中的 product_names 列表,并基于连接执行此操作。

如何在不拉入内存的情况下在 dplyr 中复制这样的东西?我正在使用数据库连接。

我尝试了以下方法,但无济于事:

product_name <- 
  business %>% 
  tbl('dim_product') 

business %>% 
  tbl('payment') %>% 
  left_join(product_name, by = 'product_id') %>% 
  select(product_name) %>% 
  collect()
Run Code Online (Sandbox Code Playgroud)

我搜索了很多,似乎没有人解决这个问题。

谢谢!

小智 5

这是事后一段时间,但也许您仍在寻找或好奇dplyr基于动词的选项。我正在为我的工作解决同样的问题,并遇到了您的(某种)未回答的问题。当我使用DBIodbc包对 MSSQL 数据库运行它时,下面对我有用。

我在加入之前从表中选择了感兴趣的列,因为这通常是查询数据库时的最佳实践。dplyr默认情况下,join 函数将进行自然连接,因此您可能不必by明确提供参数。

db_con <- DBI::dbConnect(
  drv = odbc::odbc(),
  dsn = <data source name>
)

db_con %>%
  tbl("table1") %>%
  select(col1, col2, col3) %>%
  left_join(
    db_con %>% tbl("table2") %>% select(col3,  col4, col5)
  )
Run Code Online (Sandbox Code Playgroud)