如何使用show_query?返回“无适用方法”

问题描述

将RStudio连接到Amazon Athena之后,我试图在幕后使用show_query提取sql语句。在我尝试使用此功能之前,代码运行平稳。

library(tidyverse)
library(dplyr)
library(dbplyr)
library(odbc)
library(DBI)
library(rJava)

con <- dbConnect(noctua::athena(),aws_access_key_id = "***",aws_secret_access_key = "***",s3_staging_dir = "s3://bucket-folder/",region_name = 'region_name')

querytest <- dbGetQuery(con,"SELECT * FROM schema.table") 
test1 <- querytest %>% 
  filter(category != "NA") %>% 
  show_query()

Error in UseMethod("show_query") : 
  no applicable method for 'show_query' applied to an object of class "c('data.table','data.frame')" 

querytest <- dbGetQuery(con,"SELECT * FROM schema.table")
test2 <- querytest %>% 
  filter(category != "NA") %>% 
  remote_query()

Error in UseMethod("db_sql_render") : 
  no applicable method for 'db_sql_render' applied to an object of class "NULL"

show_query或remote_query均未成功运行。

据我了解,将show_query应用于数据库连接或数据库表时应成功运行。

我该如何解决这个问题?

解决方法

如果您使用的是dbplyr,而不是dbGetQuery,则应该使用tbl()。例如

querytest <- tbl(con,"schema.table")
test1 <- querytest %>% 
  filter(category != "NA") %>% 
  show_query()

具有连接的tbl函数应返回{t1_sql}类,它是show_query()正在寻找的对象。您可以检查class(querytest)