Hive View查询性能:具有不同架构的联合表

时间:2018-11-20 02:22:24

标签: hadoop hive hiveql hive-query

我有一个场景,其中有两个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:由于大量其他问题,无法将这些数据存储在一个表中。

1 个答案:

答案 0 :(得分:0)

您在查询中没有使用任何分区谓词,这就是为什么它将不进行分区修剪的原因。使用explain命令进行检查,它将显示已应用的分区谓词。分区修剪应该可以正常工作。

如果 business_date在所有分区中都是唯一值,则在这里使用UNION没有意义,因为所有行都是唯一的。 UNIONUNION ALL + DISTINCT相同。 请改用UNION ALL,它的效果会更好。