作家
登录

Apache Kylin中对上亿字符串的精确Count_Distinct示例

作者: 来源: 2017-05-11 12:23:18 阅读 我要评论

事实表

  1. hive> desc test_t_pbs_uv_fact; 
  2. OK 
  3. ad_id                   string  //维度 
  4. material_id             string   //维度 
  5. city_code               string  //维度 
  6. user_id                 string   //指标,须要精确Count Distinct 
  7. bid_request             bigint  //指标,SUM 
  8. device_bid_request      bigint      //指标,SUM 
  9. win                     bigint  //指标,SUM  
  10. ck                      bigint  //指标,SUM  
  11. pt                      string  //维度,日期,yyyy-MM-dd 
  12.   

该事实表一天的数据记录大年夜概1.5亿+,个中user_id为字符串,类似MD5后的字符串。

创建Model

在Kylin中创建名为lxw1234_uv_model的模型。

选择维度和指标字段:

如不雅营业中能接收1.22%的误差,那么肯定首选近似算法,因为它能节俭很多资本和时光。如不雅营业中必须应用精确去重,那么就看看本文的例子(针对上亿字符串的精确去重)。

创建Cube

创建名为lxw1234_uv_cube的Cube,个中,指标定义如下:

其他请按实际营业需求设备。

手动修改Cube(JSON)

如不雅不修改,精确Count Distinct应用了Default dictionary来保存编码后的user_id,而Default dictionary的最安闲量为500万,并且,会为每个Segment生成一个Default dictionary,如许的话,跨天进行UV分析的时刻,便会产生缺点的结不雅,如不雅天天不反复的user_id跨越500万,那么build的时刻会报错:

  1. java.lang.IllegalArgumentException: Too high cardinality is not suitable for dictionary — cardinality: 43377845  
  2. at org.apache.kylin.dict.DictionaryGenerator.buildDictionary(DictionaryGenerator.java:96) 
  3. at org.apache.kylin.dict.DictionaryGenerator.buildDictionary(DictionaryGenerator.java:73) 

该值由参数 kylin.dictionary.max.cardinality 来控制,当然,你可以修改该值为1亿,然则Build时刻可能会因为内存溢出而导致Kylin Server挂掉落:

  1. # java.lang.OutOfMemoryError: Requested array 

      推荐阅读

      如何快速成为数据分析师?

    说来我正式接触数据分析也快一年,对速成照样有一些心得。优良的数据分析师是不克不及速成的,然则零经验也有零经验的捷径。这两个搞定,根本10万条以内的数据统计没啥难度,80%的办公室白>>>详细阅读


    本文标题:Apache Kylin中对上亿字符串的精确Count_Distinct示例

    地址:http://www.17bianji.com/lsqh/35154.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)