最近我一直在使用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输入是我想要的。
我想念什么?是我的查询吗?
答案 0 :(得分:0)
您似乎正在向Streaming dataset流式传输。流数据集不将数据存储在数据库中,而仅保留最后一小时的数据。如果要保持将数据压入其中,则在创建数据集时必须启用Historic data analysis
选项:
这将创建具有基本FIFO保留策略(即保留约20万至21万条记录)的 PushStreaming 数据集(也称为混合)。
答案 1 :(得分:0)
您正确的是,Azure Stream Analytics应该创建“ PushStreaming”或“ Hybrid”数据集。您是否可以确认您的数据集已正确配置为“混合”(即使在创建as shown here之后也可以检查此属性)?
如果是正确的类型,请说明以下内容:
您的数据架构是否更改?例如,如果先发送数据{a: 1, b: 2}
,然后发送{c: 3, d: 4}
,Azure Stream Analytics将尝试更改表的架构,这会使旧数据无效。
如何确认数据集中的行数?
答案 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日到现在一直产生预期的输出,而没有数据被覆盖。