使用参数在Hive中创建视图

时间:2014-06-05 11:29:41

标签: hadoop hive hiveql

我有一个包含属于不同日期的行的表。 我想创建一个视图,它应该根据日期给我数据

CREATE VIEW newusers
AS
SELECT DISTINCT T1.uuid
FROM user_visit T1
WHERE T1.firstSeen="20140522";

我不想修复WHERE T1.firstSeen =“20140522”; 它可以是任何日期,如20140525等。 有什么办法可以创建一个以日期为参数的视图吗?

3 个答案:

答案 0 :(得分:3)

不确定创建具有此类变量的视图是否真的有效。随着Hive 1.2的开始,这就是创建表时会发生的情况。

hive> create view v_t1 as select * from t_t1 where d1="${hiveconf:v_val_dt}";
OK
Time taken: 6.222 seconds
hive> show create table v_t1;
OK
CREATE VIEW `v_t1` AS select `t_t1`.`f1`, `t_t1`.`d1` from `default`.`t_t1` where `t_t1`.`d1`="'2016-01-02'"
Time taken: 0.202 seconds, Fetched: 1 row(s)

创建视图时,它始终采用静态常量值。可能有用的一件事就是停留在提示之外,就像这样。

[hdfs@sandbox ~]$ hive -hiveconf v_val_dt=2016-01-01 -e 'select * from v_t1 where d1="${hiveconf:v_val_dt}";' 
Logging initialized using configuration in file:/etc/hive/2.3.2.0-2950/0/hive-log4j.properties 
OK 
string_1    2016-01-01 
Time taken: 7.967 seconds, Fetched: 1 row(s) 

[hdfs@sandbox ~]$ hive -hiveconf v_val_dt=2016-01-06 -e 'select * from v_t1 where d1="${hiveconf:v_val_dt}";' 
Logging initialized using configuration in file:/etc/hive/2.3.2.0-2950/0/hive-log4j.properties 
OK 
string_6    2016-01-06 
Time taken: 10.967 seconds, Fetched: 1 row(s) 

答案 1 :(得分:0)

在配置单元脚本中,只需用变量替换日期:

CREATE VIEW newusers
AS
SELECT DISTINCT T1.uuid
FROM user_visit T1
WHERE T1.firstSeen="${hiveconf:date}";

然后在调用hive时给该变量一个值:

hive --hiveconf date=20140522 -f 'create_newusers_view.hql'

或者只是从hive中设置它:

set date=20140522;

答案 2 :(得分:0)

解决此问题的另一种方法是创建一个表,在其中将键值对设置为参数。在您看来,您可以参考此表。

create table load_params (key: string, value: string);
insert overwrite table load_params values ('firstSeen', '20140522');

您的视图将如下所示:

create view newusers as 
select distinct T1.uuid
from user_visit T1
where T1.firstSeen = (select cast(value as int) from load_params where key = 'firstSeen');

可以在每次运行之前编辑load_params表。就像使用set设置其他参数时一样。