2013-10-15 3 views
1

저는 드루이드를 RDruid와 함께 사용하기 시작했습니다. 우리의 데이터 세트가 상당히 크기 때문에 더 작고 무작위로 추출한 샘플을 DB에서 가져오고 싶습니다. 나는 그것이/시간당가 미세 기본 데이터의 임의의 부분에 롤업 구축하고 싶은Druid 데이터베이스에서 무작위 샘플링

res2 = druid.query.groupBy(
    url = druid.url("hostname", port=8080), 
    dataSource = "playback", 
    intervals = interval(
    fromISO("2013-09-20T00:00:00"), 
    now() 
), 
    dimensions = list(dimension("platformInfo_deviceType"), dimension("isp")), 
    granularity="hour", 
    aggregations = list(
    sum(metric("streamStartCount")) 
) 
) 

: RDruid를 사용

나는과 같은 쿼리가 있습니다.

이것도 가능합니까? 아마도 기본 데이터 레코드에 임의의 4 자리 숫자/문자열을 할당하고 일치하는 규칙으로 레코드를 롤업하는 필터를 적용하는 것과 같은 것을 시도해 볼 수 있습니다.

예. 임의의 문자열이> 8888이면 8889와 9999 사이의 모든 레코드를 선택합니다.

아이디어가 있습니까?

+0

n 번째 레코드를 가져 오는 방법을 알려 주면 (의사) - 무작위 간격으로 특정 수의 레코드를 샘플링하는 방법을 보여 드리겠습니다. –

답변

0
sample.big.n <- function(n, max) trunc(runif(n, max=max+1)) 

sample.big.n(5, 1e9) 
[1] 960118066 734686176 291924461 238165419 195301121 
sample.big.n(5, 1e9) 
[1] 682097669 519657711 435974111 420722901 266094914 
sample.big.n(5, 1e9) 
[1] 134806446 281796597 595062788 551378278 648440525 

나머지 레코드와 마지막 기회를 동일하게 부여하려면 최대 1을 추가했습니다. 간격의 끝점을 반환하는 runif의 0 (또는 적어도 1e-16보다 크지 않음)에 접근 할 확률이 있어야합니다.

관련 문제