Я читаю данные, используя API Big Query Storage в Python (google-cloud-bigquery-storage == 0.4.0, а также сегодня проверено на 0.5.0).
Для кода:
result = bq_client.query(sql, project=project).result()
return result.to_dataframe(bqstorage_client=bqs_client)
Из некоторых запросов, SELECT
-в столбце TIMESTAMP
, я получаю следующий тип данных Pandas DataFrame:
datetime64[ns, <fastavro._timezone.UTCTzinfo object at 0x...>]
, где информация о часовом поясе хранится в виде fastavro
для других таблиц, я получаю
datetime64[ns, UTC]
с информацией о часовом поясе, хранящейся в pytz
объект.
Насколько я могу судить (исходные таблицы находятся вне моего контроля, и я не смог выполнить репликацию с общедоступным набором данных), это кажется произвольным - например, добавление предложения limit
приводит квывод pytz - хотя всегда в соответствии с одним и тем же запросом.
Есть ли способ всегда вернуть формат pytz?(Avro TZ не сериализуем, поэтому нуждается в идентификации и преобразовании).
Это что-то, что вернется после истечения сеанса?(24 часа? Или можно ли принудительно завершить сеанс?)
(Не уверен, где лучшее место для запроса поддержки, и цените API Big Query Storage в бета-версии, поэтому попробуйте здесь.)
Редактировать: в настоящее время я работаю над этим, делая
for col in train_df.select_dtypes('datetimetz'):
train_df[col] = train_df[col].dt.tz_convert(pytz.UTC)