27、Flink 的SQL之SELECT (窗口聚合)介绍及详细示例(4)

news2025/2/24 5:33:59

Flink 系列文章

1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接

13、Flink 的table api与sql的基本概念、通用api介绍及入门示例
14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性
15、Flink 的table api与sql之流式概念-详解的介绍了动态表、时间属性配置(如何处理更新结果)、时态表、流上的join、流上的确定性以及查询配置
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及FileSystem示例(1)
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例(2)
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Kafka示例(3)
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及JDBC示例(4)

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)

20、Flink SQL之SQL Client: 不用编写代码就可以尝试 Flink SQL,可以直接提交 SQL 任务到集群上

22、Flink 的table api与sql之创建表的DDL
24、Flink 的table api与sql之Catalogs

26、Flink 的SQL之概览与入门示例
27、Flink 的SQL之SELECT (select、where、distinct、order by、limit、集合操作和去重)介绍及详细示例(1)
27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例(2)
27、Flink 的SQL之SELECT (窗口函数)介绍及详细示例(3)
27、Flink 的SQL之SELECT (窗口聚合)介绍及详细示例(4)

30、Flink SQL之SQL 客户端(通过kafka和filesystem的例子介绍了配置文件使用-表、视图等)

41、Flink之Hive 方言介绍及详细示例
42、Flink 的table api与sql之Hive Catalog
43、Flink之Hive 读写及详细验证示例
44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示例–网上有些说法好像是错误的


文章目录

  • Flink 系列文章
  • 一、Window TVF Aggregation
    • 1、Windowing TVFs窗口函数
      • 1)、TUMBLE滚动窗口示例
      • 2)、HOP滑动窗口示例
      • 3)、CUMULATE累积窗口示例
    • 2、GROUPING SETS分组集介绍及示例
      • 1)、ROLLUP介绍及示例
      • 2)、CUBE介绍及示例
    • 3、Selecting Group Window Start and End Timestamps
    • 4、Cascading Window Aggregation(级联窗口聚合)介绍及示例
  • 二、Group Window Aggregation
    • 1、Group Window Functions
    • 2、Time Attributes
    • 3、Selecting Group Window Start and End Timestamps
    • 4、组窗口聚合示例


本文介绍了Flink 的窗口聚合(TVF函数、分组集的rollup和cube、级联窗口聚合)和不推荐使用的组窗口聚合及具体的示例验证过程。
本文依赖flink和kafka集群能正常使用。
本文的示例是在Flink 1.17版本中验证的。

一、Window TVF Aggregation

窗口聚合在包含“window_start”和“window_end”列的 GROUP BY 子句中定义,该子句应用了 Windowing TVF 的关系。就像使用常规 GROUP BY 子句的查询一样,具有按窗口聚合分组的查询将计算每个组一个结果行。

-----语法
SELECT ...
FROM <windowed_table> -- relation applied windowing TVF
GROUP BY window_start, window_end, ...

----示例
Flink SQL> SELECT window_start, window_end, sum(price)
>   FROM TABLE(
>     TUMBLE(TABLE orders, DESCRIPTOR(proctime),INTERVAL '5' MINUTES))
>   GROUP BY window_start, window_end;
+----+-------------------------+-------------------------+------------------------------------------+
| op |            window_start |              window_end |                                   EXPR$2 |
+----+-------------------------+-------------------------+------------------------------------------+
| +I | 2023-09-19 10:40:00.000 | 2023-09-19 10:45:00.000 |                                  1428.02 |


与连续表上的其他聚合不同,窗口聚合不发出中间结果,而只发出最终结果,即窗口末尾的总聚合。此外,窗口聚合在不再需要时会清除所有中间状态。

1、Windowing TVFs窗口函数

Flink 支持 TUMBLE、HOP 和 CUMULATE 类型的窗口聚合。在流式处理模式下,窗口表值函数的时间属性字段必须位于事件或处理时间属性上。有关更多窗口函数信息,请参阅Windowing TVF。在批处理模式下,窗口表值函数的时间属性字段必须是 TIMESTAMP 或 TIMESTAMP_LTZ 类型的属性。

1)、TUMBLE滚动窗口示例

