成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Apache Kylin中對上億字符串的精確Count_Distinct示例

大數據
由于Global Dictionary 底層基于bitmap,其最大容量為Integer.MAX_VALUE,即21億多,如果全局字典中,累計值超過Integer.MAX_VALUE,那么在Build時候便會報錯。

[[190885]]

如果業務中能接受1.22%的誤差,那么肯定首選近似算法,因為它能節省很多資源和時間。如果業務中必須使用精確去重,那么就看看本文的例子(針對上億字符串的精確去重)。

事實表

  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的模型。

選擇維度和指標字段:

創建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 size exceeds VM limit  
  2. # -XX:OnOutOfMemoryError=”kill -9 %p”  
  3. # Executing /bin/sh -c “kill -9 16193″… 

因此,這種需求我們需要手動使用Global Dictionary,顧名思義,它是一個全局的字典,不分Segments,同一個user_id,在全局字典中只有一個ID。

目前Kylin的UI中沒有可以直接配置Global Dictionary的地方,需要手動修改Cube的JSON描述:

在狀態為DISABLED的Cube列表中,點擊”Admins”菜單下的”Edit(JSON)”,進入Cube JSON描述的編輯頁面,

添加下面的JSON

其中,在override_kylin_properties 中增加了兩個Cube的配置參數,用于增加Mapper的運行內存。

  1. "dictionaries": [ 
  2.     { 
  3.       "column""USER_ID"
  4.       "builder""org.apache.kylin.dict.GlobalDictionaryBuilder" 
  5.     } 
  6.   ] 

定義了對USER_ID字段使用全局字典。

之后,保存JSON。

Build與查詢

Build完成后,在Hive和Kylin中執行下面的查詢:

SELECT city_code,SUM(bid_request) AS bid_request,COUNT(DISTINCT user_id) AS uvFROM liuxiaowen.TEST_T_PBS_UV_FACTGROUP BY city_codeORDER BY uv DESC limit 30;

Hive中耗時:181.134 seconds

Kylin中耗時:9 seconds

查詢結果完全一致:

Global Dictionary存在問題

由于Global Dictionary 底層基于bitmap,其最大容量為Integer.MAX_VALUE,即21億多,如果全局字典中,累計值超過Integer.MAX_VALUE,那么在Build時候便會報錯。

因此,使用全局字典還是有容量的限制。

責任編輯:武曉燕 來源: lxw的大數據田地
相關推薦

2011-04-07 13:53:04

SQL Server數

2011-12-20 10:28:01

Java字符串

2017-01-15 14:27:32

大數據美團點評技術

2009-11-30 14:08:42

PHP字符串原理

2022-05-10 09:47:10

Bash字符串Linux

2009-11-30 10:40:46

PHP截取utf-8字

2010-03-22 17:53:50

Python字符Python字符串

2010-11-26 09:46:26

MySQL字符串相加

2010-11-01 14:19:20

DB2字符串

2010-11-01 15:38:22

DB2字符串連接

2010-06-28 15:18:51

SQL Server

2010-09-13 14:47:10

sql server字

2022-05-09 08:01:23

countdistinctMySQL

2009-02-24 15:39:27

字符串比較函數函數

2011-06-08 15:45:41

字符串JAVA

2021-09-07 09:23:07

C++字符串算法

2011-07-11 16:00:22

字符串拼接

2020-09-03 10:13:49

JavaScript字符串pad

2025-06-30 02:11:00

2021-03-11 18:44:39

字符串SQL表達式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品色av | 999久久久 | 久久国产精品视频免费看 | 久草免费在线视频 | 九七午夜剧场福利写真 | 亚洲高清视频在线 | 日韩高清国产一区在线 | 午夜成人在线视频 | 国产日韩精品一区 | 国产欧美一区二区三区在线看 | 日本视频免费观看 | 欧美一区二区激情三区 | 日韩一区二区三区四区五区六区 | 欧美国产日韩一区二区三区 | 91免费在线 | 亚洲一区二区在线视频 | 久久久久久久久久久丰满 | 国产精品久久久久免费 | 台湾佬成人网 | 免费一区 | av在线天天 | 国产黄色在线 | 成人久草 | 亚洲一区二区三区在线 | 国产一区二区三区 | 国产96在线| 日本一区二区视频 | 亚洲精品国产区 | 日韩成人| 久久精品国产一区二区三区 | 国产精品欧美一区二区三区 | 国产亚洲精品久久午夜玫瑰园 | 成人日韩精品 | 亚洲国产成人精品久久 | 亚洲一区二区高清 | 亚洲国产片 | 韩日一区二区三区 | 黄色在线观看网站 | 亚洲综合大片69999 | 天堂亚洲网| 久久国产免费看 |