使用 Impala 连接的数据帧中的时区更改为 GMT

Timezone changes to GMT in dataframe with Impala connection

提问人:mockash 提问时间:3/14/2019 更新时间:3/14/2019 访问量:272

问:

我正在使用 R 通过 Impala 连接到数据库,我的数据集中有一个日期列,我正在使用 GMT+3 时区。当我连接到数据库时,这就是我显示数据的方式。

drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver","/root/.../sqljdbc4-2.0.jar")
conn <- dbConnect(drv, "jdbc:sqlserver://port",<user>, <password>)

dbGetQuery(conn, "select eventdate from sample")

以下是结果。

eventdate      
1     2017-01-31
2     2017-01-31
3     2017-01-31
4     2017-01-31 
5     2017-01-31 
6     2017-01-31

但是我的要求是通过黑斑羚连接到sqlserver,具体如下。

drv <- JDBC("com.cloudera.impala.jdbc41.Driver","/root/.../ImpalaJDBC41.jar")       

impala <- src_impala(drv, "jdbc:impala://host","username", "password")

dbGetQuery(impala, "select eventdate from sample")

我得到的结果为

eventdate 
1 2017-01-30 21:00:00.000000000
2 2017-01-30 21:00:00.000000000
3 2017-01-30 21:00:00.000000000
4 2017-01-30 21:00:00.000000000
5 2017-01-30 21:00:00.000000000

因此,默认情况下,它采用时区 GMT 并从实际数据中删除 3 小时。如何防止这种情况发生。

是否可以在连接时更改时区?在我的情况下,提取数据并更改时间可能不起作用,因为这是一个巨大的数据集,并且提取本身需要时间。tz()

R SQL-Server 时区 Impala

评论

0赞 MKa 3/14/2019
你必须使用吗?也许尝试使用 ,即jdbcodbcas.is = TRUEsqlQuery(con, q, as.is = TRUE)
1赞 mockash 3/14/2019
你是说黑斑羚的ODBC连接吗?我没有试过,让我试试。但不是比 ?如果我错了,请纠正我。odbcjdbc
0赞 MKa 3/14/2019
是的,黑斑羚的连接。我通过黑斑羚连接,但并没有真正注意到这种缓慢。odbcodbc

答:

0赞 Rohit 3/14/2019 #1

试试润滑剂包。我知道在 R 中使用时区的最简单方法:

library(lubridate)
with_tz(Sys.time(),"Etc/GMT+3" )
# [1] "2019-03-14 03:39:07 -03"
with_tz(Sys.time(),'UTC')
# [1] "2019-03-14 06:39:27 UTC"

您可以使用命令查看操作系统的有效时区名称。或者,您可以使用该函数强制设置时区OlsonNames()force_tz()

t
[1] "2019-03-14 06:46:06 UTC"
force_tz(t,'Etc/GMT+3')
[1] "2019-03-14 06:46:06 -03"

评论

0赞 mockash 3/14/2019
谢谢你的回答。我的是 GMT+3 本身,但在连接到 impala 并执行查询时,它显示 GMT。您是否建议在黑斑羚连接后更改时区?Sys.time()
0赞 Rohit 3/14/2019
是的。一旦将数据放入 R,其中一个 or 应该给你正确的答案。如果时间戳应该显示 6 PM GMT+3,但显示 3 PM GMT,请使用 .如果显示格林威治标准时间下午 6 点,则使用with_tz()force_tz()with_tz()force_tz()