我在BigQuery中有一个分区表来存储用户事件,该事件具有以下架构
user_id - String, Required
event_time - DateTime, Required
country - String, Nullable
_PARTITIONTIME - event occurred date
上表中包含两年的数据(表示730个分区)。
出于某种原因,我想将数据类型从DateTime
更改为Timestamp
。我发现了类似的问题here和here,这些问题适用于非分区表。但在我的情况下,我有分区表,所以我需要保留值_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命令行逐个运行上面的查询将花费很长时间。是否有其他更好的方法以最少的工作量来实现用例?
答案 0 :(得分:1)
评论中有很多讨论,但我想强调两件事。
截至今天,您可以create partitioned tables using an existing column TIMESTAMP或DATETIME类型作为分区定义器。
您可能希望阅读这两个建议,特别是第一个对您有用的建议,您可以选择重新加载数据以获得许多好处。