【发布时间】:2021-12-28 14:46:56
【问题描述】:
我安装了最新的 Java,使用 Windows 命令提示符进行检查
java --version
C:\Users\sweepydodo>java --version
java 17.0.1 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)
我已经运行了以下
library(RJDBC)
drv <- JDBC(driverClass = "net.snowflake.client.jdbc.SnowflakeDriver"
, classPath = "C:/Users/sweepydodo/Documents/R/snowflake-jdbc-3.13.9.jar"
, identifier.quote = "`"
)
con <- dbConnect(drv, "jdbc:snowflake://gs46004.eu-west-1.snowflakecomputing.com:443?warehouse=prd_wh&ROLE=prod_readonly&authenticator=externalbrowser&database=dwh_db", "sweepydodo@abc.com", "dummy password")
R 控制台然后读取
Nov 17, 2021 3:37:01 PM net.snowflake.client.core.CredentialManager fillCachedCredential
INFO: JNA jar files are needed for Secure Local Storage service. Please follow the Snowflake JDBC instruction for Secure Local Storage feature. Fall back to normal process.
Initiating login request with your identity provider. A browser window should have opened for you to complete the login. If you can't see it, check existing browser windows, or your OS settings. Press CTRL+C to abort and try again...
然后它会打开一个带有白色背景和一行内容的浏览器窗口:
您的身份已确认并传播到 Snowflake JDBC 驱动程序。 您现在可以关闭此窗口并返回您开始的位置。
然后我回到 R 并跑了
dbListTables(con) # list all tables
一切正常,我看到了一个表格列表。当我运行实际查询时,我的问题就出现了:
dbGetQuery(con,
"
select *
from FACT_VISIT
limit 10
"
)
错误读取
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set", :
Unable to retrieve JDBC result set
JDBC ERROR: SQL compilation error:
Object 'FACT_VISIT' does not exist or not authorized.
Statement:
select *
from FACT_VISIT
limit 10
我觉得很奇怪,我可以使用dbListTables(con) 查看表列表,但无法查询任何表。我期待任何想法/解决方案。
【问题讨论】:
-
该错误清楚地表明您无权访问该表。您是否能够使用与脚本中相同的用户/角色/数据库/模式从 Snowflake UI 运行相同的 SELECT?我没有在您的连接字符串中看到模式集,因此我认为它是公共的,默认的,这可能会导致问题。
-
谢谢@Sergiu 事实证明,不仅缺少表的前缀(数据库名称和方案)。最大的问题是
Java和Snowflake的jar 文件的版本不正确。我将发布详细的答案。不过,谢谢。
标签: java r database snowflake-cloud-data-platform rjdbc