gpt4 book ai didi

hadoop - 复杂的 Hive 查询

转载 作者:可可西里 更新时间:2023-11-01 16:26:45 26 4
gpt4 key购买 nike

您好,我有下表:

ID------ |--- time 
======================
5------- | ----200101
3--------| --- 200102
2--------|---- 200103
12 ------|---- 200101
16-------|---- 200103
18-------|---- 200106

现在我想知道一年中某个月份出现的频率。我不能使用分组依据,因为这只计算表格中出现的次数。但是我也想在一年中的某个月份没有出现时得到一个0。所以输出应该是这样的:

time-------|----count
=====================
200101--|-- 2

200102--|-- 1

200103--|-- 1

200104--|-- 0

200105--|-- 0

200106--|-- 1

对于糟糕的表格格式,我深表歉意,我希望我的意思仍然清楚。我会很感激任何帮助

最佳答案

您可以提供包含所有年月信息的年月表。我为您编写了一个脚本来生成这样的 csv 文件:

#!/bin/bash

# year_month.sh

start_year=1970
end_year=2015

for year in $( seq ${start_year} ${end_year} ); do
for month in $( seq 1 12 ); do
echo ${year}$( echo ${month} | awk '{printf("%02d\n", $1)}');
done;
done > year_month.csv

将它保存在 year_month.sh 中并运行它。然后你会得到一个文件 year_month.csv 包含从 1970 年到 2015 年的年月。你可以更改 start_yearend_year 来指定年份范围。

然后,将 year_month.csv 文件上传到 HDFS。例如,

hadoop fs -mkdir /user/joe/year_month
hadoop fs -put year_month.csv /user/joe/year_month/

之后,您可以将year_month.csv 加载到Hive 中。例如,

create external table if not exists 
year_month (time int)
location '/user/joe/year_month';

最后,您可以将新表与您的表连接起来以获得最终结果。例如,假设您的表是 id_time:

from (select year_month.time as time, time_count.id as id 
from year_month
left outer join id_time
on year_month.time = id_time.time) temp
select time, count(id) as count
group by time;

注意:您需要对上述语句进行微小的修改(如路径、类型)。

关于hadoop - 复杂的 Hive 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17452795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com