【问题标题】:data being overwritten when outputting data from stream analytics to powerbi将数据从流分析输出到 powerbi 时被覆盖的数据
【发布时间】:2018-12-20 11:07:02
【问题描述】:

最近我一直在使用 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 日的工作开始时间。由于我对直到今天的统计数据感兴趣,因此我没有包含日期​​间隔,因此我希望看到 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: 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

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

我错过了什么?是我的查询吗?

【问题讨论】:

    标签: azure powerbi azure-stream-analytics


    【解决方案1】:

    您似乎正在流式传输到Streaming dataset。流式数据集不会将数据存储在数据库中,而是仅保留最后一小时的数据。如果您想保持数据推送到它,那么您必须在创建数据集时启用Historic data analysis 选项:

    这将创建具有基本 FIFO 保留策略的 PushStreaming 数据集(又名混合)(即保留大约 200k-210k 条记录)。

    【讨论】:

    • 首先,感谢您的回复和建议。我只能按照我的链接 (docs.microsoft.com/en-us/azure/stream-analytics/…) 中的说明创建 PowerBI 的输出接收器。据此,这已经在 PushStreaming 模式下创建了一个数据集: defaultRetentionPolicy: BasicFIFO: Data is FIFO,最大有 200,000 行。 defaultMode:pushStreaming:数据集支持流式切片和​​传统的基于报告的视觉效果(也称为推送)。
    【解决方案2】:

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

    如果是正确的类型,请您澄清以下内容:

    1. 您的数据架构是否发生了变化?例如,如果您发送数据{a: 1, b: 2},然后发送{c: 3, d: 4},Azure 流分析将尝试更改表的架构,这会使旧数据失效。

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

    【讨论】:

    • 您好,感谢您的贡献。我似乎无法在我的数据集中找到该属性。我通过app.powerbi.com 使用网络界面。我通过app.powerbi.com 制作数据集图表来确认行数。此数据集链接到我登录的帐户,并在我登录时显示在左侧的“数据集”列表中。我通过在上方菜单栏中选择“探索”,然后选择“显示数据”和“查看记录”来确认记录数。但看起来我解决了 - 请看我的答案。
    【解决方案3】:

    看起来我的查询是问题所在。我不得不使用 TUMBLINGWINDOW(day,1) 而不是 System.TimeStamp
    TUMBLINGWINDOWSystem.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 日到现在都产生了预期的输出,没有数据被覆盖。

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      相关资源
      最近更新 更多