事实表
- hive> desc test_t_pbs_uv_fact;
- OK
- ad_id string //维度
- material_id string //维度
- city_code string //维度
- user_id string //指标,须要精确Count Distinct
- bid_request bigint //指标,SUM
- device_bid_request bigint //指标,SUM
- win bigint //指标,SUM
- ck bigint //指标,SUM
- pt string //维度,日期,yyyy-MM-dd
该事实表一天的数据记录大年夜概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的时刻会报错:
- java.lang.IllegalArgumentException: Too high cardinality is not suitable for dictionary — cardinality: 43377845
- at org.apache.kylin.dict.DictionaryGenerator.buildDictionary(DictionaryGenerator.java:96)
- at org.apache.kylin.dict.DictionaryGenerator.buildDictionary(DictionaryGenerator.java:73)
该值由参数 kylin.dictionary.max.cardinality 来控制,当然,你可以修改该值为1亿,然则Build时刻可能会因为内存溢出而导致Kylin Server挂掉落:
- # java.lang.OutOfMemoryError: Requested array
推荐阅读
说来我正式接触数据分析也快一年,对速成照样有一些心得。优良的数据分析师是不克不及速成的,然则零经验也有零经验的捷径。这两个搞定,根本10万条以内的数据统计没啥难度,80%的办公室白>>>详细阅读
本文标题:Apache Kylin中对上亿字符串的精确Count_Distinct示例
地址:http://www.17bianji.com/lsqh/35154.html
1/2 1