Часовой пояс меняется на GMT в датафрейме с подключением Impala - PullRequest
3 голосов
/ 14 марта 2019

Я подключаюсь к базе данных через Impala, используя RI, в моем наборе данных есть столбец даты, и я работаю в часовом поясе 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() может не сработать в моем случае, поскольку это огромный набор данных, а само извлечение занимает время.

1 Ответ

0 голосов
/ 14 марта 2019

Попробуйте пакет смазки.Самый простой из известных мне способов работы с часовыми поясами в 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"
...