Techniki próbkowania danych dla dużych baz danych Netezza

Używamy Netezzy IBM. Mamy tabelę, która codziennie otrzymuje prawie 10 miliardów rekordów, które musimy przetworzyć. Jedno z pól tabeli identyfikuje użytkownika poprzez 38-znakowy ciąg numeryczny, nazwijmy go UserID. Mamy tę tabelę dystrybuowaną na UserID. Szukam optymalnej techniki pobierania próbek. Obecnie próbkujemy przy użyciu mod(UserID,SamplingRate) = 0, ale ponieważ ta tabela jest dystrybuowana na identyfikatorze użytkownika, myślę, że z pewnością musi istnieć lepszy sposób.

W Hive mamy pojęcie segmentów, w których możemy podzielić nasze tabele na kilka segmentów, a następnie pobrać jeden z segmentów, co zapewnia dobrą wydajność.

Aktualizacja: próbkując dane, mam na myśli uzyskanie losowych 500 milionów rekordów o równomiernym rozmieszczeniu. Liczbę rekordów, które chcę uzyskać, można określić na podstawie mojej częstotliwości próbkowania. Typ danych UserID to numeryczny(38). (Java: BigDecimal)


person Mukul Gupta    schedule 07.02.2014    source źródło
comment
Co masz na myśli mówiąc próbkowanie? Czy chcesz po prostu losowy podzbiór 10 miliardów rekordów?   -  person Niederee    schedule 08.02.2014
comment
Co to jest datatype pole userID?   -  person Niederee    schedule 08.02.2014
comment
Zaktualizowano opis, dodając więcej informacji.   -  person Mukul Gupta    schedule 08.02.2014


Odpowiedzi (1)


A co z prostą losową próbką w warunku gdzie? zostało to rozwiązane podczas planowania, więc powinno działać płynnie, jak dotąd Rand() ma równomierny rozkład:

SELECT * FROM BIGTABLE WHERE RAND()< SAMPLE_SIZE/BIGTABLE_TOTAL;
person karim_op    schedule 26.05.2015