Sqoop 的变量解释错误

Error with variable interpretation with Sqoop

我在 bash 脚本中向 Sqoop 传递参数时遇到问题。

Sqoop 是一种将表从 RDB(在本例中为 Oracle)传输到 Hive 的工具。它是这样调用的命令行工具:

sqoop import --connect <string> --direct --table <table> --query <query> ....

我正在生成命令以在脚本内部启动,从文件中获取值并使用 awk 解析它们。
所有参数都可以,除了 --query 一个。此参数用于传递查询以在源上使用以进行数据提取。它接受这种格式:

select very long list of columns from schema.table where $CONDITIONS

\$CONDITIONS 是 Sqoop 替换的变量,因此在这种非常直接的格式中是强制性的,包括反斜杠。

我确定问题出在 --query 参数上,因为如果我 运行 脚本原样,但硬编码值 --纯文本查询,有效。

明确地说,这是我脚本中的命令:

 scoop import --connect "$source" --table "$sourcetab" \
 -- hiveimport --some more other commands --querytot "$query"

所以,由于我不明白的原因,这个值有问题。
到目前为止,我尝试了这些值形式 --query:

鉴于:

query="select col1 col2 col3 col4 col4 from schema.table"

我已经试过了:

1. querytot="$query where \$CONDITIONS"

2. cond=" where '$CONDITIONS'"
   querytot="$query$cond"

3. $(echo "$query$cond")   <-- placed directly in the sqoop command

4. echo "$query$cond" > query_file, and passed it to Sqoop via --options-file

所有这些都没有成功。
你能帮帮我吗?我卡住了。

谢谢

向字符串添加文字后缀的简单方法是将该后缀附加在单引号中。

阅读 the documentation to sqoop 非常清楚,查询应作为单个参数传递,文字后缀应为 WHERE $CONDITIONS,并且在问题中给出的代码中,反斜杠仅用于使 $ 字面意思。但是,在单引号中,$ 已经是字面意思了——因此不需要反斜杠。

因此:

query="select col1 col2 col3 col4 col4 from schema.table"
query+=' WHERE $CONDITIONS'

sqoop import --query "$query"