我从performancecounterstable使用Timestamp列查询数据时会遇到错误,复制活动满足"源"侧的存储操作故障。存储执行中的错误消息:远程服务器返回错误:(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时,没有时间戳: CounterName eq \'\Process(WaWorkerHost)\% Processor Time\' or CounterName eq \'\Memory\Available MBytes\'
我正在正确获取数据。我不知道此查询的错误!
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
。从本质上讲,您要做的是将SliceStart
和SliceEnd
转换为ticks,并将0
预留为该值。我写了一篇博客文章,您可能会发现有用:http://gauravmantri.com/2012/02/17/effective-waye----fetching-dingnostics-dainsostics-data-data-from-windows-windows-azure-diarostics-table-hint-use-partitionKey/.