О том, как запустить Impala-Shell в сценарии оболочки

У меня проблема при попытке выполнить этот код Bash:

function createImpalaPartition() {

period_id=$1;
database=$2
node=$3

actual_full=$(date -d@"$period_id" +%Y/%m/%d/%H/%M/)
template="use c2d;create EXTERNAL TABLE exptopology_$period_id (child_id bigint,parent_id bigint,level INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' WITH SERDEPROPERTIES ('serialization.format'=',', 'field.delim'=',') STORED AS TEXTFILE LOCATION '/hfc/sip/service/topology/$actual_full'"

echo "template is $template";
#impala-shell -V -i $node -d $database -q $template
impala-shell -V -i $node -q $template
}

Вот как я вызываю это:

createImpalaPartition $actual $impalaDatabase $impalaNode

где

actual=$(date +'%s')
impalaDatabase="dbName"
impalaNode="name_of_the_node"

выполнение скрипта возвращает:

[core@dub-vcd-vms170 ~]$ createImpalaPartition $actual $impalaDatabase $impalaNode
template is use c2d;create EXTERNAL TABLE exptopology_1428326587 (child_id bigint,parent_id bigint,level INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' WITH SERDEPROPERTIES ('serialization.format'=',', 'field.delim'=',') STORED AS TEXTFILE LOCATION '/hfc/sip/service/topology/2015/04/06/14/23/'
Error, could not parse arguments "c2d;create EXTERNAL TABLE exptopology_1428326587 (child_id bigint,parent_id bigint,level INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' WITH SERDEPROPERTIES ('serialization.format'=',', 'field.delim'=',') STORED AS TEXTFILE LOCATION '/hfc/sip/service/topology/2015/04/06/14/23/'"
 Usage: impala_shell.py [options]

Как видите, мне нужно создавать таблицы, используя скрипт оболочки.

ОБНОВИТЬ:

перейдя по этой ссылке, я вижу, что импала-оболочка может быть использована таким образом, но я не использую правильные параметры.

Я использовал -f вместо -q, та же ошибка остается. Кто-нибудь может мне помочь, пожалуйста?

2 ответа

Решение

Вам нужно процитировать расширение $template для всей строки, которая будет рассматриваться как один аргумент impala-shell:

impala-shell -V -i $node "$template"

где -V включает подробный вывод. Для не многословного (тихого) вывода замените -V с -q,

Наконец я узнаю, как решить мою проблему.

function createImpalaPartition() {

period_id=$1;
database=$2
node=$3

actual_full=$(date -d@"$period_id" +%Y/%m/%d/%H/%M/)
#UC=$(impala-shell -r -q "select count(1) from table where condition=1" -d $DB -i $HOST -B)
# attention, i have to use this way impala-shell
impala-shell -V -i $node -d $database -q "create EXTERNAL TABLE exptopology_$period_id (child_id bigint,parent_id bigint,level INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' WITH SERDEPROPERTIES ('serialization.format'=',', 'field.delim'=',') STORED AS TEXTFILE LOCATION '/hfc/sip/service/topology/$actual_full'"
}

Я не могу использовать шаблон var с командой create, я должен передать команду таким образом.

Другие вопросы по тегам