6.17. 预计算

6.17.1. 建表语句

ldrill=' olap_name@combine1 olap_key@tx_year,tx_mon,tx_day olap_value@txnamt_combine_max,txnamt_combine_min,txnamt_combine_sum,txnamt_combine_count,age_combine_max,age_combine_min,age_combine_count '
  • 注意事项:

​ txnamt_combine_max 分隔为 txnamt 与 max 求最大值,其他的 min,sum,count类似,目前不支持avg ,注意只支持小写

6.17.2. 倒排表里存储什么样(单个索引里面的预计算)

select tx_year,tx_mon,tx_day,txnamt_combine_max,txnamt_combine_min,txnamt_combine_sum,txnamt_combine_count,age_combine_max,age_combine_min,age_combine_count from trade_tbl

 where partition like '202009'  and syskv='ldrill.name:combine1' and syskv='ldrill.scan:1024000'  limit 200

6.17.3. 二次汇聚得出最终结果

1. 按年月日

select tx_year,tx_mon,tx_day,count(*),max(txnamt_combine_max),min(txnamt_combine_min),sum(txnamt_combine_sum),sum(txnamt_combine_count),max(age_combine_max),min(age_combine_min),sum(age_combine_count) from trade_tbl

 where partition like '202009'  and syskv='ldrill.name:combine1' and syskv='ldrill.scan:1024000' 

group by tx_year,tx_mon,tx_day
 limit 200

2. 按年月

 select tx_year,tx_mon,count(*),max(txnamt_combine_max),min(txnamt_combine_min),sum(txnamt_combine_sum),sum(txnamt_combine_count),max(age_combine_max),min(age_combine_min),sum(age_combine_count) from trade_tbl

 where partition like '202009'  and syskv='ldrill.name:combine1' and syskv='ldrill.scan:1024000' 

group by tx_year,tx_mon
 limit 200
  • 注意事项:

    and syskv='ldrill.scan:1024000'  #是本次新增,用于动态调节ldrill的key扫描个数
    

6.17.4.预计算拦截功能

1.功能含义

含义:该功能的作用针对预计算中那些业务需要过滤的数据进行剔除功能,例如:无效数据或者偏差较大的年龄数据(年龄超过200岁或者为负值的数据,让其不参与预计算)。

2.自定义功能步骤

  1. 实现LdrillCombineUdaf接口:(lsql开放暴露的接口)
  • add()方法,主要将数据从索引payload中读取出来,
  • reset方法重制payload中读取的数据,
  • combine()将结果转为二进制返回上层
  1. 实现类示例:

最后打成jar包放在lsql的lib目录下。

  1. 配置文件更改:
config/site/lsql-site.properties(配置文件):
添加配置项:
格式:cl.OlapCombine.customParams={‘combine_intercept_key’:’class path’}
示例:
cl.OlapCombine.customParams={‘intercept_int16’:’demo.LdrillCombineUdafCommonCustomP’}   
其中:demo.LdrillCombineUdafCommonCustomP是示例类的全路径名
    intercept_int16:combine拦截的自定义参数key,用于在建表语句中标示.
  1. 建表语句:
create table xxx (
tx_year y_string_is
,tx_mon y_string_is    
,tx_day y_string_is
,txnamt y_long_is
,age y_int_is
)tableproperties(
ldrill=' olap_name@combine1 olap_key@tx_year,tx_mon,tx_day olap_value@txnamt_combine_max,txnamt_combine_min,txnamt_combine_sum,txnamt_combine_count combine_params@xxx1’
ldrill='olap_name@combine2  olap_key@age_combine_max,age_combine_min,
age_combine_count combine_params@xxx2)
  • 注意: 那么对于多字段增加预计算过滤条件的方法有: 1.要么用户分别定义多个ldrill.name,每个ldrill.name只包含一种字段,查询时用union all连接; 2.用户定义一个ldrill.name,里面包含不同的字段,自定义类里面实现对不同字段的区分;

  • 查询sql:

    ```sql select tx_year,tx_mon,tx_day,count(*),max(txnamt_combine_max),min(txnamt_combine_min),sum(txnamt_combine_sum),sum(txnamt_combine_count),max(age_combine_max),min(age_combine_min),sum(age_combine_count) from trade_tbl

    where partition like '202009' and syskv='ldrill.name:combine1' and syskv='ldrill.scan:1024000'

group by tx_year,tx_mon,tx_day

 limit 200 
```

3.65535拦截示例

针对当前列大于65535数值的预计算过滤。

  • 65535拦截建表配置示例:
create table xxx (
tx_year y_string_is
,tx_mon y_string_is    
,tx_day y_string_is
,txnamt y_long_is
,age y_int_is
)tableproperties(
ldrill=' olap_name@combine1 olap_key@tx_year,tx_mon,tx_day olap_value@txnamt_combine_max,txnamt_combine_min,txnamt_combine_sum,txnamt_combine_count,age_combine_max,age_combine_min,age_combine_count combine_params@intercept_power16'
)
  • 注意: intercept_power16内部已经实现,可以直接使用,拦截数值大于65535的数值
  • 查询sql:
select tx_year,tx_mon,tx_day,count(*),max(txnamt_combine_max),min(txnamt_combine_min),sum(txnamt_combine_sum),sum(txnamt_combine_count),max(age_combine_max),min(age_combine_min),sum(age_combine_count) from trade_tbl

 where partition like '202009'  and syskv='ldrill.name:combine1' and syskv='ldrill.scan:1024000' 


group by tx_year,tx_mon,tx_day

 limit 200

标红部分数据不参与预计算

  • 作用:
       执行上述2种方案的配置和建表操作后,入数据进行预计算时,会根据相应的k-v执行自定义预计算的实现类(LdrillCombineUdaf实现类),目前lsql内部额外定义一个类,主要用于过滤大于65535的数值;用户可以额外实现LdrillCombineUdaf接口,实现自定义过滤操作。 
    
Copyright © lucene.xin 2020 all right reserved修改时间: 2021-07-02 11:42:23

results matching ""

    No results matching ""