【发布时间】:2021-11-10 05:32:45
【问题描述】:
我们在 SNOWFLAKE 中有一个数据库。当我执行这个查询时
SELECT REQUEST_ID, DUE_DATE FROM table WHERE REQUEST_ID = 'abc'
我得到了这个结果。
我在 R 中执行相同的查询
query <- "SELECT REQUEST_ID, DUE_DATE FROM table WHERE REQUEST_ID = 'abc'"
data1 <- DBI::dbGetQuery(con, query)
我得到了这个结果。
您可能已经注意到日期偏移了 1 天。雪花中的数据类型是 DATE 类型,而在 R 中是字符类型。我不确定是什么导致了这个问题。我最初认为这可能是因为时区,所以我尝试通过运行以下几行来更改 SNOWFLAKE 中的时区
ALTER USER SET TIMEZONE = 'UTC'
ALTER SESSION SET TIMEZONE = 'UTC'
但它并没有改变任何东西。后来我读到 DATES 中没有时间组件,因此不受时区的影响。我不知道去哪里寻找以及改变什么来解决这个问题。如果您能给我任何指示,我将不胜感激。
这就是我创建连接 (con) 对象的方式 -
con <- DBI::dbConnect(RJDBC::JDBC("net.snowflake.client.jdbc.SnowflakeDriver", driver), url)
【问题讨论】:
-
连接是如何完成的?使用最新 RStudio 安装随附的 ODBC 驱动程序或 OOTB Snowflake 驱动程序?能否贴出连接界面截图以查看详情?
-
@SrinathMenon 这是一个用于连接的内部包,但我认为这是其中的主线。
con <- DBI::dbConnect(RJDBC::JDBC("net.snowflake.client.jdbc.SnowflakeDriver", driver), url)其中driver是路径,url 是数据库服务器 url。 -
那里使用什么版本的 JDBC?在 DATE 对象的过去版本中存在一些问题。能否也检查一下JDBC_USE_SESSION_TIMEZONE是否已更改?
-
对不起@Sergiu,我不知道如何检查这两个。你能帮我检查一下命令/步骤吗?感谢您的帮助。
-
对于参数,您可以在 Snowflake UI 上执行此操作:show parameters like 'JDBC_USE_SESSION_TIMEZONE';,对于 JDBC 版本,我假设您有 jar 文件存储在某处(我不熟悉 R)。 jar 文件名也包含版本(类似于 snowflake-jdbc-3.13.9.jar)
标签: sql r snowflake-cloud-data-platform