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"
我在 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"