谷歌大查询或任何数据库中的分区视图(联合所有视图)
Posted
技术标签:
【中文标题】谷歌大查询或任何数据库中的分区视图(联合所有视图)【英文标题】:Partitioned View ( union all in view ) in google big query or any database 【发布时间】:2017-07-08 21:03:34 【问题描述】:使用分区视图是否有缺点。举例我的意思如下。
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
这样它会阻止查询读取整个表,并且只限于特定的产品类型和区域。
其中一个缺点是我们的数据更新过程稍微复杂一些?
如果我不使用上面的字段,它会减慢查询速度吗?
【问题讨论】:
【参考方案1】: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 个,因此如果您的国家和产品组合过多,则此方法将不起作用。如果是这种情况,您可能需要只按其中一个而不是两个都“分区”。
【讨论】:
如何将上述内容与大查询中的日期分区结合起来? 如果基础表是日期分区的,则当前不能使用表通配符中的 _PARTITIONTIME,但有 an open feature request。以上是关于谷歌大查询或任何数据库中的分区视图(联合所有视图)的主要内容,如果未能解决你的问题,请参考以下文章
在谷歌大查询中获得完全加入,在大查询中保持所有频率组合,让我只为所有类型的加入提供左加入