在Impala中创建参数化视图

时间:2018-08-28 17:14:12

标签: view hive cloudera impala hue

我的目标是在Impala中创建参数化视图,以便用户可以轻松更改查询中的值。如果我在例如HUE下运行以下查询,则可以引入一个值。

SELECT * FROM customers WHERE customer_id = ${id}

但是我想创建一个视图,如下所示,当您运行它时,它会询问您要搜索的值。但是这种方式不起作用:

CREATE VIEW test AS SELECT * FROM customers WHERE customer_id = ${id}

有人知道这是否可能吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

创建视图时,它采用实际变量的值。

存在两种解决方法:

  1. 创建一个实际表,您将在其中存储/更新参数。

CREATE VIEW test AS SELECT * FROM customers JOIN id_table ON customer_id = id_tableid

  1. 借助用户定义的函数(UDF)将参数传递到视图中。可能需要设置并获取两个UDF。 Set UDF将在HDFS上写入UDF,而Get UDF将从HDFS读取变量。

上面提到的两种解决方法都可行,但并不理想。我的建议是使用Hive进行参数化视图创建。您可以创建一个GenericUDF,通过它可以访问配置单元配置并读取变量并执行过滤。您不能将其用于Impala。

SELECT Generic_UDF(array(customer_id)) FROM customers

GenericUDFs具有配置方法,您可以使用它来读取配置单元变量:

public void configure(MapredContext mapredContext) {
  String name = mapredContext.getJobConf().get("name");
}

答案 1 :(得分:0)

您可以做相反的事情,例如而是在视图上参数化查询