如何创建包含时间戳列的表视图?

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 字段相同。

以上是关于如何创建包含时间戳列的表视图?的主要内容,如果未能解决你的问题,请参考以下文章

从没有时间戳列的数据库表中增量获取两个日期之间的记录

SQL 查询:如何在排名列值中使用时间戳列

计算两个时间戳列的差异[重复]

休眠标准组结果按日期从时间戳

spark scala比较具有时间戳列的数据帧

使用熊猫读取带有时间戳列的 csv