我需要对以下架构的数据执行漏斗分析:
A(int X) Matched_B(int[] Y) Filtered_C(int[] Z)
其中,
A
是指可以发送多个请求的客户端ID。不是存储请求ID,而是仅在数据管道中的每个请求中存储客户机ID。 (我不知道为什么)Matched_B
是指为查询返回的商品列表。Flitered_C
是Matched_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
是上述架构。avro_schema_1
由Hive_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)的解决方案。