副本 activity 在 'Source' 端遇到存储操作失败。来自存储执行的错误消息

Copy activity met storage operation failure at 'Source' side. Error message from storage execution

当我像这样使用时间戳列从 PerformanceCountersTable 查询数据时出现错误, 副本 activity 在 'Source' 端遇到存储操作失败。来自存储执行的错误消息:远程服务器返回错误:(400)错误请求。请求输入之一无效

这是我的管道 activity:

        "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 错误表示向 Table 服务提供了一些不正确的数据。在检查您的查询时

"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 和 date/time 值之间有一个 space。这可能会导致对 table 服务的请求失败并出现 400 错误。

请尝试删除 space。所以您的查询将是:

"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 值。这很糟糕,因为它会导致完整 table 扫描。而是在查询中使用 PartitionKey。本质上,您需要做的是将 SliceStartSliceEnd 转换为刻度并将 0 添加到该值之前。我已经写了一篇博客 post,您可能会觉得有用:http://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/