hive 典型的中表內資料除重寫法
insert overwrite table store
select t.p_key,t.sort_word from
( select p_key,
sort_word ,
row_number()over(distribute by p_key sort by sort_word) as rn
from store) t
where t.rn=1;
存量表: store
增量表: incre
字段:1. p_key 除重主鍵
2. w_sort 排序依據
3. info 其他資訊
方法一(union all + row_number()over ):
insert overwrite table limao_store
select p_key,sort_word
from ( select tmp1.*, row_number() over(distribute by sort_word sort by p_key desc) rownum
from ( select *
from limao_store
union all
select *
from limao_incre
) tmp1
) hh
where hh.rownum = 1;
分析, 長表排序
方法二(left outer join + union all):
注意: hive 不支援 頂層 union all ,而且union all 結果必須有別名
insert overwrite table limao_store
select t.p_key,t.sort_word from (
select s.p_key,s.sort_word from limao_store s left outer join limao_incre i on(s.p_key=i.p_key) where i.p_key=null
union all
select p_key,sort_word from limao_incre);
分析: 不能識別 incre中的重複資料 長表關聯 , 表寬度加倍
方法三(left outer join + insert into)
insert overwrite table store
select s.* from store s left outer join incre i on(s.p_key=i.p_key) where i.p_key=null
insert into table jm_g_l_cust_secu_acct
select * from jm_g_l_cust_secu_acct_tmp;
分析: insert into 最好不用。 使用insert into 在hdfs中的表現為,在表(分割槽)資料夾下,建立新的檔案
存放insert into資料, 造成檔案碎片,降低以後該錶查詢效率。
use nets_life;
create table limao_store
p_key string,
sort_word string
)row format delimited fields terminated by ',' stored as textfile;
create table limao_incre
p_key string,
sort_word string
)row format delimited fields terminated by ',' stored as textfile;
建表語句
use nets_life;
create table limao_store
p_key string,
sort_word string
)row format delimited fields terminated by ',' stored as textfile;
create table limao_incre
p_key string,
sort_word string
)row format delimited fields terminated by ',' stored as textfile;
總結: 方法二和方法三原理相同。 方法三建議避免
方法二、方法三 暗含邏輯:
1.增量同步資料(incre)和存量資料(store)衝突時,總是認為增量資料為最新的
2.無論增量資料表 還是 存量資料表, 表內沒有重複字段
方法一, 不暗含上述邏輯。 全部合併,嚴格按排序字段排名取第一
一千萬資料 store 和 一百萬資料 incre 測試結果
方法一: time taken: 317.677 seconds
方法二: time taken: 106.032 seconds
總結: 方法二時間使用上大幅度少於方法一,但沒有內部除重功能,只能用於比較除重。
hive 列表去重 Hive 資料去重
實現資料去重有兩種方式 distinct 和 group by 1.distinct消除重複行 distinct支援單列 多列的去重方式。單列去重的方式簡明易懂,即相同值只保留1個。多列的去重則是根據指定的去重的列資訊來進行,即只有所有指定的列資訊都相同,才會被認為是重複的資訊。1 作用於單列 se...
Hive資料去重
hive資料去重 insert overwrite table ta customers select t.ta id,t.ta date from select ta id,ta date row number over distribute by ta id sort by ta date de...
大資料 Hive 簡介
第一部分 hive簡介 什麼是hive hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類sql查詢功能。本質是將sql轉換為mapreduce程式 第二部分 為什麼使用hive 面臨的問題 人員學習成本太高 專案週期要求太短 我只是需要乙個簡單的環境 ...