我有一个场景,其中我有两个配置单元表,而第二个配置单元表本质上是第一个配置单元表的演化模式(在本例中它还有一列)。
Table_A
{
business_date String
Name String
Age Number
} partitioned by business_date
Table_B {
business_date String
Name String
Age Number
Address String
} partitioned by business_date
为了使下游用户不受模式更改的影响,我使用以下语法创建了一个配置单元视图:
Create VIEW customer_info AS
select * from Table_B
UNION
select business_date, name, age, null as address from Table_A
我知道上面的语句返回所有的数据,但是从性能的Angular 来看,如果对具有有效business\u date值的视图运行查询,它会考虑分区键吗?或者我在处理视图时会失去这个好处吗?
edit:我应该提到business\ u date实际上是一个跨所有分区的唯一值。这意味着表a中提供的数据不应在表b中提供。把表a看作是数据的“旧版本”。鉴于此,如果目标是将模式更改从最终使用者抽象出来,那么这是提供数据的最佳方法吗?
编辑#2:由于大量其他问题,无法将此数据存储在一个表中。
1条答案
按热度按时间monwx1rj1#
在查询中没有使用任何分区 predicate ,这就是为什么没有分区修剪。使用explain命令检查,它将显示应用的分区 predicate 。分区修剪应该可以在视图中正常工作。
如果business\u date在所有分区中都是唯一的值,那么在这里使用union是没有意义的,因为所有行都是唯一的。
UNION
与相同UNION ALL
+DISTINCT
. 使用UNION ALL
相反,它会表现得更好。