在分区表中更改BigQuery中的数据类型

时间:2018-01-31 18:42:21

标签: google-bigquery google-cloud-platform

我在BigQuery中有一个分区表来存储用户事件,该事件具有以下架构

user_id - String, Required
event_time - DateTime, Required
country - String, Nullable
_PARTITIONTIME - event occurred date

上表中包含两年的数据(表示730个分区)。

出于某种原因,我想将数据类型从DateTime更改为Timestamp。我发现了类似的问题herehere,这些问题适用于非分区表。但在我的情况下,我有分区表,所以我需要保留值_PARTITIONTIME

经过一些研究后发现,使用Destination Table作为table_name$20180126运行以下查询似乎达到了我对单个分区的目标,

SELECT user_id, CAST(event_time AS TIMESTAMP) AS event_time, country from [project-id:data_set.table_name] WHERE _PARTITIONTIME >= "2018-01-26 00:00:00" AND _PARTITIONTIME < "2018-01-27 00:00:00"

但问题是,我有一个表的730分区(类似地,我有10个这样的表),在Web控制台或通过API或通过BQ命令行逐个运行上面的查询将花费很长时间。是否有其他更好的方法以最少的工作量来实现用例?

1 个答案:

答案 0 :(得分:1)

评论中有很多讨论,但我想强调两件事。

  1. 截至今天,您可以create partitioned tables using an existing column TIMESTAMP或DATETIME类型作为分区定义器。

  2. 此外,还有针对Manually Changing Table Schemas

  3. 发布的指南

    您可能希望阅读这两个建议,特别是第一个对您有用的建议,您可以选择重新加载数据以获得许多好处。