Hive View 查询性能:具有不同模式的联合表
Posted
技术标签:
【中文标题】Hive View 查询性能:具有不同模式的联合表【英文标题】:Hive View Query Performance: Union tables with different schemas 【发布时间】:2018-11-20 02:22:23 【问题描述】:我有一个场景,我有两个 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 实际上是所有分区中的唯一值。这意味着,Table_A 中提供的数据不应在 Table_B 中提供。将 Table_A 视为数据的“旧版本”。 鉴于此,如果目标是从最终消费者那里抽象出架构更改,这是提供数据的最佳方法吗?
编辑#2:由于大量其他问题,无法将此数据存储在一个表中。
【问题讨论】:
【参考方案1】:您没有在查询中使用任何分区谓词,这就是它不会进行分区修剪的原因。使用explain 命令检查这一点,它将显示应用的分区谓词。分区修剪应该适用于视图。
UNION
与UNION ALL
+DISTINCT
相同。
如果适用,请改用UNION ALL
,它的性能会更好。
另一方面,按独特的方式进行分区将创建单行分区,这可能会杀死您的配置单元元存储。希望你的意思是别的意思
business_date 实际上是跨所有分区的唯一值
在这种情况下去掉分区,性能会明显更好。
【讨论】:
UNION ALL 更有意义,完全忘记了,谢谢!。就分区谓词而言,考虑到两个表都按 business_date 分区,有没有办法将其应用于此特定场景并且该值在两个表中都是唯一的。 @NicolasCage 如果您不按 business_date 进行过滤,则在这种情况下分区将无济于事。尝试增加并行度以获得更好的性能:***.com/a/48487306/2700344以上是关于Hive View 查询性能:具有不同模式的联合表的主要内容,如果未能解决你的问题,请参考以下文章