2016-07-21 41 views
2

我有一個有近10億行的Amazon Redshift表,並且想隨機抽取100000個樣本。我已經嘗試了查詢幾乎完全相同在Amazon Redshift中生成可重複隨機樣本的最快方法是什麼?

select BrowserId, 
from PageViews pv 
group by BrowserId 
order by md5('seed' || BrowserId) 
limit 100000; 

描述here,但它走的是兩條或更多的時間來運行,因爲排序操作占主導地位的拉動。

+0

你在哪裏運行該查詢? – error2007s

+0

我正在通過命令行在它自己的架構中的PageViews表的等價物上運行它。 –

+0

下面是一些其他數據庫的建議檢查他們,如果他們可以幫助您https://www.periscopedata.com/blog/how-to-sample-rows-in-sql-273x-faster.html – error2007s

回答

1

你可以找出第N個符號的獨特組合分佈在你的散列數據集是這樣的:

select 
substring(md5('seed' || BrowserId) from 1 for 2) 
,count(1) 
from PageViews pv 
group by 1; 

,然後用相關的組合或多個組合在WHERE條款排序發生之前過濾條目。例如,如果你看到> 100000個哈希以「AB」,它會看起來像這樣:

select [columns] 
from PageViews pv 
where substring(md5('seed' || BrowserId) from 1 for 2)='ab' 
order by md5('seed' || BrowserId) 
group by BrowserId 
limit 100000; 

此外,如果你有很多行,你想要做的抽樣任務頻繁,你可以在一個額外的表兌現哈希列一次和所有,所以你不必每次計算它。

相關問題