Sqoop eval能否从文件读取SQL语句替代--query硬编码?
Sqoop Eval 从文件读取SQL语句的实现方法
当然可以实现!Sqoop Eval本身没有专门提供直接读取SQL文件的参数,但我们可以借助Shell的命令替换能力,轻松把文件中的SQL语句传递给Sqoop,无需硬编码在命令行里。
核心说明
-e 和 --query 在Sqoop Eval中是等价的参数,都用于指定要执行的SQL语句。我们只需要通过Shell语法把文件内容注入到这两个参数中即可。
具体步骤
保存SQL到文件
将你的TRUNCATE语句写入statement.sql文件,内容如下:TRUNCATE TABLE SAMPLE_STG_TABLE DROP STORAGE执行Sqoop命令
你可以选择以下两种方式之一执行:- 使用
--query参数:sqoop eval -D mapreduce.job.queuename=NONP.XXXX --connect "jdbc:oracle:thin:ABC/PSCODE@XXX.XX.XX.com:61901/XXX_ANY" --username XXXX --password DXX --query "$(cat statement.sql)" - 使用
-e短参数:sqoop eval -D mapreduce.job.queuename=NONP.XXXX --connect "jdbc:oracle:thin:ABC/PSCODE@XXX.XX.XX.com:61901/XXX_ANY" --username XXXX --password DXX -e "$(cat statement.sql)"
- 使用
补充提示
$(cat statement.sql)是Shell的命令替换语法,它会先读取statement.sql的内容,再将内容作为参数值传递给Sqoop。- 如果你的SQL包含多行语句或特殊字符,只要文件内的格式符合目标数据库JDBC驱动的要求,这种方式依然有效。
内容的提问来源于stack exchange,提问作者Mayukh Mukhopadhyay
相关产品推荐
相关产品推荐

