当我使用Timestamp列从PerformanceCountersTable查询数据时,我收到错误, 复制活动在“源”端遇到存储操作失败。来自存储执行的错误消息:远程服务器返回错误:(400)错误请求。其中一个请求输入无效
这是我的管道活动:
"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时,没有Timestamp:
CounterName eq \\'\\Process(WaWorkerHost)\\% Processor Time\\' or CounterName eq \\'\\Memory\\Available MBytes\\'
我正确地获取数据。我不知道这个查询的错误是什么!
答案 0 :(得分:1)
400
错误表示向Table Service提供了一些不正确的数据。检查您的查询
"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
。基本上,您需要做的是将SliceStart
和SliceEnd
转换为ticks并将0
添加到该值之前。我写了一篇关于你可能觉得有用的博客文章:http://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/。