该示例请参考 27、Flink 的SQL之SELECT (窗口函数)介绍及详细示例(3)中的
1)、示例1-使用滚动窗口查询、统计(表不含主键)
示例。

2)、HOP滑动窗口示例

该示例请参考 27、Flink 的SQL之SELECT (窗口函数)介绍及详细示例(3)中的
1)、示例1-使用滚动窗口查询、统计(表不含主键)
示例。

3)、CUMULATE累积窗口示例

该示例请参考 27、Flink 的SQL之SELECT (窗口函数)介绍及详细示例(3)中的
1)、示例1-使用累积窗口查询、统计
示例。

2、GROUPING SETS分组集介绍及示例

窗口聚合还支持分组集语法。分组集允许比标准 GROUP BY 描述的操作更复杂的分组操作。行按每个指定的分组集单独分组,并为每个组计算聚合,就像简单的 GROUP BY 子句一样。

具有 GROUPING SETS 的窗口聚合要求window_start列和window_end列都必须位于 GROUP BY 子句中,而不是在 GROUPING SETS 子句中。


SELECT window_start, window_end, u_id, SUM(price) as price
  FROM TABLE(
    TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
  GROUP BY window_start, window_end, GROUPING SETS ((u_id), ());
  

GROUPING SETS 的每个子列表可以指定零个或多个列或表达式,其解释方式与直接在 GROUP BY 子句中使用的方式相同。空分组集意味着所有行都聚合到单个组,即使不存在输入行,也会输出该组。

对分组列或表达式的引用将替换为结果行中的 null 值,用于未显示这些列的分组集。

  • 具体示例如下

------1、建表
Flink SQL> CREATE TABLE orders3 (
>     `id`    STRING,
>      u_id   STRING,
>      item   STRING,
>     price       DECIMAL(32,2),
>     proctime as PROCTIME()
> ) WITH (
>   'connector' = 'kafka',
>   'topic' = 'orders3_topic',
>   'properties.bootstrap.servers' = '192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092',
>   'properties.group.id' = 'testGroup',
>   'scan.startup.mode' = 'earliest-offset',
>   'format' = 'csv'
> );
[INFO] Execute statement succeed.

------2、查询表数据
Flink SQL> select * from orders3;
+----+--------------------------------+--------------------------------+--------------------------------+------------------------------------+-------------------------+
| op |                             id |                           u_id |                           item |                              price |                proctime |
+----+--------------------------------+--------------------------------+--------------------------------+------------------------------------+-------------------------+
| +I |                              1 |                              5 |                           alan |                              18.00 | 2023-09-20 10:30:59.135 |
| +I |                              2 |                              3 |                       alanchan |                              23.80 | 2023-09-20 10:31:13.183 |
| +I |                              3 |                              1 |                           chan |                              32.66 | 2023-09-20 10:31:19.950 |
| +I |                              4 |                              3 |                         iphone |                              22.88 | 2023-09-20 10:31:26.222 |
| +I |                              5 |                              6 |                            usb |                              26.80 | 2023-09-20 10:31:32.627 |
| +I |                              6 |                              3 |                             hd |                             100.80 | 2023-09-20 10:31:39.398 |
| +I |                              7 |                              1 |                             tv |                            4002.88 | 2023-09-20 10:31:45.901 |


------3、分组集示例,按照u_id创建组集和空分组集(示例运行需要一点时间才能出结果)

Flink SQL> SELECT window_start, window_end, u_id, SUM(price) as price
>   FROM TABLE(
>     TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
>   GROUP BY window_start, window_end, GROUPING SETS ((u_id), ());
+----+-------------------------+-------------------------+--------------------------------+------------------------------------------+
| op |            window_start |              window_end |                           u_id |                                    price |
+----+-------------------------+-------------------------+--------------------------------+------------------------------------------+
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              5 |                                    18.00 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              6 |                                    26.80 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              1 |                                  4035.54 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              3 |                                   147.48 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                         <NULL> |                                  4227.82 |


1)、ROLLUP介绍及示例

ROLLUP 是用于指定常见类型的分组集的速记表示法(shorthand notation)。它表示给定的表达式列表和列表的所有前缀,包括空列表。

使用 ROLLUP 的窗口聚合要求window_start列和window_end列都必须位于 GROUP BY 子句中,而不是在 ROLLUP 子句中。

表数据参考本章节中关于orders3的数据

下面两个查询是等效的。

-----ROLLUP 
SELECT window_start, window_end, u_id, SUM(price) as price
FROM TABLE(
    TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
GROUP BY window_start, window_end, ROLLUP (u_id);

-----GROUPING SETS 
SELECT window_start, window_end, u_id, SUM(price) as price
  FROM TABLE(
    TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
  GROUP BY window_start, window_end, GROUPING SETS ((u_id), ());
  • ROLLUP和GROUPING SETS 验证结果
-----ROLLUP 
Flink SQL> SELECT window_start, window_end, u_id, SUM(price) as price
> FROM TABLE(
>     TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
> GROUP BY window_start, window_end, ROLLUP (u_id);
+----+-------------------------+-------------------------+--------------------------------+------------------------------------------+
| op |            window_start |              window_end |                           u_id |                                    price |
+----+-------------------------+-------------------------+--------------------------------+------------------------------------------+
| +I | 2023-09-20 10:50:00.000 | 2023-09-20 11:00:00.000 |                              5 |                                    18.00 |
| +I | 2023-09-20 10:50:00.000 | 2023-09-20 11:00:00.000 |                              6 |                                    26.80 |
| +I | 2023-09-20 10:50:00.000 | 2023-09-20 11:00:00.000 |                              1 |                                  4035.54 |
| +I | 2023-09-20 10:50:00.000 | 2023-09-20 11:00:00.000 |                              3 |                                   147.48 |
| +I | 2023-09-20 10:50:00.000 | 2023-09-20 11:00:00.000 |                         <NULL> |                                  4227.82 |

-----GROUPING SETS 
Flink SQL> SELECT window_start, window_end, u_id, SUM(price) as price
>   FROM TABLE(
>     TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
>   GROUP BY window_start, window_end, GROUPING SETS ((u_id), ());
+----+-------------------------+-------------------------+--------------------------------+------------------------------------------+
| op |            window_start |              window_end |                           u_id |                                    price |
+----+-------------------------+-------------------------+--------------------------------+------------------------------------------+
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              5 |                                    18.00 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              6 |                                    26.80 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              1 |                                  4035.54 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                              3 |                                   147.48 |
| +I | 2023-09-20 10:30:00.000 | 2023-09-20 10:40:00.000 |                         <NULL> |                                  4227.82 |

2)、CUBE介绍及示例

CUBE 是用于指定常见类型的分组集的速记表示法(shorthand notation )。它表示给定的列表及其所有可能的子集 - 幂集(power set,所谓幂集,就是原集合中所有的子集(包括全集和空集)构成的集族)。

使用 CUBE 进行窗口聚合时,window_start列和window_end列都必须位于 GROUP BY 子句中,而不是 CUBE 子句中。

表数据参考本章节中关于orders3的数据

以下两个查询是等效的。

----cube 写法
SELECT window_start, window_end, item, u_id, SUM(price) as price
  FROM TABLE(
    TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
  GROUP BY window_start, window_end, CUBE (u_id, item);

---GROUPING SETS 写法
SELECT window_start, window_end, item, u_id, SUM(price) as price
  FROM TABLE(
    TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
  GROUP BY window_start, window_end, GROUPING SETS (
      (u_id, item),
      (u_id),
      (item),
      ()
)
  • CUBE 和 GROUPING SETS 验证
Flink SQL> SELECT window_start, window_end, item, u_id, SUM(price) as price
>   FROM TABLE(
>     TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
>   GROUP BY window_start, window_end, CUBE (u_id, item);
+----+-------------------------+-------------------------+--------------------------------+--------------------------------+------------------------------------------+
| op |            window_start |              window_end |                           item |                           u_id |                                    price |
+----+-------------------------+-------------------------+--------------------------------+--------------------------------+------------------------------------------+
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                           alan |                              5 |                                    18.00 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                             tv |                         <NULL> |                                  4002.88 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                             tv |                              1 |                                  4002.88 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                             hd |                         <NULL> |                                   100.80 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                             hd |                              3 |                                   100.80 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                            usb |                         <NULL> |                                    26.80 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                         <NULL> |                              6 |                                    26.80 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                            usb |                              6 |                                    26.80 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                         iphone |                         <NULL> |                                    22.88 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                         iphone |                              3 |                                    22.88 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                           chan |                         <NULL> |                                    32.66 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                         <NULL> |                              1 |                                  4035.54 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                           chan |                              1 |                                    32.66 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                       alanchan |                         <NULL> |                                    23.80 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                         <NULL> |                              3 |                                   147.48 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                       alanchan |                              3 |                                    23.80 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                         <NULL> |                         <NULL> |                                  4227.82 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                           alan |                         <NULL> |                                    18.00 |
| +I | 2023-09-20 11:00:00.000 | 2023-09-20 11:10:00.000 |                         <NULL> |                              5 |                                    18.00 |


Flink SQL> SELECT window_start, window_end, item, u_id, SUM(price) as price
>   FROM TABLE(
>     TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '10' MINUTES))
>   GROUP BY window_start, window_end, GROUPING SETS (
>       (u_id, item),
>       (u_id),
>       (item),
>       ()
> );
+----+-------------------------+-------------------------+--------------------------------+--------------------------------+------------------------------------------+
| op |            window_start |              window_end |                           item |                           u_id |                                    price |
+----+-------------------------+-------------------------+--------------------------------+--------------------------------+------------------------------------------+
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                           alan |                              5 |                                    18.00 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                             tv |                         <NULL> |                                  4002.88 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                             tv |                              1 |                                  4002.88 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                             hd |                         <NULL> |                                   100.80 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                             hd |                              3 |                                   100.80 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                            usb |                         <NULL> |                                    26.80 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                         <NULL> |                              6 |                                    26.80 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                            usb |                              6 |                                    26.80 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                         iphone |                         <NULL> |                                    22.88 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                         iphone |                              3 |                                    22.88 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                           chan |                         <NULL> |                                    32.66 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                         <NULL> |                              1 |                                  4035.54 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                           chan |                              1 |                                    32.66 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                       alanchan |                         <NULL> |                                    23.80 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                         <NULL> |                              3 |                                   147.48 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                       alanchan |                              3 |                                    23.80 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                         <NULL> |                         <NULL> |                                  4227.82 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                           alan |                         <NULL> |                                    18.00 |
| +I | 2023-09-20 11:10:00.000 | 2023-09-20 11:20:00.000 |                         <NULL> |                              5 |                                    18.00 |

3、Selecting Group Window Start and End Timestamps

可以使用分组的window_start和window_end列选择组窗口的开始和结束时间戳。

4、Cascading Window Aggregation(级联窗口聚合)介绍及示例

window_start列和window_end列是常规时间戳列,而不是时间属性。因此,它们不能用作后续基于时间的操作中的时间属性。为了传播时间属性,您需要另外window_time列添加到 GROUP BY 子句中。window_time是Windowing TVF 生成的第三列,它是分配窗口的时间属性。将window_time添加到 GROUP BY 子句中window_time也可以选择组键(group key)。然后,以下查询可以将此列用于后续基于时间的操作,例如级联窗口聚合和窗口 TopN。

下面显示了一个级联窗口聚合,其中第一个窗口聚合传播第二个窗口聚合的时间属性。
测试表数据使用上述中orders3的表数据。

  • 建立视图
-- 5分钟的滚动窗口
CREATE VIEW window1 AS
-- 注意:window start 和 window end 字段是windows TVF内置的且是可选的,如果它们出现在子句中,则需要使用别名,以防止名称与外部窗口 TVF 的window start 和 window end字段冲突
SELECT window_start as window_5mintumble_start, window_end as window_5mintumble_end, window_time as rowtime, SUM(price) as partial_price
  FROM TABLE(
    TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '5' MINUTES))
  GROUP BY u_id, window_start, window_end, window_time;


-----------创建视图示例
Flink SQL> CREATE VIEW window1 AS
> SELECT window_start as window_5mintumble_start, window_end as window_5mintumble_end, window_time as rowtime, SUM(price) as partial_price
>   FROM TABLE(
>     TUMBLE(TABLE orders3, DESCRIPTOR(proctime), INTERVAL '5' MINUTES))
>   GROUP BY u_id, window_start, window_end, window_time;

  • 查询视图
-- 第一个10分钟滚动窗口
SELECT window_start, window_end, SUM(partial_price) as total_price
  FROM TABLE(
      TUMBLE(TABLE window1, DESCRIPTOR(rowtime), INTERVAL '10' MINUTES))
  GROUP BY window_start, window_end;
---------查询视图示例
Flink SQL> SELECT window_start, window_end, SUM(partial_price) as total_price
>   FROM TABLE(
>       TUMBLE(TABLE window1, DESCRIPTOR(rowtime), INTERVAL '10' MINUTES))
>   GROUP BY window_start, window_end;
+----+-------------------------+-------------------------+------------------------------------------+
| op |            window_start |              window_end |                              total_price |
+----+-------------------------+-------------------------+------------------------------------------+
| +I | 2023-09-20 15:00:00.000 | 2023-09-20 15:10:00.000 |                                  4227.82 |

二、Group Window Aggregation

Group Window Aggregation已弃用。建议使用更强大、更有效的Window TVF 聚合。

与Group Window Aggregation相比,Window TVF 聚合具有许多优点,包括:
1、具有性能调整中提到的所有性能优化。
2、支持标准的Grouping set语法。
3、可以在窗口聚合结果后应用Window TopN。
4、等等

组窗口聚合在 SQL 查询的 GROUP BY 子句中定义。就像使用常规 GROUP BY 子句的查询一样,具有包含组窗口(group windows)函数的 GROUP BY 子句的查询会为每个组计算一个结果行。批处理表和流式处理表上的 SQL 支持以下组窗口(group windows)函数。

1、Group Window Functions

在这里插入图片描述

2、Time Attributes

在流式处理模式下,组窗口函数的time_attr参数必须引用指定行的处理时间或事件时间的有效时间属性。
在批处理模式下,组窗口函数的time_attr参数必须是 TIMESTAMP 类型的属性。

3、Selecting Group Window Start and End Timestamps

可以使用以下辅助功能选择组窗口的开始和结束时间戳以及时间属性:
在这里插入图片描述

必须使用与 GROUP BY 子句中的组窗口(group window)函数完全相同的参数调用辅助函数。

4、组窗口聚合示例

以下示例演示如何使用流式处理表上的组窗口指定 SQL 查询。

----1、表结构
CREATE TABLE orders3 (
    `id`    STRING,
     u_id   STRING,
     item   STRING,
    price       DECIMAL(32,2),
    proctime as PROCTIME()
) WITH (
  'connector' = 'kafka',
  'topic' = 'orders3_topic',
  'properties.bootstrap.servers' = '192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092',
  'properties.group.id' = 'testGroup',
  'scan.startup.mode' = 'earliest-offset',
  'format' = 'csv'
);

----2、数据
Flink SQL> select * from orders3;
+----+--------------------------------+--------------------------------+--------------------------------+------------------------------------+-------------------------+
| op |                             id |                           u_id |                           item |                              price |                proctime |
+----+--------------------------------+--------------------------------+--------------------------------+------------------------------------+-------------------------+

| +I |                              1 |                              5 |                           alan |                              18.00 | 2023-09-20 15:49:32.377 |
| +I |                              2 |                              3 |                       alanchan |                              23.80 | 2023-09-20 15:49:32.377 |
| +I |                              3 |                              1 |                           chan |                              32.66 | 2023-09-20 15:49:32.377 |
| +I |                              4 |                              3 |                         iphone |                              22.88 | 2023-09-20 15:49:32.377 |
| +I |                              5 |                              6 |                            usb |                              26.80 | 2023-09-20 15:49:32.377 |
| +I |                              6 |                              3 |                             hd |                             100.80 | 2023-09-20 15:49:32.377 |
| +I |                              7 |                              1 |                             tv |                            4002.88 | 2023-09-20 15:49:32.377 |

----3、group window aggregation 示例
Flink SQL> SELECT
>   u_id,
>   TUMBLE_START(proctime, INTERVAL '5' HOUR) AS wStart,
>   SUM(price) 
> FROM orders3
> GROUP BY
>   TUMBLE(proctime, INTERVAL '5' HOUR),
>   u_id;
+----+--------------------------------+-------------------------+------------------------------------------+
| op |                           u_id |                  wStart |                                   EXPR$2 |
+----+--------------------------------+-------------------------+------------------------------------------+
| +I |                              5 | 2023-09-20 15:00:00.000 |                                    18.00 |
| +I |                              6 | 2023-09-20 15:00:00.000 |                                    26.80 |
| +I |                              1 | 2023-09-20 15:00:00.000 |                                  4035.54 |
| +I |                              3 | 2023-09-20 15:00:00.000 |                                   147.48 |


以上,介绍了Flink 的窗口聚合(TVF函数、分组集的rollup和cube、级联窗口聚合)和不推荐使用的组窗口聚合及具体的示例验证过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1027900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人中的数值优化(十七)—— 锥与对称锥

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

http的网站进行访问时候自动跳转至https

通常情况下我们是用的都是http的路径&#xff0c;对于https的使用也很少&#xff0c;但是随着https的普及越来越多的域名访问需要用到https的&#xff0c;这个我们就演示怎么设置在我们对一个http的网站进行访问时候自动跳转至https下。 用到的工具及软件: 系统&#xff1a;wi…

规划基础知识

1 规划简介 在规划中&#xff0c;我们通过结合高精地图&#xff0c;定位和预测来构建车辆轨迹。 规划的第一步就是路线导航&#xff0c;侧重于如何从地图上的A前往B&#xff0c;在进行路径规划时&#xff0c;将地图数据作为输入&#xff0c;并输出可行驶路径。 在Apollo中&…

亚马逊商品详情数据接口

亚马逊商品详情数据接口可以用于获取商品详情信息&#xff0c;包括但不限于商品ID、商品标题、商品描述等。这些信息可以用于多种用途&#xff0c;例如&#xff1a; 了解商品信息&#xff0c;帮助消费者做出购买决策。整合其他平台或网站的数据&#xff0c;提供全面的商品信息…

成集云 | 金蝶云星空与旺店通ERP集成(旺店通主管供应链)| 解决方案

源系统成集云目标系统 方案介绍 金蝶云星空是一款ERP企业管理软件&#xff0c;致力于为企业提供整体解决方案。金蝶财务软件种类功能齐全&#xff0c;能够全面满足企业的不同阶段、不同功能需求。帮助企业建立规范的业务流程&#xff0c;提升管理能力&#xff0c;降…

怎么设置IP白名单

IP白名单是一种网络安全机制&#xff0c;用于限制只允许特定的IP地址或IP地址范围通过访问控制。在本文中&#xff0c;我将详细解释IP白名单的概念、用途以及如何设置IP白名单。 **1. 什么是IP白名单&#xff1f;** IP白名单是一种访问控制列表&#xff0c;它允许或阻止特定的…

Django Web开发入门基础

官方有很详细的文档&#xff0c;但是看过几遍之后如果要翻找还是有点麻烦&#xff0c;本文算作是学习笔记&#xff0c;提取一些关键点记录下来&#xff0c;另附上官方教程 Writing your first Django app 注&#xff1a; 文中的指令使用py&#xff0c;是在Windows上&#xff0c…

室外配电箱防护等级总结、基础大样图

一、室外配电箱防护等级规范条文归纳&#xff1a; 1、《城市夜景照明设计规范》JGJ/T 163-2008&#xff0c;8.3.5&#xff1a; 照明设备所有带电部分应采用绝缘、遮拦或外护物保护&#xff0c;距地面2.8m以下的照明设备应使用工具才能打开外壳进行光源维护。室外安装照明配电箱…

OSCP系列靶场-Esay-Gaara保姆级

OSCP系列靶场-Esay-Gaara 目录 OSCP系列靶场-Esay-Gaara总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH弱口令爆破(待定)22-SSH手动登录尝试(无) 80-HT…

Android 应用上线注意事项

将 Android 应用上线到 Google Play 商店需要仔细注意一系列问题&#xff0c;以确保应用的质量、安全性和用户体验。以下是一些在 Android 应用上线过程中需要注意的关键问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

DBAPI安装教程

安装教程 请先下载安装包。默认账户admin/admin。 为了便于您理解安装的时候需要配置的参数&#xff0c;请您先学习日志监控相关的功能设计 本地部署单机版 依赖java环境&#xff0c;先自行在服务器安装jdk8&#xff0c;并配置环境变量下载安装包解压到需要安装的目录修改conf…

vue/react/node项目通过eslint检查语法规范

首先 我们打开终端 全局安装依赖 npm install -g eslint然后 以管理员身份运行项目终端 输入 eslint --init然后 这里 在初始化时会问我们想如何使用它? 分别对应 仅检查语法 检查语法并发现问题 检查语法、发现问题并强制执行代码样式 这里建议第二种 第三种肯定是不行的 …

el-date-picker改日期显示方式

效果&#xff1a; 代码&#xff1a; <template><div><el-date-picker v-model"selectedDate" type"date" input"handleDateChange"><template #default"{ date }"><span>{{ formatDate(date) }}</s…

PoE交换机出现不稳定的原因有哪些?

带有供电设备的PoE交换机给使用者带来了方便&#xff0c;因此被广泛应用。然而&#xff0c;很多使用商反映他们所使用的PoE交换机不稳定。那么&#xff0c;PoE交换机出现不稳定的原因有哪些&#xff1f; 首先需要考虑的是数据传输的距离。尽管PoE供电交换机具有方便灵活的特点&…

详解yolov1理论 代码

目标检测要解决的3大问题&#xff1a; 1、有没有&#xff1f; 图片中是否有要检测的物体&#xff1f;&#xff08;检测物体&#xff0c;判定前景背景&#xff09; 2、是什么&#xff1f; 这些物体分别是什么&#xff1f;&#xff08;检测到的物体是什么&#xff09; 3、在…

腾讯云16核服务器配置大全_CVM和轻量服务器汇总

腾讯云16核CPU服务器有哪些配置可以选择&#xff1f;可以选择标准型S6、标准型SA3、计算型C6或标准型S5等&#xff0c;目前标准型S5云服务器有优惠活动&#xff0c;性价比高&#xff0c;计算型C6云服务器16核性能更高&#xff0c;轻量16核32G28M带宽优惠价3468元15个月&#xf…

go语言 最小堆 最大堆 堆排序

建堆 调整 删除 先根据数组构建完全二叉树 从第一个非叶结点开始 调整为大跟堆&#xff0c;这里就是图里面的1结点开始调整 代码如下&#xff1a; func findKthLargest(nums []int, k int) int {heapSize : len(nums)buildMaxHeap(nums,heapSize)for i : len(nums) - 1; i &…

无涯教程-JavaScript - BINOM.DIST函数

描述 BINOM.DIST函数返回单个项二项式分布概率。 在具有固定数量的测试或试验的问题中使用BINOM.DIST。 当任何试验的输出只是成功或失败时 试验是独立的,并且 在整个实验中成功的概率不变的情况 语法 BINOM.DIST (number_s,trials,probability_s,cumulative)争论 Argu…

选择护眼台灯的标准?专家推荐台灯好物分享

自从护眼台灯成为学生书桌上最常见的照明灯具后&#xff0c;就经常能看到关于护眼台灯伤眼的信息。从根源上说&#xff0c;是各种不专业产品混杂在市场中&#xff0c;这种产品技术较差&#xff0c;而且为减少成本选择品质差的材料&#xff0c;但由于低廉的价格仍然吸引了众多消…

【FAQ】以服务方式启动安防监控系统EasyNVR程序,出现播放异常的原因排查与解决

EasyNVR安防视频监控平台的特点是基于RTSP/Onvif协议&#xff0c;将前端设备统一接入&#xff0c;在平台进行转码、直播、处理及分发&#xff0c;在智慧安防视频监控场景中&#xff0c;EasyNVR可实现实时监控、云端录像、检索与回放、云存储、告警、级联等视频能力&#xff0c;…