BigQuery自动将时间戳时区转换为UTC

时间:2018-06-02 14:46:18

标签: python timezone google-cloud-platform google-bigquery

我有一张桌子:

enter image description here

和一个文件:https://storage.googleapis.com/test_share_file/testTimestamp.csv

看起来像: enter image description here

我使用python将文件加载到大查询中:

from google.cloud import bigquery as bq

gs_path = 'gs://test_share_file/testTimestamp.csv'
bq_client = bq.Client.from_service_account_json(gcp_creds_fp)
ds = bq_client.dataset('test1')
tbl = ds.table('testTimestamp')

job_config = bq.LoadJobConfig()
job_config.write_disposition = bq.job.WriteDisposition.WRITE_APPEND
job_config.skip_leading_rows = 1 # skip header
load_job = bq_client.load_table_from_uri(gs_path, tbl, job_config=job_config)
res = load_job.result()

然而在表中,两个时间戳都是UTC时间!

enter image description here

如何让第二列在东部时间?

1 个答案:

答案 0 :(得分:1)

你可以"转换"进入东部时间的第一列 - 如下例所示

#standardSQL
WITH t AS (
  SELECT TIMESTAMP '2018-05-07 22:40:00+00:00' AS ts
)
SELECT ts, STRING(ts, '-04:00') timestamp_eastern
FROM t
  

我正在处理...固执......

您可以创建视图,其中包含您需要的所有逻辑,以便客户端查询该视图而不是原始表

#standardSQL
CREATE VIEW `project.dataset.your_view` AS 
SELECT ts, STRING(ts, '-04:00') timestamp_eastern 
FROM `project.dataset.your_table`
  

我觉得奇怪的是大查询无法在时区显示时间

时间戳表示绝对时间点,与任何时区或常规(如夏令时)无关。 解析时间戳或格式化时间戳以供显示时使用时区。时间戳值本身不存储特定时区。字符串格式的时间戳可以包括时区。如果未明确指定时区,则使用默认时区UTC。

详细了解Timestamp type