从脚本传递的Beeline / Hive2变量被截断

时间:2019-06-13 06:34:01

标签: shell hive beeline

我有一个脚本,可以通过该脚本将参数传递给配置单元变量。整个流程如下所示。一个配置单元变量被截断了。

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变量的输出:

trim(regexp_replace(col1,'[[^ a-zA-Z]',''))as col1,trim(col2)as col2,trim(regexp_extract(col1,“ \(([[^)] +) \)“,1))as col3,trim(col4)as col4,trim(col5)as col5,trim(col6)as col6,''作为col7,trim(col8)as col8,trim(col9)as col9, trim(col10)为col10,trim(col11)为col11,trim(col12)为col12,trim(col13)为col13

当我打印变量时,它将打印整个字符串。

但是当我使用SET SRC_CLMN打印配置单元变量时;我只能看到“ trim(regexp_replace(col1,“)

所以这在配置单元查询中引发了错误。

1 个答案:

答案 0 :(得分:0)

SRC_CLMN变量的输出:

trim(regexp_replace(col1,'[[^ a-zA-Z]',''))as col1,trim(col2)as col2,trim(regexp_extract(col1,“(([[^)] +)) “,1))as col3,trim(col4)as col4,trim(col5)as col5,trim(col6)as col6,” as col7,trim(col8)as col8,trim(col9)as col9,trim( col10)为col10,trim(col11)为col11,trim(col12)为col12,trim(col13)为col13

在输出中可以看到单引号'[^ a-zA-Z]','')),您必须使用跳过字符使它们在字符串中可用

这就是变量保存它的方式 SRC_CLMN = 'trim(regexp_replace(col1,' [^ a-zA-Z]',''))as col1,trim(col2)as col2,trim( regexp_extract(col1,“((([^)] +))”,1))作为col3,trim(col4)作为col4,trim(col5)作为col5,trim(col6)作为col6,''作为col7,trim( col8)为col8,trim(col9)为col9,trim(col10)为col10,trim(col11)为col11,trim(col12)为col12,trim(col13)为col13

如果选中我标记的粗斜体部分,您会看到它以引号开头,以一个结尾,因此对于多数民众赞成在字符串

您需要使用跳过字符来处理所有报价,可以使用 sed 来替换所有'并添加跳过字符\'