0

我正在尝试使用带有 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 中的双引号,但答案(指定作业名称)没有帮助

那么问题来了:为什么查询中的空格会导致这个错误?

在此先感谢您的帮助

4

1 回答 1

0

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

于 2014-01-10T01:47:49.883 回答