使用Sqoop进行变量解释时出错

时间:2017-05-02 20:41:01

标签: bash variables escaping sqoop

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

Sqoop是一种将表格从RDB(在这种情况下为Oracle)转移到Hive的工具。这是一个命令行工具,如下所示:

df.groupby('type').apply(lambda x : x.assign(val1st = x.sort_values(by='day')['value'].head(1).values[0])).reset_index(drop=True)

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

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

\ $ CONDITIONS 是Sqoop替换的变量,所以它必须采用这种非常文字的格式,包括反斜杠。

我确信问题出在 - query 参数上,因为如果我按原样运行脚本,但是在纯文本中硬编码--query的值,它就可以工作。 / p>

要清楚,这是我在剧本中的命令:

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

因此,出于某种原因我不明白,这个值存在问题 到目前为止,我尝试了 - 查询

这些值

假设:

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

我已经尝试过:

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

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

由于

1 个答案:

答案 0 :(得分:0)

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

阅读the documentation to sqoop非常清楚,查询应该作为单个参数传递,文字后缀应该是WHERE $CONDITIONS,并且在问题中给出的代码中,只提供反斜杠制作$字面值。但是,在单引号中,$已经是字面值 - 不需要反斜杠。

因此:

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

sqoop import --query "$query"