使用 curl 在 HDInsight 中执行 Sqoop 不起作用

Sqoop execution in HDInsight with curl is not working

我们在参数“–query”中提供的 select 查询失败。

命令 curl -u : -d user.name= -d command="import --connect jdbc:sqlserver://:1433;database= --username --password --query \"select\*\\from\\MEDICAL_DEP_EMPS\\" --append --target-dir adl ://.azuredatalakestore.net//sheriff/testnewrdbmstoadld --temporary-rootdir adl://.azuredatalakestore.net//sheriff/testnewrdbmstoadld/temp --as-textfile --enclosed-by ' - -escaped-by / --null-string \\N --null-non-string \\N --fields-terminated-by , --optionally-enclosed-by / -m 1 " -d statusdir="adl://.azuredatalakestore.net/tmp/dataingestion/3802/statusdirec1" https://qa-spark-cluster.azurehdinsight.net/templeton/v1/sqoop

日志: 19/12/12 15:11:36 信息 sqoop.Sqoop:运行 Sqoop 版本:1.4.6.2.6.5.3009-43 19/12/12 15:11:36 警告 tool.BaseSqoopTool:在命令行上设置密码是不安全的。考虑改用 -P。 19/12/12 15:11:36 信息 manager.SqlManager:使用默认的 fetchSize 1000 19/12/12 15:11:36 信息 tool.CodeGenTool:开始代码生成 19/12/12 15:11:36 错误 tool.ImportTool:遇到 IOException 运行 导入作业:java.io.IOException:查询 [\"select\*\from\MEDICAL_DEP_EMPS\"] 必须在 WHERE 中包含“$CONDITIONS”条款。

Sqoop --query 选项期望您以自由形式 select 查询传递 $CONDITIONS。

可参考SqoopUserGuide

中的“7.2.2.选择要导入的数据”和“7.2.3.自由格式查询导入”

虽然下面link不是"curl for sqoop import",希望对你有所帮助

submit-apache-sqoop-jobs-by-using-curl

例子: 当使用单个映射器时,整个 selected 数据将由一个映射器按顺序传输。

 --query 'SELECT * FROM a WHERE $CONDITIONS' -m 1 

如果使用双引号需要添加\以避免替换。

 --query "SELECT * FROM a WHERE $CONDITIONS" -m 1 

当使用多个映射器时,selected 数据将在根据 --split-by 子句拆分并替换 $CONDITIONS 后由所有映射器并行传输。

 --query 'SELECT * FROM a WHERE $CONDITIONS' -m 3 --split-by a.column 

这是 HDInsight 和 Azure PG 确认的问题。