基本多維資料集
考慮以下情況:
我們有 4 個維度的使用者事件資料:
- A / B 測試桶(產品/測試)
- 客戶型別(網路/手機)
- 模組(訂單/報告)
- 事件(點選/檢視)
test mobile order_module click
prod web order_module view
prod mobile order_module click
報告系統可能希望報告不同組合的指標,例如:
- 什麼是移動使用者的總點選次數? ****
- 來自不同測試桶的總點選次數是多少?
- 什麼是總網頁頁面檢視為 order_module 在督促鬥?
如你所見,有許多組合。如果我們只儲存最小的粒度指標,然後在接收查詢時將其彙總,那麼效率並不高。因此,一種解決方案是預先計算所有組合。
以下是我們如何通過 PIG 的 CUBE 操作實現這一目標。
example = LOAD './cube.example' AS (product:chararray, client:chararray, module:chararray, action:chararray);
cubed_data = CUBE example BY CUBE(product, client, module, action);
final_data = FOREACH cubed_data GENERATE $0, COUNT_STAR($1);
dump final_data;
它將產生所有組合和總計數的輸出。檢視先前轉儲的輸出 - 使用此統計資訊,我們可以直接回答以前的問題。無需進一步聚合。
((prod,web,order_module,view),1)
((prod,web,order_module,),1)
((prod,web,,view),1)
((prod,web,,),1)
((prod,mobile,order_module,click),1)
((prod,mobile,order_module,),1)
((prod,mobile,,click),1)
((prod,mobile,,),1)
((prod,,order_module,view),1)
((prod,,order_module,click),1)
((prod,,order_module,),2)
((prod,,,view),1)
((prod,,,click),1)
((prod,,,),2)
((test,mobile,order_module,click),1)
((test,mobile,order_module,),1)
((test,mobile,,click),1)
((test,mobile,,),1)
((test,,order_module,click),1)
((test,,order_module,),1)
((test,,,click),1)
((test,,,),1)
((,web,order_module,view),1)
((,web,order_module,),1)
((,web,,view),1)
((,web,,),1)
((,mobile,order_module,click),2)
((,mobile,order_module,),2)
((,mobile,,click),2)
((,mobile,,),2)
((,,order_module,view),1)
((,,order_module,click),2)
((,,order_module,),3)
((,,,view),1)
((,,,click),2)
((,,,),3)