如何创建包含时间戳列的表视图?
Posted
技术标签:
【中文标题】如何创建包含时间戳列的表视图?【英文标题】:How to create a view of table that contains a timestamp column? 【发布时间】:2014-06-04 21:14:28 【问题描述】:此问题是previous one I have asked 的扩展。
我有一个表 (2014_05_31_transformed.Video),其架构如下所示。我已将 BigQuery API 返回的 JSON 描述为 this gist。
我正在尝试使用如下所示的 API 调用针对该表创建一个视图:
'view':
'query': u 'SELECT deleted_mod_time FROM [2014_05_31_transformed.Video]'
,
'tableReference':
'datasetId': 'latest_transformed',
'tableId': u 'Video',
'projectId': 'redacted'
但是,BigQuery API 返回此错误:
HttpError:https://www.googleapis.com/bigquery/v2/projects/124072386181/datasets/latest_transformed/tables?alt=json 返回“无效的字段名称”deleted_mod_time.usec“。字段只能包含字母、数字, 和下划线,以字母或下划线开头,长度最多为 128 个字符。”
BigQuery API 的架构在 TIMESTAMP
数据类型和常规可为空的 INTEGER
数据类型之间没有任何区别,因此我想不出以编程方式更正此问题的方法。有什么我可以做的吗,或者这是 BigQuery 的视图实现的一个错误?
【问题讨论】:
可以确认这是可重现的,并且看起来像一个错误。看起来像最简单的工作示例,因此开发人员可以查看它是SELECT TIMESTAMP("2014-04-01 12:22:12");
。运行查询;没关系。现在尝试将其保存为视图;它返回与 OP 相同的错误。
【参考方案1】:
您需要取消引用视图的嵌套记录类型字段:
SELECT utm.campaign as utm_campaign ...
你需要写成:
select FORMAT_UTC_USEC(timestamp) as timestamp ...
时间戳作为嵌套类型在内部存储/选择,并且视图当前不允许嵌套结果。 BQ 团队正在努力修复,但不幸的是,这并不简单。
【讨论】:
有什么方法可以检测出哪些字段属于TIMESTAMP
类型? API 返回的架构使它们看起来与其他 INTEGER
字段相同。以上是关于如何创建包含时间戳列的表视图?的主要内容,如果未能解决你的问题,请参考以下文章