我想创建这样的桌子:
CREATE TABLE sometable
(SELECT columns, columns, date_col)
PARTITIONED BY date_col
我希望它使用表后缀: sometable$date_partition中的日期进行分区。
我读了文档,但既不能用web,也不能用SQL完成。
web显示这样的错误“缺少参数日期的参数”。
My table name is "daily_export_${DATE}"
My partitioning column isn't blank, it's date_col.
能给我举个简单的例子吗?
发布于 2020-05-31 21:16:45
PARTITION BY
走得更早DATE
类型。例如:
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
发布于 2020-06-04 06:17:38
正如您在本文档中所看到的,BigQuery
实现了两个不同的概念:切分表和分区表
第一个表(切分表)是将整个表分割成多个具有日期后缀的表的方法。您可以单独或使用通配符查询这些表。例如,您可以创建多个名为events_20200101、events_20200102、.的表,而不是创建一个名为events的表。
当您这样做时,您可以单独查询这些表中的任何一个,也可以通过运行select * from events_*
之类的查询来查询所有这些表。
第二个概念(分区表)是一种将表分割成小块的方法,以便在查询数据时提高性能并降低成本。分区表可以基于表的某一列,甚至可以基于摄入时间。当根据摄入时间对表进行分区时,可以访问名为_PARTITIONTIME
的伪列。
在比较这两种方法时,文档指出:
日期/时间戳分区表的性能优于按日期划分的表。创建日期命名表时,BigQuery必须为每个日期命名表维护架构和元数据的副本。此外,当使用日期命名表时,可能需要BigQuery来验证每个查询表的权限。这种做法还会增加查询开销,并影响查询性能。推荐的最佳做法是使用日期/时间戳分区表而不是分日期表。
在您的示例中,您基本上需要创建一个分区表,而不需要在其名称中包含日期。
https://stackoverflow.com/questions/62085459
复制