全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
流计算

会话窗口

更新时间:2018-01-18 16:38:59

说明

session窗口分配器通过session活动来对元素进行分组,session窗口跟滚动窗口和滑动窗口相比,不会有重叠和固定的开始时间和结束时间的情况。相反,当它在一个固定的时间周期内不再收到元素,即非活动间隔产生,那个这个窗口就会关闭。一个session窗口通过一个session间隔来配置,这个session间隔定义了非活跃周期的长度。当这个非活跃周期产生,那么当前的session将关闭并且后续的元素将被分配到新的session窗口中去。定义会话时间窗口。每隔一段时间一个窗口,如果当前窗口间隔周期你没有操作,该窗口就会关闭,如果你的操作在间隔时间内窗口就不会关闭,例如间隔时间为30分钟,如果你的操作都在30分钟以内窗口就不会关闭,如果超过30分钟,那就关闭当前窗口,起了一个新的窗口。time_attr组窗口函数的参数必须引用一个有效的时间属性,该属性指定行的处理时间或事件时间。

会话

语法:

  1. SESSIONdateTimeinterval

注意:

在使用窗口函数时,一定要配置Event Time或Processing Time,

详情请参阅:窗口函数

案例

案例一:

  1. SELECT user_id,
  2. Session_start(rowtime, interval '12' hour) AS sStart,
  3. Session_end(rowtime, interval '12' hour) AS sEnd,
  4. SUM(amount)
  5. FROM orders
  6. GROUP BY SESSION(Rowtime(), interval '12' hour),
  7. user_id;

案例二:

测试数据

a(VARCHAR) b(VARCHAR) c(TIMESTAMP)
1 LiBai 2017-11-21 10:10:12
2 BaiJuYi 2017-11-21 10:10:12
3 DuFu 2017-11-21 10:10:10
4 DuFu 2017-11-21 10:10:11
1 LiBai 2017-11-21 10:10:12
2 BaiJuYi 2017-11-21 10:10:14
3 DuFu 2017-11-21 10:10:14
4 DuFu 2017-11-21 10:10:10

业务逻辑

  1. CREATE TABLE in_stream(
  2. a varchar,
  3. b varchar,
  4. c timeStamp,
  5. d as PROCTIME()
  6. --WATERMARK wk1 FOR c as withOffset(c, 2000)
  7. ) with (
  8. type='datahub',
  9. endPoint='http://10.101.200.197:9100',
  10. accessId='63wd3dpztlmbxxxxj94pxmm',
  11. accessKey='oRd30z7sxxxxJgii5qnyhg=',
  12. project='bayestest',
  13. topic='window'
  14. );
  15. CREATE TABLE rds_output(
  16. id varchar,
  17. c TIMESTAMP,
  18. f TIMESTAMP,
  19. cnt BIGINT,
  20. PRIMARY KEY(id)
  21. ) with (
  22. type = 'rds',
  23. url = 'jdbc:mysql://11.239.142.113:3306/test',
  24. tableName = 'event_time',
  25. userName = 'tesxxxt',
  26. password = '12xxxx'
  27. );
  28. INSERT INTO rds_output
  29. SELECT a AS id,
  30. SESSION_START(d, INTERVAL '0.01' SECOND) AS c,
  31. CAST(SESSION_END(d, INTERVAL '0.01' SECOND) AS TIMESTAMP) AS f,
  32. COUNT(a) AS cnt
  33. FROM in_stream
  34. GROUP BY SESSION(d, INTERVAL '0.01' SECOND), a

测试结果

id(varchar) c(TIMESTAMP) f(TIMESTAMP) cnt(BIGINT)
1 2017-12-01 16:44:48.64 2017-12-01 16:44:48.65 1
本文导读目录