将数据从流分析输出到powerbi时,数据将被覆盖

时间:2018-12-20 11:07:03

标签: azure powerbi azure-stream-analytics

最近我一直在使用PowerBI作为输出接收器来处理Stream Analytics查询。我做了一个简单的查询,该查询随时间检索了我们网站请求的HTTP响应代码总数,并按日期和响应代码进行了分组。 从拥有BLOB存储空间的存储帐户中检索输入数据。这是我的查询:

SELECT
    DATETIMEFROMPARTS(DATEPART(year,R.context.data.eventTime), DATEPART(month,R.context.data.eventTime),DATEPART(day,R.context.data.eventTime),0,0,0,0) as datum,     
    request.ArrayValue.responseCode,
    count(request.ArrayValue.responseCode)
INTO
  [requests-httpresponsecode]
FROM
  [cvweu-internet-pr-sa-requests] R TIMESTAMP BY R.context.data.eventTime
OUTER APPLY GetArrayElements(R.request) as request
GROUP BY DATETIMEFROMPARTS(DATEPART(year,R.context.data.eventTime), DATEPART(month,R.context.data.eventTime),DATEPART(day,R.context.data.eventTime),0,0,0,0), request.ArrayValue.responseCode, System.TimeStamp

由于自2018年9月3日开始连续导出以来,我选择的工作开始时间为2018年9月3日。由于我对直到今天的统计数据感兴趣,因此我不包括日期间隔,因此我希望看到3月3日的数据。 2018年9月至今(2018年12月20日)。作业运行正常,没有错误,我选择了PowerBI作为输出接收器。我立即看到图表从9月3日开始按天进行分组并计数。到目前为止,一切都很好。几天后,我注意到输出数据集不再从9月3日开始,而是从12月2日开始至今。显然数据正在被覆盖。

以下链接显示:

https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-power-bi-dashboard

defaultRetentionPolicy:基本FIFO:数据为FIFO,最多200,000行。

但是我的输出表没有近200.000行:

datum,count,responsecode
2018-12-02 00:00:00,332348,527387
2018-12-03 00:00:00,3178250,3282791
2018-12-04 00:00:00,3170981,4236046
2018-12-05 00:00:00,2943513,3911390
2018-12-06 00:00:00,2966448,3914963
2018-12-07 00:00:00,2825741,3999027
2018-12-08 00:00:00,1621555,3353481
2018-12-09 00:00:00,2278784,3706966
2018-12-10 00:00:00,3160370,3911582
2018-12-11 00:00:00,3806272,3681742
2018-12-12 00:00:00,4402169,3751960
2018-12-13 00:00:00,2924212,3733805
2018-12-14 00:00:00,2815931,3618851
2018-12-15 00:00:00,1954330,3240276
2018-12-16 00:00:00,2327456,3375378
2018-12-17 00:00:00,3321780,3794147
2018-12-18 00:00:00,3229474,4335080
2018-12-19 00:00:00,3329212,4269236
2018-12-20 00:00:00,651642,1195501

编辑:我已经根据创建了STREAM输入源。 https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-quick-create-portal。我也可以创建一个REFERENCE输入,但是由于不支持APPLY和GROUP BY,这使我的查询无效,而且我还认为根据https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-add-inputs,STREAM输入是我想要的。

我想念什么?是我的查询吗?

3 个答案:

答案 0 :(得分:0)

您似乎正在向Streaming dataset流式传输。流数据集不将数据存储在数据库中,而仅保留最后一小时的数据。如果要保持将数据压入其中,则在创建数据集时必须启用Historic data analysis选项:

enter image description here

这将创建具有基本FIFO保留策略(即保留约20万至21万条记录)的 PushStreaming 数据集(也称为混合)。

答案 1 :(得分:0)

您正确的是,Azure Stream Analytics应该创建“ PushStreaming”或“ Hybrid”数据集。您是否可以确认您的数据集已正确配置为“混合”(即使在创建as shown here之后也可以检查此属性)?

如果是正确的类型,请说明以下内容:

  1. 您的数据架构是否更改?例如,如果先发送数据{a: 1, b: 2},然后发送{c: 3, d: 4},Azure Stream Analytics将尝试更改表的架构,这会使旧数据无效。

  2. 如何确认数据集中的行数?

答案 2 :(得分:0)

好像是我的查询出了问题。我必须使用 TUMBLINGWINDOW(day,1)而不是 System.TimeStamp
TUMBLINGWINDOW System.TimeStamp 在前端产生完全相同的图表输出,但似乎在后端以不同的方式处理。这没有以任何方式反映到前端,因此令人困惑。我怀疑后端由于在不使用 TUMBLINGWINDOW 时处理查询的方式而发生了某些情况,并且您碰巧每数据集限制达到20万行的速度比预期的要早。下面的查询是产生预期结果的查询。

SELECT
    request.ArrayValue.responseCode,
    count(request.ArrayValue.responseCode),
    DATETIMEFROMPARTS(DATEPART(year,R.context.data.eventTime), DATEPART(month,R.context.data.eventTime),DATEPART(day,R.context.data.eventTime),0,0,0,0) as date     
INTO
  [requests-httpstatuscode]
FROM
  [cvweu-internet-pr-sa-requests] R TIMESTAMP BY R.context.data.eventTime
OUTER APPLY GetArrayElements(R.request) as request
GROUP BY DATETIMEFROMPARTS(DATEPART(year,R.context.data.eventTime), DATEPART(month,R.context.data.eventTime),DATEPART(day,R.context.data.eventTime),0,0,0,0),
        TUMBLINGWINDOW(day,1), 
        request.ArrayValue.responseCode

正如我们所说的那样,我的流分析工作运行顺利,并且从9月3日到现在一直产生预期的输出,而没有数据被覆盖。