Hive 查询以查找百分比值
Posted
技术标签:
【中文标题】Hive 查询以查找百分比值【英文标题】:Hive query to find percentage value 【发布时间】:2016-11-28 17:32:48 【问题描述】:我正在处理的表的列是 customer_id、operating_system、device_type、transaction_id、transaction_time。
我想了解过去 360 天内客户在移动/平板设备上进行的交易所使用的操作系统百分比。
基本方法是:设备类型(手机/平板电脑)和时间戳超过 360 天的交易数量按客户 _id、operating_system * 100 / 特定客户针对设备类型(手机/平板电脑)完成的交易总数) 与操作系统无关。
如何编写查询以查找输出为:customer_id,operating_system,% of operating system used
提前致谢!
【问题讨论】:
以下是我准备的查询。我不确定它是否会起作用。选择 t.customer_id,t.operating_system,100*( count(t.transaction_id) / q1.total ) 从表 t 中,(select count(transaction_id) as total from table where device_type in (mobile,tablet) and transaction_time 360 Group by customer_id ) q1 where device_type in (mobile,tablet) and transaction_time 360 Group by customer_id,operating_system 【参考方案1】:在下面的子查询s
中计算消费者的总计数和操作系统的计数。由于使用了分析函数,因此行数与源数据集中的行数相同。这就是为什么您需要按 consumer_id 和 operating_system 聚合的原因。使用max
或min
:
select --group by consumer_id and operating_system
customer_id,
operating_system,
max(operating_system_cnt) operating_system_cnt,
max(total_cnt) total_cnt,
max(operating_system_cnt)*100/max(total_cnt) operating_system_percent
from
(
select --calculate total count and operating_system_count
customer_id,
operating_system,
count(transaction_id) over(partition by customer_id, operating_system) operating_system_cnt,
count(transaction_id) over(partition by customer_id) total_cnt
from your_table
where --your filter conditions here for mobile/tablet and last 360 days
)s
group by
customer_id,
operating_system
【讨论】:
感谢您的询问。只有一个问题。我们需要统计交易的总数(transaction_id-每笔交易都是唯一的)所以我们可以在不使用transaction_id的情况下找出所有交易的数量在查询中? 我不完全了解您的数据。一个客户和操作系统的 transaction_id 是否可能重复?请发布数据示例。 固定查询。没查,现在做不了,可能还有其他的bug。以上是关于Hive 查询以查找百分比值的主要内容,如果未能解决你的问题,请参考以下文章