Переменные Beeline / Hive2, переданные из скрипта, усекаются

У меня есть сценарий, из которого я передаю параметры переменной улья. Весь поток выглядит так, как показано ниже. Одна из переменных улья усекается.

cat ‹* script.sh

beeline -u "$HIVESERVER" \
-f $path_to.hql \
--hivevar TRGT_DB=$HIVE_TRGT_DB \
--hivevar SRC_CLMN=$SOURCE_CLMNS \
--hivevar INBND_DB=$HIVE_SRC_DB \
--hivevar SRC_TBL=$SOURCE_TABLE \
--hivevar TRGT_TBL=$TRGT_TABLE \

Все переменные передаются правильно, кроме переменной столбца (SRC_CLMN), которая усекается.

SRC_CLMN извлекается из файла, как показано ниже.

SRC_CLMN=`cat source_column.tbl | grep table | (some sed functions)`

Вывод переменной SRC_CLMN:

обрезать (regexp_replace (col1, '[^ a-zA-Z]', '')) как col1, обрезать (col2) как col2, обрезать (regexp_extract (col1, "\ (([^)] +) \)" , 1)) как col3, обрезать (col4) как col4, обрезать (col5) как col5, обрезать (col6) как col6, '' как col7, обрезать (col8) как col8, обрезать (col9) как col9, обрезать (col10 ) как col10, обрезать (col11) как col11, обрезать (col12) как col12, обрезать (col13) как col13

Когда я печатаю переменную, она печатает всю строку.

Но когда я печатаю переменную улья с помощью SET SRC_CLMN; я вижу только до "обрезать (regexp_replace (col1,"

Таким образом, это вызывает ошибку в запросе улья.


person bill_123    schedule 13.06.2019    source источник


Ответы (1)


Вывод переменной SRC_CLMN:

обрезать (regexp_replace (col1, '[^ a-zA-Z]', '')) как col1, обрезать (col2) как col2, обрезать (regexp_extract (col1, "(([^)] +))", 1 )) как col3, обрезать (col4) как col4, обрезать (col5) как col5, обрезать (col6) как col6, '' как col7, обрезать (col8) как col8, обрезать (col9) как col9, обрезать (col10) как col10, обрезать (col11) как col11, обрезать (col12) как col12, обрезать (col13) как col13

как вы можете видеть в выводе, есть одинарные кавычки '[^ a-zA-Z]', '')) вы должны использовать символ пропуска, чтобы сделать их доступными в вашей строке

просто так переменная сохраняет ее SRC_CLMN = 'trim (regexp_replace (col1,' [^ a-zA-Z] ',' ')) как col1, trim ( col2) как col2, обрезать (regexp_extract (col1, "(([^)] +))", 1)) как col3, обрезать (col4) как col4, обрезать (col5) как col5, обрезать (col6) как col6, '' как col7, обрезать (col8) как col8, обрезать (col9) как col9, обрезать (col10) как col10, обрезать (col11) как col11, обрезать (col12) как col12, обрезать (col13) как col13

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

вам нужно обрабатывать все цитаты с помощью символов пропуска, вы можете использовать sed для этого, чтобы заменить все 'и добавить символ пропуска \'

person Hussien El-Sawy    schedule 13.06.2019