我正在尝试使用带有 Hadoop (HDInsight) 的 Azure SQL 数据库中的数据。
为了获取数据并执行作业,我在 C# 控制台程序中运行以下代码:
var jobClient = JobSubmissionClientFactory.Connect(creds);
//Setup the sqoop job
string query = "import --connect \"jdbc:sqlserver://...:1433;database=...;user=...;password=...;\" --jobname testname123 --query \"SELECT * FROM HouseDatas WHERE $CONDITIONS\" --split-by ID --target-dir asv://...@....blob.core.windows.net/Input/" + Job_ID + "/";
var sqoopJob = new SqoopJobCreateParameters()
{
Command = query,
StatusFolder = "asv://...@....blob.core.windows.net/Input/sqoop_status/" + Job_ID + "/",
};
错误信息:
Unhandled Exception: Microsoft.Hadoop.Client.HttpLayerException: Request failed with code: BadRequest
Content:("error":"Passed in parameter is incorrectly quoted: \"SELECT")
at Microsoft.WindowsAzure...
...
一些注意事项:
- 它在没有 --query 参数的情况下工作,即如果我只是选择整个表
- 如果在 Powershell 中执行该命令有效
- 如果查询中没有空格(即 --query \"SELECT\" )没有错误,但显然这不是很有用
- 单引号 (--query 'SELECT ... $Conditions' ) 有效,但该作业不会产生任何输出
- 使用 @ 和双引号不起作用
- 该问题似乎类似于Hadoop Hive Query 中的双引号,但答案(指定作业名称)没有帮助
那么问题来了:为什么查询中的空格会导致这个错误?
在此先感谢您的帮助