大数据分析——Apache Doris(五十七)

318 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

 strleft(VARCHAR str)

它返回具有指定长度的字符串的左边部分,长度的单位为utf8字符

select strleft ( "Hello doris" , 5 **);
 strright(VARCHAR str)

它返回具有指定长度的字符串的右边部分, 长度的单位为utf8字符

select strright ( "Hello doris" , 5 **);

 聚合函数

 APPROX_COUNT_DISTINCT(expr)

返回类似于 COUNT(DISTINCT col) 结果的近似值聚合函数。

它比 COUNT 和 DISTINCT 组合的速度更快,并使用固定大小的内存,因此对于高基数的列可以使用更少的内存。

select city , approx_count_distinct ( user_id )  from site_visit group by city **;
 AVG([DISTINCT] expr)

用于返回选中字段的平均值

可选字段DISTINCT参数可以用来返回去重平均值

SELECT date ,  AVG ( cost )  FROM site_visit group by date ;****
SELECT date ,  AVG ( distinct cost )  FROM site_visit group by date ;
 BITMAP_UNION
步骤说明
1创建表
 CREATE TABLE pv_bitmap (  dt int ( 11 )  NULL COMMENT "" ,  page varchar ( 10 )  NULL COMMENT "" ,  user_id bitmap BITMAP_UNION NULL COMMENT "")  ENGINE**=OLAPAGGREGATE** KEY ( dt ,  page **)**COMMENT "OLAP"DISTRIBUTED BY HASH ( dt )  BUCKETS 2 ;
 注:当数据量很大时,最好为高频率的 bitmap_union 查询建立对应的 rollup 表
 ALTER TABLE pv_bitmap ADD ROLLUP pv ( page ,  user_id );
2插入数据
 insert into pv_bitmap values ( 20191206 ,  'xiaoxiang' ,  to_bitmap ( 101 ));       insert into pv_bitmap values ( 20191206 ,  'waimai' ,  to_bitmap ( 101 ));       insert into pv_bitmap values ( 20191207 ,  'xiaoxiang' ,  to_bitmap ( 101 ));       insert into pv_bitmap values ( 20191207 ,  'waimai' ,  to_bitmap ( 102 ));      insert into pv_bitmap values ( 20191208 ,  'xiaoxiang' ,  to_bitmap ( 101 ));        insert into pv_bitmap values ( 20191208 ,  'waimai' ,  to_bitmap ( 101 ));   
3查询数据
 BITMAP_UNION(expr) : 计算两个 Bitmap 的并集,返回值是序列化后的 Bitmap 值
 select bitmap_count ( bitmap_union ( user_id ))  from pv_bitmap ;
 BITMAP_COUNT(expr) : 计算 Bitmap 的基数值
 select bitmap_union_count ( user_id )  from pv_bitmap ;
 BITMAP_UNION_COUNT(expr): 和 BITMAP_COUNT(BITMAP_UNION(expr)) 等价
 BITMAP_UNION_INT(expr) : 和 COUNT(DISTINCT expr) 等价 (仅支持 TINYINT,SMALLINT 和 INT)
 select bitmap_union_int ( id )  from pv_bitmap ;
 COUNT([DISTINCT] expr)

用于返回满足要求的行的数目

select count (*)  from site_visit group by date **;
select count ( date )  from site_visit group by date ;
select count ( distinct date )  from site_visit group by date ;
 HLL_UNION_AGG(hll)

HLL是基于HyperLogLog算法的工程实现,用于保存HyperLogLog计算过程的中间结果

它只能作为表的value列类型、通过聚合来不断的减少数据量,以此来实现加快查询的目的

基于它得到的是一个估算结果,误差大概在1%左右,hll列是通过其它列或者导入数据里面的数据生成的

导入的时候通过hll_hash函数来指定数据中哪一列用于生成hll列,它常用于替代count distinct,通过结合rollup在业务上用于快速计算uv等

select HLL_UNION_AGG ( uv_set )  from test_uv ;****