在具有impala连接的Dataframe中时区更改为gmt

xxhby3vn  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(353)

我连接到数据库通过 Impala 使用r。我有一个日期列在我的数据集和我的工作在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

但我的要求是通过impala连接到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() 在我的例子中可能不起作用,因为这是一个巨大的数据集,提取本身需要时间。

bjp0bcyl

bjp0bcyl1#

试试润滑油 Package 。我所知道的在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"

相关问题