基本多維資料集

考慮以下情況:

我們有 4 個維度的使用者事件資料:

  1. A / B 測試桶(產品/測試)
  2. 客戶型別(網路/手機)
  3. 模組(訂單/報告)
  4. 事件(點選/檢視)
test    mobile    order_module    click
prod    web    order_module    view
prod    mobile    order_module    click

報告系統可能希望報告不同組合的指標,例如:

  1. 什麼是移動使用者的總點選次數? ****
  2. 來自不同測試桶的總點選次數是多少?
  3. 什麼是總網頁頁面檢視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)