Hive進行資料抽樣 隨機抽取

2021-10-01 13:33:03 字數 2132 閱讀 1028

3. hive隨機抽取

4. mysql隨機抽樣

-- 原來的50%

select

*from liyang tablesample(

50percent

)

-- 30m

select

*from liyang tablesample(

30m)

-- 200行 每個map200行

select

*from liyang tablesample(

200rows

)

hive中的分桶表(bucket table),其實就是根據某乙個欄位hash取模,放入指定資料的桶中,比如將表liyang按照id分成100個桶,其演算法是hash(id) % 100,這樣,hash(id) % 100 = 0的資料被放到第乙個桶中,hash(id) % 100 = 1的記錄被放到第二個桶中。分桶表在建立時候使用cluster by語句建立。

2.1 對未分桶表進行分桶抽樣

-- 隨機分成10個桶,取第乙個桶資料

select

*from liyang tablesample(bucket 1

outof

10on rand(

))

2.2 對已分桶表進行分桶抽樣
-- 建立分桶表

create

table liyang(id string)

clustered

by(id)

into

10 buckets;

-- 直接取第乙個桶

select

*from liyang tablesample(bucket 1

outof

10on id)

-- 對第乙個桶抽樣一半

select

*from liyang tablesample(bucket 1

outof

20on id)

方式一:

distribute by rand(

) sort by rand(

)limit

10000

select

flag_md5

,event_time

,active_time

,flag

from tablename

where ds =

202106

and rand(

)<

0.001

distribute by rand(

)sort by rand(

)limit

10

方式三:

order

by rand(

)limit

100

方式四:

select 

t.x,t.a

from

(select x

,rand(

) a from tablename

)twhere t.a between

0and

0.2

select

*from users

order

by rand(

)limit

1

-- (最大的id - 最小的id) * 隨機值 + 最小的id

select

*from users

where userid >=((

select

max(userid)

from users)-(

select

min(userid)

from users)

)* rand()+

(select

min(userid)

from users)

limit

1

mysql隨機抽樣推薦使用第二種,因為order by效能不好

從Hive表中進行資料抽樣 Sampling

在hive中提供了資料取樣 sampling 的功能,用來從hive表中根據一定的規則進行資料取樣,hive中的資料取樣支援分桶表取樣和資料塊取樣。根據輸入的inputsize,取樣n 比如 輸入大小為1g,tablesample 50 percent 將會取樣512m的資料 看例子 表lxw1總大...

快速進行資料抽取

今天做資料抽取的時候一直在用select,但是後來發現有的不能抽取出來,後來發現xpath更快速 首先給pom.xml加入依賴 cn.wanghaomiao jsoupxpath 2.2這裡面可以用copy path來代替要抽取的資料 public static string rules7 stri...

hive 隨機抽樣

1.random sampling syntax select from distribute by rand sort by rand limit 2.bucket table sampling 該方式是最佳化取樣bucket表。rand 函式也可以用來取樣整行。如果取樣列同時使用了cluster...