我在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"
所有这些都没有成功。
你能帮帮我吗?我被卡住了。
由于
答案 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"