2017-04-12 42 views
1

是否可以“分页”Analytics API的结果?来自Azure Application Insights Analytics API的页面结果

如果我用下面的查询(通过HTTP POST)

{ 
"query":"customEvents | project customDimensions.FilePath, timestamp 
     | where timestamp > now(-100d) | order by timestamp desc | limit 25" 
} 

我得到高达10,000结果回一个结果集。有什么方法可以使用类似于事件API的$ skip的东西吗?就像“SKIP 75 TAKE 25”或其他什么来获得结果的第4页。

回答

2

[编辑:此答案现在已过时,已添加到查询语言row_number功能。这个答案留给历史的目的,如果有人遇到奇怪的查询,看起来像这个答案]

不是很容易

如果您可以使用/ events ODATA查询路径而不是/查询路径,它支持分页。但不是像你一样的自定义查询。

要得到的东西像寻呼机一样,你需要做一个复杂的查询,并使用summarizemakeList和您的查询创造一个rowNum字段,然后使用mvexpand再扩大的名单,然后由rowNum过滤。这是相当复杂的,不直观的,是这样的:

customEvents 
| project customDimensions.FilePath, timestamp 
| where timestamp > now(-100d) 
| order by timestamp desc 
// squishes things down to 1 row where each column is huge list of values 
| summarize filePath=makelist(customDimensions.FilePath, 1000000) 
    , timestamp=makelist(timestamp, 1000000) 
    // make up a row number, not sure this part is correct 
    , rowNum = range(1,count(strcat(filePath,timestamp)),1) 
// expands the single rows into real rows 
| mvexpand filePath,timestamp,rowNum limit 1000000 
| where rowNum > 0 and rowNum <= 100 // you'd change these values to page 

我相信已经有一个在appinsights UserVoice的请求,以支持分页运营商在查询语言。

这里的另一个假设是数据不会在您工作时在底层表中更改。如果新的数据将显示您的通话之间,像

  1. 给我行0-99
  2. 50个新行出现
  3. 给我行100-199

,则步骤3是实际上让你回来,你刚在步骤50个中重复的行1

1

有一个莫现在重新修正的方法,使用自上一个答案以来添加到查询语言的新运算符。

两个运营商都serializerow_number()

serialize确保数据是在一个形状和为了把与row_number()工作。有些人喜欢order by现有的运营商已经创建序列化数据。

还有prev()next()运算符可以从序列化结果中的前一行或下一行中获取值。

相关问题