最近,我一直在使用PowerBI作为输出接收器来处理流分析查询。我做了一个简单的查询,检索一段时间内我们网站请求的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日的作业开始时间。因为我对到今天为止的统计数据很感兴趣,所以我没有包括日期间隔,所以我希望看到从2018年9月3日到现在(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: BasicFIFO:数据为先进先出,最大为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
编辑:我已经根据https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-quick-create-portal创建了流输入源。我也可以创建一个引用输入,但这会使我的查询失效,因为APPLY和GROUP BY不受支持,而且我还认为流输入是我想要的,根据https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-add-inputs。
我遗漏了什么?是我的问题吗?
发布于 2019-01-04 16:24:49
看起来问题出在我的问题上。我不得不用TUMBLINGWINDOW(day,1)代替System.TimeStamp.
TUMBLINGWINDOW和System.TimeStamp在前端产生完全相同的图表输出,但在后端似乎以不同的方式处理。这没有以任何方式反映到前端,所以这是令人困惑的。我怀疑在后端发生了一些事情,这是由于不使用TUMBLINGWINDOW时处理查询的方式造成的,并且您碰巧比预期更早地达到了每个数据集200k行的限制。下面的查询就是生成预期结果的查询。
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日到现在的预期输出,数据没有被覆盖。
发布于 2018-12-20 19:30:12
看起来您正在流式传输到 dataset。流式数据集不会将数据存储在数据库中,而是只保留最后一个小时的数据。如果您希望将数据推送到其中,则必须在创建数据集时启用Historic data analysis
选项:
这将创建PushStreaming dataset (也称为混合)和basicFIFO保留策略(即保留了大约200k-210k条记录)。
发布于 2019-01-04 07:31:46
你说得对,Azure Stream Analytics应该创建一个"PushStreaming“或”混合“数据集。你能确认你的数据集被正确地配置为“混合”(你甚至可以在创建as shown here之后检查这个属性)吗?
如果是正确的类型,请您澄清以下几点:
{a: 1, b: 2}
,然后发送{c: 3, d: 4}
,Azure流分析将尝试更改表的架构,这可能会使较旧的数据无效。https://stackoverflow.com/questions/53867459
复制相似问题