我安装了最新的Java,使用Windows命令提示符进行检查
java --version
C:Userssweepydodo>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)
查看表列表,但无法查询任何表。我期待任何想法/解决方案。
经过一天的搜索和同事的帮助,我们发现罪魁祸首是Java最新版本jdk-17_windows-x64_bin
和Snowflake最新版本之一3.13.9
的组合。
工作原理和原文章中描述的一样,但从这里使用Java11.0.12
,从这里使用snowflake-jdbc-3.10.3.jar
。
Java和Snowflake的.jar
的最新版本将为您带来这里概述的问题。
最后,正如@Sergiu所指出的。在SQL查询中,我还应该明确指定数据库和方案名称。
dbGetQuery(con,
"
select *
from dwh_db.visitor.fact_visit
limit 10
"
)