r - 如何使用 pool 包逃脱 Athena database.table?
问题描述
我正在尝试通过 JDBC 连接到 Amazon Athena 并且pool
:
到目前为止的工作:
library(RJDBC)
library(DBI)
library(pool)
library(dplyr)
library(dbplyr)
drv <- RJDBC::JDBC('com.amazonaws.athena.jdbc.AthenaDriver', '/opt/jdbc/AthenaJDBC41-1.1.0.jar')
pool_instance <- dbPool(
drv = drv,
url = "jdbc:awsathena://athena.us-west-2.amazonaws.com:443/",
user = "me",
s3_staging_dir = "s3://somedir",
password = "pwd"
)
mydata <- DBI::dbGetQuery(pool_instance, "SELECT *
FROM myDB.myTable
LIMIT 10")
mydata
---> 工作正常。正在返回正确的数据。
这不起作用:
pool_instance %>% tbl("myDB.myTable") %>% head(10)
# Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
# Unable to retrieve JDBC result set for SELECT *
# FROM "myDB.myTable" AS "zzz2"
# WHERE (0 = 1) ( Table myDB.myTable not found. Please check your query.)
这里的问题是 Athena 需要以下语法作为 SQL:
任何一个:
SELECT *
FROM "myDB"."myTable"
或者:
SELECT *
FROM myDB.myTable
所以基本上,通过传递字符串"myDB.myTable"
:
pool_instance %>% tbl("myDB.myTable") %>% head(10)
正在使用以下语法:
SELECT *
FROM "myDB.myTable"
由于此类表不存在,因此导致以下错误:
# Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
# Unable to retrieve JDBC result set for SELECT *
# FROM "myDB.myTable" AS "zzz6"
# WHERE (0 = 1) ( Table myDB.myTable not found. Please check your query.)
我试过的:
因此,我试图通过或"myDB"."myTable"
不成功:myDB.myTable
tbl()
我试过使用capture.output(cat('\"myDB\".\"myTable\"'))
:
pool_instance %>% tbl(capture.output(cat('\"myDB\".\"myTable\"'))) %>% head(10)
# Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
# Unable to retrieve JDBC result set for SELECT *
# FROM """myDB"".""myTable""" AS "zzz4"
# WHERE (0 = 1) ( Table ""myDB"".""myTable"" not found. Please check your query.)
pool_instance %>% tbl(noquote("myDB"."myTable") %>% head(10)
# Error in UseMethod("as.sql") :
# no applicable method for 'as.sql' applied to an object of class "noquote"
解决方案
您可以使用dbplyr::in_schema
:
pool_instance %>% tbl(in_schema("myDB", "myTable")) %>% head(10)
推荐阅读
- python - 使用 Sympy 将变量名中的前缀快速分配到 Matrix 中 - Matlab 示例
- c# - c# firestore - 附加信息:路径不能包含空元素
- c++ - Matlab 和 C++ 之间的 .Net 通信
- java - 使用java在selenium中初始化驱动程序时如何防止null返回
- javascript - 在 highcharts js 中创建图表的问题
- nunit - 如何从 specflow dll 中获取所有场景的列表?
- databricks - 有没有办法在 Databrick 笔记本中的某个单元格之后运行/执行单元格?
- java - 如何检查数组列表或集合中的包含
- javascript - 为什么它总是返回 true?
- javascript - 当我使用 python 运行烧瓶应用程序以在 web ui 上绘制图形时出现错误