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...