首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用SQL或web在bigquery中创建带有日期后缀的分区表

使用SQL或web在bigquery中创建带有日期后缀的分区表
EN

Stack Overflow用户
提问于 2020-05-29 11:58:46
回答 2查看 3.3K关注 0票数 0

我想创建这样的桌子:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE sometable
(SELECT columns, columns, date_col)
PARTITIONED BY date_col

我希望它使用表后缀: sometable$date_partition中的日期进行分区。

我读了文档,但既不能用web,也不能用SQL完成。

web显示这样的错误“缺少参数日期的参数”。

代码语言:javascript
代码运行次数:0
运行
复制
My table name is "daily_export_${DATE}"
My partitioning column isn't blank, it's date_col.

能给我举个简单的例子吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-01 05:16:45

  • PARTITION BY走得更早
  • 查询需要将表后缀解析为DATE类型。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE OR REPLACE TABLE temp.so
PARTITION BY date_from_table_name
AS
SELECT PARSE_DATE('%Y%m%d', _table_suffix) date_from_table_name, event_timestamp, event_name, items  
FROM `bingo-blast-174dd.analytics_151321511.events_*`
WHERE _table_suffix BETWEEN '20200530' AND '20200531'
LIMIT 10
票数 2
EN

Stack Overflow用户

发布于 2020-06-04 14:17:38

正如您在本文档中所看到的,BigQuery实现了两个不同的概念:切分表分区表

第一个表(切分表)是将整个表分割成多个具有日期后缀的表的方法。您可以单独或使用通配符查询这些表。例如,您可以创建多个名为events_20200101、events_20200102、.的表,而不是创建一个名为events的表。

当您这样做时,您可以单独查询这些表中的任何一个,也可以通过运行select * from events_*之类的查询来查询所有这些表。

第二个概念(分区表)是一种将表分割成小块的方法,以便在查询数据时提高性能并降低成本。分区表可以基于表的某一列,甚至可以基于摄入时间。当根据摄入时间对表进行分区时,可以访问名为_PARTITIONTIME的伪列。

在比较这两种方法时,文档指出:

日期/时间戳分区表的性能优于按日期划分的表。创建日期命名表时,BigQuery必须为每个日期命名表维护架构和元数据的副本。此外,当使用日期命名表时,可能需要BigQuery来验证每个查询表的权限。这种做法还会增加查询开销,并影响查询性能。推荐的最佳做法是使用日期/时间戳分区表而不是分日期表。

在您的示例中,您基本上需要创建一个分区表,而不需要在其名称中包含日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62085459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档