复制活动在"源"端遇到存储操作故障。来自存储执行的错误消息



我从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。从本质上讲,您要做的是将SliceStartSliceEnd转换为ticks,并将0预留为该值。我写了一篇博客文章,您可能会发现有用:http://gauravmantri.com/2012/02/17/effective-waye----fetching-dingnostics-dainsostics-data-data-from-windows-windows-azure-diarostics-table-hint-use-partitionKey/.

最新更新