Есть ли способ установить параметры запроса (переменные) в отдельных файлах? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть несколько SQL-запросов, которые используют общий набор параметров (переменных).В настоящее время параметры set находятся вверху каждого файла.Когда любой параметр изменяется, он должен быть изменен в каждом файле.Было бы полезно иметь возможность хранить параметры в отдельном файле и изменять их только в одном месте.

Как это можно сделать?

Я понимаю, что яможно использовать опцию --var для impala-shell, но это означает, что их необходимо вводить несколько раз.

Я вижу несколько способов, которыми это может произойти:

  1. impala-shell может поддерживать несколько аргументов -f: это было бы очень элегантно, но это не так.

  2. Запросы могут быть cat собраны вместе и переданы в impala-shell.Это исправно, но не элегантно.

  3. Псевдоним может быть установлен для impala-shell, в котором указаны --var аргументы.Потенциально это трудно понять правильно.

Ясно, что # 1 будет лучшим решением, но есть ли другие варианты или советы.

Не совсем связано: Выполнение нескольких запросов в Cloudera Impala

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Пожалуйста, проверьте документацию Impala: https://www.cloudera.com/documentation/enterprise/5-15-x/topics/impala_shell_options.html#shell_options

Вставьте сюда соответствующую часть:

-f query_file или --query_file = query_file

Передает SQLзапрос из файла.Несколько операторов должны быть разделены точкой с запятой (;).В CDH 5.5 / Impala 2.3 и выше вы можете указать имя файла - для представления стандартного ввода.Эта функция делает удобным использование impala-shell как части конвейера Unix, где операторы SQL генерируются динамически другими инструментами.

Как вы можете видеть, Impala может анализировать больше файлов запросов, точка с запятой (;)разграничены.Таким образом и с аргументом --var вы можете выполнить свой первый случай.

0 голосов
/ 02 октября 2018

3a. Автоматически генерировать аргументы командной строки --var из файла конфигурации.

Попробуйте эту функцию bash ...

function impala-with-conf {
  if [[ -z "$1" || ! -r "$1" ]] ; then
    echo "1st argument must be a properties file" >&2
    return 1
  fi
  typeset AllVarArgs=''
  while IFS='' read -r Line || [[ -n "$Line" ]]; do
    KeyValue=$(echo "$Line" | sed -e 's/^[ \t]*//' -e 's/[ \t]*=[ \t]*/=/' -e 's/[ \t]*$//')
    AllVarArgs="$AllVarArgs --var $KeyValue" 
  done < "$1"
  shift
  impala-shell $AllVarArgs $@
}

(на основе Считывание файла построчно с присвоением значения переменной )

Будет работать с файлами "свойств", такими как

alpha_beta = some-text-without-spaces-or-quotes
epsilon=12

Демо:

cat x.sql
select '${VAR:alpha_beta}' as ab , ${VAR:epsilon} as e

impala-with-conf x.conf -q x.sql
Query: select 'some-text-without-spaces-or-quotes' as ab , 12 as e
+------------------------------------+----+
| ab | e |
+------------------------------------+----+
| some-text-without-spaces-or-quotes | 12 |
+------------------------------------+----+

...