1

如果我跑

set hivevar:a = 1;
select * from t1 where partition_variable=${a};

Hive 仅从适当的分区中提取记录。或者,如果我跑

set hivevar:b = 6;
set hivevar:c = 5;
set hivevar:a = ${b}-${c};
select * from t1 where partition_variable=${a};

partition_variable 上的条件被视为谓词而不是分区,并且 hive 会遍历表中的所有记录。

这显然是一个人为的例子,但在我的特定用例中是必要的。无论如何强制配置单元使用它进行分区?

提前致谢。

4

2 回答 2

0

分区变量是发生分区的列。它适用于以下。

create table newpart
(productOfMonth string)
partitioned by (month int);


hive> select * from newpart;
OK
Cantaloupes 10 
Pumpkin     11

set hivevar:lastmonth = 11;
set hivevar:const = 1;
set hivevar:prevmonth = ${lastmonth}-${const};

hive> select * from newpart
    > where month = ${prevmonth};
OK
Cantaloupes 10
于 2016-09-01T15:53:34.870 回答
0

我永远无法让分区与动态生成的配置单元变量一起正常工作,但一个简单的解决方法是创建一个包含变量的表并加入它们,而不是在 where 子句中使用它们。

于 2016-09-02T17:08:16.093 回答