用于漏斗分析的Hive / SQL查询。

时间:2015-11-12 10:36:40

标签: sql hadoop hive avro

我需要对以下架构的数据执行漏斗分析:

A(int X) Matched_B(int[] Y) Filtered_C(int[] Z)

其中,

  • A是指可以发送多个请求的客户端ID。不是存储请求ID,而是仅在数据管道中的每个请求中存储客户机ID。 (我不知道为什么)
  • Matched_B是指为查询返回的商品列表。
  • Flitered_CMatched_B的子集,指的是成功通过过滤器的项目。

所有数据都存储在HDFS的avro文件中。用于在HDFS中存储数据的QPS大约为12000。

我需要准备以下报告:

  • 对于(X,Y[i])的每个组合,Y[i]中显示Matched_B的次数。
  • 对于(X,Y[i])的每个组合,Y[i]中显示Filtered_C的次数。

基本上我想知道这个任务是否只能用Hive执行?

目前,我正在考虑以下架构。

HDFS(avro_schema)--> Hive_Script_1 --> HDFS(avro_schema_1) --> Java Application --> HDFS(avro_schema_2) --> Hive_Script_2(external_table) --> result

其中,

  • avro_schema是上述架构。
  • {li> avro_schema_1Hive_Script_1通过转换(使用Lateral View explode(Matched_B))avro_schema生成,描述如下:

A(int X) Matched_B_1(int Y) Filtered_C(int[] Z)

  • avro_schema_2由Java Application生成,描述如下:

A(int X) Matched_B(int Y) Matched_Y(1 if Y is matched, else 0) Filtered_Y(1 if Y is filtered, 0 otherwise)

最后,我们可以运行一个Hive脚本来处理每天生成的事件的数据。

另一种架构可能是我们删除了avro_schema_1代,并直接从Java应用程序处理avro_schema并生成结果。

但是,我想避免为此任务编写Java应用程序。有人能指出我对上述问题的Hive解决方案吗?

还希望有一些架构的POV能够有效解决这个问题。

注意:请建议考虑QPS(12000)的解决方案。

0 个答案:

没有答案