3

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

4

1 回答 1

0

您没有在查询中使用任何分区谓词,这就是它不会进行分区修剪的原因。使用explain命令检查这一点,它将显示应用的分区谓词。分区修剪应该适用于视图。

UNIONUNION ALL与+相同DISTINCT。如果适用,请UNION ALL改用它,它会表现得更好。

另一方面,按独特的方式进行分区将创建单行分区,这可能会杀死您的配置单元元存储。希望你的意思是别的意思

business_date 实际上是所有分区的唯一值

在这种情况下删除分区,性能会明显更好。

于 2018-11-20T08:25:45.903 回答