基本多维数据集

考虑以下情况:

我们有 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)