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 の Double quotes に似ているようですが、答え (ジョブ名の指定) は役に立ちませんでした

質問: クエリ内のスペースでこのエラーが発生するのはなぜですか?

よろしくお願いいたします。

4

1 に答える 1

0

コマンドをファイルとして保存し、 -File パラメータを使用して指定できます。これにより、エンコードの問題が回避されます。

于 2014-01-10T01:47:49.883 に答える