hive 大資料 除重問題研究

2021-09-02 08:57:59 字數 2579 閱讀 5818

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 面臨的問題 人員學習成本太高 專案週期要求太短 我只是需要乙個簡單的環境 ...