azure hdinsight参数被错误引用

ep6jt1vc  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(337)

我正在尝试用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配置单元查询中的双引号,但答案(指定作业名称)没有帮助
所以问题是:为什么查询中的空格会导致这个错误?
提前谢谢你的帮助

ukdjmx9f

ukdjmx9f1#

可以将命令另存为文件,并使用-file参数指向它。这将避免编码问题。

相关问题