我有一个场景,其中有两个Hive表,而第二个本质上是第一个Hive表的演进模式(在此示例中,它还有1列)。
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
为了使下游用户不了解架构更改,我正在使用以下语法创建一个Hive视图:
Create VIEW customer_info AS
select * from Table_B
UNION
select business_date, name, age, null as address from Table_A
我知道上面返回了所有数据,但是从性能的角度来看,如果针对具有有效business_date值的视图运行查询,是否将分区键考虑在内?还是在使用视图时会失去这种好处?
编辑:我应该提到business_date实际上是所有分区中的唯一值。这意味着,表_A中提供的数据不应在表_B中提供。将Table_A视为数据的“旧版本”。 鉴于此,如果目标是使模式更改远离最终用户,那么这是服务数据的最佳方法吗?
编辑#2:由于大量其他问题,无法将这些数据存储在一个表中。
答案 0 :(得分:0)
您在查询中没有使用任何分区谓词,这就是为什么它将不进行分区修剪的原因。使用explain命令进行检查,它将显示已应用的分区谓词。分区修剪应该可以正常工作。
如果 business_date在所有分区中都是唯一值,则在这里使用UNION没有意义,因为所有行都是唯一的。 UNION
与UNION ALL
+ DISTINCT
相同。
请改用UNION ALL
,它的效果会更好。