azure 如何在流分析的FROM子句中创建时间窗口而不仅仅是TIMESTAMP?

kupeojn6  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(130)

我的用户可以采取两种行动:
1.进入房间
1.离开房间
我正在使用Azure流分析,我的目标是创建一个进入房间但在接下来的30分钟内没有离开的用户表。数据具有以下结构:

  1. {
  2. user_id: 'user_id',
  3. event_name: 'Enter the room' | 'Leave the room',
  4. event_timestamp: 'yyyy-mm-dd hh:mi:ss'
  5. }

示例数据(事件中心流):
| 用户ID|活动名称|Event_timestamp|
| --|--|--|
| 一|进入房间|2023-09-02 12:00:00|
| B|进入房间|2023-09-02 12:10:00|
| C|进入房间|2023-09-02 12:20:00|
| 一|离开房间|2023-09-02 12:25:00|
| B|离开房间|2023-09-02 12:45:00|
所需输出(输出表):
| 用户ID|活动名称|Event_timestamp|
| --|--|--|
| B|进入房间|2023-09-02 12:10:00|
| C|进入房间|2023-09-02 12:20:00|
我尝试过使用窗口函数的功能,但是除了在FROM子句中定义的时间戳之外,它们不按任何参数分组。它导致创建时间窗口,而不考虑发生了什么事件或谁创建了事件。

xuo3flqw

xuo3flqw1#

您使用下面的查询。

  1. WITH enter_room AS (
  2. SELECT
  3. user_id,
  4. try_cast(event_timestamp as datetime) as entry_time,
  5. event_name
  6. FROM
  7. inputdata
  8. WHERE
  9. event_name = 'Enter the room'
  10. ),
  11. leave_room AS (
  12. SELECT
  13. user_id,
  14. try_cast(event_timestamp as datetime) AS exit_time,
  15. event_name
  16. FROM
  17. inputdata
  18. WHERE
  19. event_name = 'Leave the room'
  20. )
  21. SELECT
  22. e.user_id,
  23. e.event_name,
  24. e.entry_time as event_timestamp
  25. into outdata
  26. FROM enter_room e
  27. left JOIN leave_room l
  28. ON e.user_id = l.user_id
  29. AND
  30. DATEDIFF(minute, e, l) BETWEEN 0 AND 30
  31. WHERE DATEDIFF(minute,e.entry_time,l.exit_time) > 30 or DATEDIFF(minute,e.entry_time,l.exit_time) is NULL;

在这里,我将entry_timeexit_time放在不同的记录中,并以进入和退出时间之差超过30分钟或为空为条件将它们连接起来。
输出量:

展开查看全部

相关问题