2016-12-24 7 views
0

タイムスタンプ列を使用してPerformanceCountersTableからデータをクエリするときにエラーが発生しました。 コピー操作が 'ソース'側のストレージ操作に失敗しました。ストレージの実行中のエラーメッセージ:リモートサーバーからエラーが返されました:(400)Bad Request。 「ソース」側のコピー操作がストレージ操作に失敗しました。ストレージの実行中のエラーメッセージ

 "activities": [ 
      { 
       "type": "Copy", 
       "typeProperties": { 
        "source": { 
         "type": "AzureTableSource", 
         "azureTableSourceQuery": "$$Text.Format('(CounterName eq \\'\\Process(WaWorkerHost)\\% Processor Time\\' or CounterName eq \\'\\Memory\\Available MBytes\\') and Timestamp ge datetime \\'{0:yyyy-MM-ddTHH:mm:ssZ}\\' and Timestamp lt datetime \\'{1:yyyy-MM-ddTHH:mm:ssZ}\\'', SliceStart, SliceEnd)" 
        }, 
        "sink": { 
         "type": "SqlSink", 
         "writeBatchSize": 0, 
         "writeBatchTimeout": "00:00:00" 
        } 
       }, 
       "inputs": [ 
        { 
         "name": "MetricsDataVMCPUinput" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "MetricsDataVMCPUoutput" 
        } 
       ], 
       "policy": { 
        "timeout": "00:15:00", 
        "concurrency": 1, 
        "retry": 3 
       }, 
       "scheduler": { 
        "frequency": "Minute", 
        "interval": 15, 
        "style": "EndOfInterval" 
       }, 
       "name": "MetricsDataVMCPUactivity" 
      } 

私はこのようなAzuretablesourcequeryを変更

、タイムスタンプなし::私が正しくデータを取得しています CounterName eq \\'\\Process(WaWorkerHost)\\% Processor Time\\' or CounterName eq \\'\\Memory\\Available MBytes\\'

要求入力の1つは

はここに私のパイプラインの活動で有効ではありません。私はこのクエリのエラーを知りません!

答えて

1

400エラーは、不適切なデータがテーブルサービスに提供されていることを意味します。クエリ

"azureTableSourceQuery": "$$Text.Format('(CounterName eq \\'\\Process(WaWorkerHost)\\% Processor Time\\' or CounterName eq \\'\\Memory\\Available MBytes\\') and Timestamp ge datetime \\'{0:yyyy-MM-ddTHH:mm:ssZ}\\' and Timestamp lt datetime \\'{1:yyyy-MM-ddTHH:mm:ssZ}\\'', SliceStart, SliceEnd)" 

の検査に私はdatetime、日付/時刻値の間にスペースがあることに気づきました。これにより、400エラーで表サービスへの要求が失敗する可能性があります。

スペースを取ってみてください。だからあなたのクエリは次のようになります。私が気づい

"azureTableSourceQuery": "$$Text.Format('(CounterName eq \\'\\Process(WaWorkerHost)\\% Processor Time\\' or CounterName eq \\'\\Memory\\Available MBytes\\') and Timestamp ge datetime\\'{0:yyyy-MM-ddTHH:mm:ssZ}\\' and Timestamp lt datetime\\'{1:yyyy-MM-ddTHH:mm:ssZ}\\'', SliceStart, SliceEnd)" 

もう一つは、あなたがTimestamp値を照会していることです。これは完全なテーブルスキャンを引き起こすため、これは悪いことです。代わりにPartitionKeyを使用してください。基本的には、SliceStartSliceEndをダンプに変換し、その値の前に0を追加します。あなたが役に立つと思うかもしれないブログ投稿を書いた:http://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/

関連する問題