我正在尝试用hadoop(hdinsight)使用azuresql数据库中的数据。
为了获取数据并执行作业,我在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'选择$条件是有效的,但工作不产生任何产出
使用@和双引号是行不通的
这个问题似乎类似于hadoop配置单元查询中的双引号,但答案(指定作业名称)没有帮助
所以问题是:为什么查询中的空格会导致这个错误?
提前谢谢你的帮助
1条答案
按热度按时间ukdjmx9f1#
可以将命令另存为文件,并使用-file参数指向它。这将避免编码问题。