我在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参数上,因为如果我按原样运行脚本,但是用纯文本硬编码--query的值,它就可以工作了。
要清楚的是,这是我在脚本中得到的命令:
scoop import --connect "$source" --table "$sourcetab" \
-- hiveimport --some more other commands --querytot "$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
所有这些都没有成功。
你能帮帮我吗?我卡住了。
谢谢
1条答案
按热度按时间nwwlzxa71#
向字符串添加文字后缀的简单方法是在单引号中附加该后缀。
将文档读入sqoop可以非常清楚地看到,查询应该作为单个参数传递,文本后缀应该是
WHERE $CONDITIONS
,在问题中给出的代码中,反斜杠只是用来表示$
字面意义的。然而,在单引号中$
已经是字面意义上的了--使反斜杠变得不必要。因此: