本文主要讲解利用hivesql分析两张表的指定数据整合到第三张表的指定字段上
背景说明:从表一中拿取四种任务的总数作为表三中任务总数,表二中拿取task_id的总数作为表三中任务失败的总数,再在表三中算出告警率=任务失败告警总数/任务总数
表一:dm_rtc_task_statistics_sum_mf
序号 | 字段名 | l类型 | s说明 |
1 | task_type | string | 任务类型 |
2 | task_num_0 | string | 未运行 |
3 | task_num_1 | string | 运行中 |
4 | task_num_3 | string | 已终止 |
5 | task_num_6 | string | 启动失败 |
表二:dm_rtc_server_log_wf
序号 | 字段英文名 | 字段中文名 | 字段类型 |
---|---|---|---|
1 | date | 日期 | varchar(50) |
2 | ip | ip | varchar(50) |
3 | task_id | 任务id | varchar(50) |
4 | alarm_type | 告警类型 | int |
表三:dm_rtc_server_log_alarm_rate_rel_mf
序号 | 字段英文名 | 字段中文名 | 字段类型 |
1 | task_total_qty | 任务总数 | string |
2 | task_fail_all | 任务失败总数 | string |
3 | task_alarm_rate | 任务告警率 | string |
代码示例:
-- 计算任务总量,失败告警数量以及任务失败告警率
insert
overwrite table dm_rtc_server_log_alarm_rate_rel_mf partition (inc_month = '$[time(yyyyMM,-1M)]') 表为月分区增量表,分区格式为$[time(yyyyMM,-1M)]
select
task_total_qty,
task_fail_all,
round((task_fail_all / task_total_qty), 4) as task_alarm_rate
from
(
select
sum(
task_num_1 + task_num_0 + task_num_3 + task_num_6
) as task_total_qty
from
dm_rtc_task_statistics_sum_mf
where
task_type = '15' 此处表示对表中全部任务,表中全部任务的task_type=15
and inc_month = '$[time(yyyyMM,-1M)]'
) tb,
(
select
count(distinct task_id) as task_fail_all
from
dm_rtc_server_fail_log_mi
where inc_month = '$[time(yyyyMM,-1M)]' #此处表示分区,表中的分区格式为$[time(yyyyMM,-1M)]
) t2;
查询示例:
几个函数说明:
1.round函数
round(x,d)
x,表示要处理的数,d表示保留的小数的个数
2.distinct :去重
SELECT DISTINCT 字段名 FROM 表名;
关键词 DISTINCT 用于返回唯一不同的值。
3.count()函数
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)
用法:
SELECT COUNT(column_name) FROM table_name;
查询总记录数:
SELECT COUNT(*) AS nums FROM access_log;
4.as:别名关键词
select 字段 as 别名 == select 字段名 别名 == select 别名=字段名