Hive-實戰記錄1
阿新 • • 發佈:2018-12-24
Hive-實戰記錄1
一般的SQL支援UPDATE
等對table內資料進行改變等操作,Hive不支援。所以在具體業務中,需要重新定義具體value
時,需要重新create
新的table。
範例:
存在的table有:tmp_db.stream 和 tmp_db.tmp_dim_info,前者是流量記錄,後者是維度記錄。
id是key,pageid是support key,uv是相關流量。
tmp_db.tmp_dim_info:
id | pageid | actionYN | createtime |
---|---|---|---|
13121 | 43 | Y | 2018-10-11 |
33312 | 42 | N | 2018-11-12 |
36441 | 41 | N | 2018-9-8 |
* | 22 | N | 2018-7-2 |
42343 | 76 | N | 2018-10-7 |
tmp_db.stream :
id | pageid | uv |
---|---|---|
13121 | 43 | 10021312 |
33312 | 42 | 12312412 |
* | 22 | 9088 |
第一步進行以下操作:
drop table if exists tmp_db.tmp_stream;
create table tmp_db.tmp_stream as
select distinct
case when b.id='*' then 'multi' else '1' end as flag,
b. *,
a.uv
from tmp_db.stream a
left join tmp_db.tmp_dim_info b on a.id=b.id
where b.pageid='*' or a.pageid=b.pageid
sort by uv desc,id,b.value
建立的table以維度表tmp_dim_info為主,left join
了stream中兩者id相同的情況,stream表儲存了所有有流量的id。目的是在原維表上加一個flag維度,標記該id是否有uv。所以第一步建立有流量flag的部分。
tmp_db.tmp_stream結果如下:
flag | id | pageid | actionYN | createtime | uv |
---|---|---|---|---|---|
1 | 13121 | 43 | Y | 2018-10-11 | 10021312 |
1 | 33312 | 42 | N | 201811-12 | 12312412 |
multi | * | 22 | N | 20187-2 | 9088 |
第二步建立無流量部分:
輔助table:tmp_db.nostream
id | pageid | uv |
---|---|---|
36441 | 41 | 0 |
42343 | 76 | 0 |
drop table if exists tmp.tmp_nostream;
CREATE table tmp_db.tmp_nostream as
select distinct
case when datediff(b.createtime,'2018-10-1') > 0 then '1' else '' end as flag,
--createtime大於2018年10月1日就標記'1'else標記''
b.*
from tmp_db.tmp_dim_info b
left join tmp_db.nostream a on a.id=b.id
由於2018年10月1日之前create
的有可能因為沒上線而導致沒有流量,所以標記為1:
flag | id | pageid | actionYN | createtime | uv |
---|---|---|---|---|---|
36441 | 41 | N | 2018-9-8 | 0 | |
1 | 42343 | 76 | N | 2018-10-8 | 0 |
以上將有流量和無流量的條件都建立完成flag,之後union all
就可以得到所需要的新表並且添加了一個flag維度。兩個新生成的表有相同的結構,直接可以聚合。
drop table if exists tmp_db.tmp_dim_withflag;
create table tmp_db.tmp_dim_withflag as
SELECT *
FROM (
select * from tmp_db.tmp_stream
UNION ALL
select * from tmp_db.tmp_nostream
)
完成!
Markdown 0 字數 2 行數 當前行 2, 當前列 0