复制活动在“源”端遇到存储操作失败。存储执行的错误消息

时间:2016-12-24 13:16:55

标签: azure azure-storage

当我使用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\\'

我正确地获取数据。我不知道这个查询的错误是什么!

1 个答案:

答案 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。基本上,您需要做的是将SliceStartSliceEnd转换为ticks并将0添加到该值之前。我写了一篇关于你可能觉得有用的博客文章:http://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/