1. 程式人生 > 其它 >hivesql---分析兩張表的指定資料整合到第三張表的指定欄位上

hivesql---分析兩張表的指定資料整合到第三張表的指定欄位上

技術標籤:Hive

本文主要講解利用hivesql分析兩張表的指定資料整合到第三張表的指定欄位上

背景說明:從表一中拿取四種任務的總數作為表三中任務總數,表二中拿取task_id的總數作為表三中任務失敗的總數,再在表三中算出告警率=任務失敗告警總數/任務總數


表一:dm_rtc_task_statistics_sum_mf

序號欄位名l型別s說明
1task_typestring任務型別
2task_num_0string未執行
3task_num_1string執行中
4task_num_3string已終止
5task_num_6string啟動失敗

表二:dm_rtc_server_log_wf

序號

欄位英文名

欄位中文名

欄位型別

1date日期varchar(50)
2ipipvarchar(50)
3task_id任務idvarchar(50)
4alarm_type告警型別int

表三:dm_rtc_server_log_alarm_rate_rel_mf

序號欄位英文名欄位中文名欄位型別
1task_total_qty任務總數string
2task_fail_all任務失敗總數string
3task_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 別名=欄位名