2014-04-29 21 views
25

Sadece RAND() işlevinin belgesiz halde BigQuery'de çalıştığını keşfettim. "Orada herhangi dezavantajları tanımlanan HASH() yönteminin yerine bu yaklaşımı kullanarak:Google BigQuery'deki Rastgele Örnekleme

SELECT word FROM 
(SELECT rand() as random,word FROM [publicdata:samples.shakespeare] ORDER BY random) 
LIMIT 10 

Sorum edilir: Kullandığım Shakespeare veri kümesi 10 kelime (görünüşte) tesadüfi örnek oluşturmak başardı Gelişmiş örnekler "referans kılavuzunun bölümü"? https://developers.google.com/bigquery/query-reference

cevap

36

İyi iş onu :) bulma. Son zamanlarda bu işlevi istedim, ancak henüz belgelere ulaşmadı.

RAND() 'ın avantajı sonuçların değişeceğidir, HASH() ise aynı değerleri (aynı zamanda zamanla garanti edilmez, ancak bu fikri alırsınız) için aynı sonuçları vermeye devam edecektir.

Eğer hala tutarlı sonuçlar elde ederken RAND() getiriyor değişkenliği istiyoruz - Eğer RAND gibi bir tamsayı ile yapabilirsiniz tohum o (3).

Bildirim yapıştırdığınız örnek rastgele değerlerin tam bir çeşit yaptığını olsa - bu yaklaşım ölçek olmaz yeterince büyük girişler için.

SELECT word 
FROM [publicdata:samples.shakespeare] 
WHERE RAND() < 10/164656 

(10 Almak istediğim sonuçların yaklaşık sayıdır ve 164.656 tablo sahiptir sıra sayısı)

:

ölçeklenebilir bir yaklaşım, yaklaşık 10 rastgele satır olsun

+1

Merhaba Felipe! WHERE RAND() <10/164656' ile ne yaptığınızı açıklayabilir misiniz? Teşekkürler! – Rohit

+1

RAND() bana 0 ile 1 arasında rastgele bir sayı verir. Böylece bir rastgele sayı kümesi istesem, yalnızca onda birinin yaklaşık 0,1'inden daha az olur, yalnızca yüzlerce kişiden biri 0.01'den küçük olur ve yakında. Shakespeare tablosunda 164656 satır vardır. Eğer sadece 1 civarında rasgele satır istiyorum, her sıraya rastgele bir sayı vereceğim ve onlarla birlikte olanları seçeceğim <1/164656. Bir tane olacağı garanti edilmez - ama yine de. 10? 10 * 1/164656 = 10/164656. Denemek :). –

+0

@FelipeHoffa Sizin yönteminizi uygulamaya çalışıyorum ama çılgınca farklı sonuçlar elde ediyorum. Yaklaşık 6 milyar satırlık bir tabloya sahibim ve örnekleme kullanarak ör. rand() <0,004 ', örneklem hacminin toplam satır sayısı üzerindeki oranı' 0.0002 'olarak çıkar. Başka bir deyişle, benim örneğim beklenenden 20 kat daha küçük. Bu davranış için bir açıklamanız var mı? – Kris

4

RAND() hakkında bilgi alın! Benim durumumda

Ben önceden tanımlanmış örnek hacmi gerekiyordu. Bunun yerine toplam satır sayısını bilmek ve toplam satırların üzerine bölme örnek boyutunu yapmaya gerek, ben aşağıdaki sorguyu kullanıyorum:

SELECT word, rand(5) as rand 
FROM [publicdata:samples.shakespeare] 
order by rand 
#Sample size needed = 10 
limit 10 

Özetleme, ben ramdomize ve sonra tanımlanmış bir ayıklamak için LIMIT + ORDER BY kullanmak örnek sayısı.

0
ek bir ipucu hatta kolaylaştırmak için

: Sen işlevi öz tarafından sipariş edebilirsiniz, yani:

rand() sınırı 100

=> Örnek Tarafından y siparişinden x seçin 100

+0

'rand() 'düzen tarafından 'çalışmıyor. –

+0

Doğru. Bununla birlikte, x'i seçin (r (100) olarak r, x'den r (x) olarak rand() öğesini seçin); 'kaldırabilir. – pcejrowski