Создать параметризованный вид в Impala - PullRequest
0 голосов
/ 28 августа 2018

Моя цель - создать параметризованное представление в Impala, чтобы пользователи могли легко изменять значения в запросе. Если я запускаю запрос ниже, например, в HUE, можно ввести значение.

SELECT * FROM customers WHERE customer_id = ${id}

Но я хотел бы создать следующее представление: при запуске оно запрашивает значение, которое вы хотите найти. Но этот способ не работает:

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

Кто-то знает, возможно ли это?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Когда вы создаете представление, оно принимает фактическое значение переменной.

Существует два обходных пути:

  1. Создайте реальную таблицу, в которой вы будете хранить / обновлять параметр.

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

  1. Передача параметра в представление с помощью пользовательской функции (UDF). Возможно, вам понадобится установить и получить два UDF. Set UDF будет записывать UDF в HDFS, а Get UDF будет читать переменную из HDFS.

Два вышеупомянутых обходных пути работают, но не идеально. Я предлагаю использовать Hive для создания параметризованного представления. Вы можете создать GenericUDF, с помощью которого вы можете получить доступ к конфигурации улья, прочитать переменную и выполнить фильтрацию. Вы не можете использовать это для Импалы.

SELECT Generic_UDF(array(customer_id)) FROM customers

GenericUDFs имеет метод configure, который вы можете использовать для чтения переменной hive:

public void configure(MapredContext mapredContext) {
  String name = mapredContext.getJobConf().get("name");
}
0 голосов
/ 04 сентября 2018

Вы можете сделать обратное, например, вместо этого параметризовать запрос в представлении

...