Загрузка в Bigquery с правильно указанным часовым поясом во временной метке (отключите автоматическое UTC) - PullRequest
0 голосов
/ 04 апреля 2019

Как вы добавляете часовой пояс в метку времени кадра, которую вы загружаете в Bigquery (BQ)?

При загрузке кадра данных, который включает временные метки, в Google BQ, вам нужно указать смещение UTC или имя часового пояса, чтобы убедиться, что вы сохраняете правильный часовой пояс. Если вы этого не сделаете, BQ автоматически преобразует вашу метку времени в UTC.

Формат метки времени, который может прочитать BQ, имеет следующий канонический формат: YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.DDDDDD]][time zone]

Мой вопрос касается правильной настройки партии [time zone]. Согласно документации BQ:

Временная метка в формате строки может включать часовой пояс. Если часовой пояс явно не указан, используется часовой пояс по умолчанию, UTC. Часовые пояса представлены строками в одном из этих двух канонических форматов:

  • Смещение от всемирного координированного времени (UTC) или буква Z для UTC
  • Имя часового пояса из базы данных tz

У меня есть фрейм данных, который включает временные метки, которые были преобразованы в местный часовой пояс с помощью следующей команды:

df['date'].dt.tz_localize('UTC').dt.tz_convert('Europe/Berlin')

Результаты выглядят следующим образом и включают смещение UTC:

2019-02-15 00:02:26+01:00 и 2019-04-01 00:03:40+02:00 (переход на летнее время)

Однако при загрузке этого в BQ через API значения преобразуются в UTC. И я получаю следующие значения.

2019-02-15 00:01:26 UTC и 2019-04-01 00:01:40 UTC

Что может быть в случае, если BigQuery не принимает форматирование моей временной метки?

Я загружаю работу следующими строками кода:

dataset_ref = client.dataset('dataset_name')
table_ref = dataset_ref.table('table_name')
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.write_disposition = 'WRITE_TRUNCATE'
client.load_table_from_dataframe(df, table_ref, job_config=job_config).result()

1 Ответ

1 голос
/ 01 мая 2019

BigQuery не хранит часовой пояс вместе со значениями TIMESTAMP. Когда вы запрашиваете столбец TIMESTAMP, вам нужно передать часовой пояс, если вы хотите, чтобы результаты отражали его, например, STRING (timestamp, '+02:00'). Одним из вариантов является сохранение названия часового пояса (или часового смещения от UTC) в отдельном столбце. Если вы хотите, чтобы результаты запроса использовали этот исходный часовой пояс, вы можете использовать этот столбец, например, STRING(timestamp, time_zone).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...