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

聚合函数

更新时间:2017-06-07 13:26:11

COUNT

函数定义:

  1. BIGINT COUNT([DISTINCT] value)

功能说明:

计算记录数。

参数说明:

value可以是任意的变量。

返回值:

bigint类型。

注意:

  • 目前StreamCompute不支持count(*)操作。
  • 指定distinct操作符可以使返回的结果中不包含重复的行。示例:
  1. SELECT COUNT(a.col1) FROM tbla a;

SUM

函数定义:

  1. BIGINT SUM([distinct] value)
  2. DOUBLE SUM([distinct] value)

功能说明:

计算汇总值。

参数说明:

value: 字符串或数字。

返回值:

输入参数为整型时返回bigint,否则返回double。

示例:

  1. SELECT SUM(distinct a.col1) FROM tbla a;

BLOOM_FILTER

函数定义:

  1. BIGINT bloom_filter(accuracy,max_count,[fresh_group],expr)

功能说明:

count(distinct)的布隆过滤器实现。

参数说明:

accuracy:double类型,在0到1之间,表示布隆过滤器的精度

max_count:bigint类型,可能出现的key的最大数量

fresh_group可以为任意类型,设置该字段后档过滤器满后会重新启用一个新的过滤器

expr为需要统计的字段。

返回值:

BIGINT类型,。

示例:

  1. SELECT bloom_filter(0.99, 10000, thedate, a.col1) FROM tbla a group by thedate;

CARDINALITY

函数定义:

  1. BIGINT cardinality(accuracy, expr)

功能说明:

count(distinct)的基数估计实现。

参数说明

accuracy: double类型,表示基数估计的精度。expr为需要统计的列。

返回值:

bigint类型。

示例:

  1. SELECT cardinality(0.99, a.col1) FROM tbla a;

MAX

函数定义:

  1. MAX(value)

功能说明:

计算最大值。

参数说明

除object以外的所有类型。

返回值

与value同类型。

示例

  1. SELECT MAX(a.col1) FROM tbla a;

MIN

函数定义:

  1. MIN(value)

功能说明:

计算最小值。

参数说明

除object以外的所有类型。

返回值

与value同类型。

示例:

  1. SELECT MIN(a.col1) FROM tbla a;

CONCAT_AGG

函数定义:

  1. concat_agg([linedelimiter,] value )

功能说明:

连接本批对应字段,默认连接符”\n”。

参数说明

连接符,目前只支持字符串常量对应字段。

返回值

连接完成后新生成的字符串。

示例:

  1. SELECT concat_agg(',', a.col1) FROM tbla a;

CONTEXT

函数定义:

  1. T context(value: T)
  2. T context(distinct value: T)

功能说明:

context(value: T):获取本批的第一条数据

context(distinct value: T): 如果加了关键字distinct,表示基于该字段进行全局去重,只输出第一条

参数说明

可输入任意产生类型,只接受一个参数

返回值

返回值参数类型与输入参数类型一致

应用场景

在传统DB中,即使表定义了primary key,但是当表中的一条记录被多次修改时,也会产生多条binlog日志,通过实时采集和同步过来的数据里就包含了这条记录的多次更新。如何通过流计算此类数据呢?

比如交易订单表,假设订单id:order_id是primary key,交易状态有gmv、alipay等状态,如何按小时计算状态为alipay的订单数和成交金额:

  1. select date_format(pay_time, 'yyyyMMddHH'), count(1) as order_cnt, sum(ali_fee) as ali_fee from
  2. ( select context(distinct order_id) as order_id, context(gmt_modify) as pay_time, context(ali_fee) as ali_fee
  3. from pay_order where status = 'alipay' group by order_id
  4. ) t group by date_format(pay_time, 'yyyyMMddHH')
  5. ;
本文导读目录