如何将时区添加到上传到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。时区由以下两种规范格式之一的字符串表示:
我有一个数据框,其中包含通过以下命令转换为本地时区的时间戳:
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
(夏令时)
但是,当通过API将其上传到BQ时,值将转换为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()
答案 0 :(得分:1)
BigQuery不会将时区与TIMESTAMP值一起存储。当查询TIMESTAMP列时,如果希望结果反映出来,则需要传递一个时区,例如STRING (timestamp, '+02:00')
。一种选择是将时区名称(或与UTC的小时偏差)存储在单独的列中。如果您希望查询结果使用该原始时区,则可以使用该列,例如STRING(timestamp, time_zone)
。