2017-07-08 19 views
0

使用分区视图存在缺点。示例我的意思如下。谷歌大查询或任何数据库中的分区视图(union all in view)

https://sqlsunday.com/2014/08/31/partitioned-views/

的但不是使用日期,我想其他字段类型进行分区。例如 产品类型或国家。

这样的观点会

Select '1' as Prod_type, 'USA' as Country , * 
from fact_Sales_1_USA 
union all 
Select '2' as Prod_type, 'UK' as Country , * 
from fact_Sales_2_UK 

这样,它会阻止读取整个表查询,只是限制于特定的产品类型和地区。

缺点之一是我们的课程数据更新稍微复杂一些?

它会减慢我不使用上述字段的查询吗?

回答

2

BigQuery目前不支持partitioning by non-date columns。例如,模拟这种方法的唯一方法是为每个产品类型或区域分别提供一个表格,然后使用table wildcard to enable filtering on them

如果你的表有下列名称,例如:

MyTable_USA_1 
MyTable_USA_3 
MyTable_UK_2 
MyTable_France_1 
... 

您可以创建一个逻辑视图:

#standardSQL 
SELECT 
    *, 
    _TABLE_SUFFIX AS country_and_product 
FROM `MyTable_*`; 

现在,当您的查询,您可以在国家筛选(和可选的产品编号):

#standardSQL 
SELECT 
    * EXCEPT (country_and_product) 
FROM CountryAndProductView 
WHERE country_and_product LIKE 'UK_%' 
    -- AND country_and_product LIKE '%_2' 

有一点要记住的是,有一个1000吨的限制ables per query,所以如果你有太多的国家和产品组合,这种方法将无法正常工作。如果是这种情况,您可能需要仅通过其中一个“分区”,而不是两者。

+0

如何将上述内容与大查询中的日期分区结合起来? –

+0

如果基础表是日期分区的,但是[开放功能请求](https://issuetracker.google.com/issues/35905833),则您当前不能使用表通配符中的_PARTITIONTIME。 –