2

是否可以“分页”来自 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 页。

4

2 回答 2

2

现在有一种更正确的方法可以做到这一点,使用自我之前的回答以来添加到查询语言中的新运算符。

两个运算符是serializerow_number()

serialize确保数据的形状和顺序与row_number(). 一些现有的运营商喜欢order by已经创建了序列化数据。

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

于 2017-07-10T17:29:45.203 回答
2

[编辑:这个答案现在已经过时了,row_number查询语言中添加了一个功能。如果有人遇到类似于此答案的奇怪查询,则此答案留作历史用途]

容易

如果您可以使用 /events ODATA 查询路径而不是 /query 路径,则支持分页。但不是像您那样真正的自定义查询。

要获得类似分页的东西,您需要进行复杂的查询,并在查询中使用summarizeandmakeList和 invent 一个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 用户语音上已经有一个请求,以支持查询语言中的寻呼运算符。

这里的另一个假设是,在您工作时,基础表中的数据不会发生变化。如果您的通话之间出现新数据,例如

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

那么第 3 步实际上是给您返回 50 个您在第 1 步中获得的重复行。

于 2017-04-12T18:27:23.983 回答