2016-07-23 2 views
2

내가 드루이드로 아래에이 간단한 SQL 쿼리를 변환하는 힘든 시간을 보내고 있어요 :GROUP BY Druid에서 반환 된 결과에서 SELECT를 수행하는 방법은 무엇입니까?

{ 
    "queryType": "groupBy", 
    "dataSource" : "people_data", 
    "granularity": "all", 
    "metric" : "num_of_pages", 
    "dimensions": ["country", "city"], 
    "filter" : { 
     "type" : "and", 
     "fields" : [ 
      { 
      "type": "in", 
      "dimension": "name", 
      "values": ["Mary"] 
      }, 
      { 
      "type" : "javascript", 
      "dimension" : "email", 
      "function" : "function(value) { return (value.length !== 0) }" 
      } 
     ] 
    }, 
    "aggregations": [ 

    { "type": "longSum", "name": "num_of_pages", "fieldName": "count" } 
    ], 
    "intervals": [ "2016-07-20/2016-07-21" ] 
} 

실행 위의 쿼리를하지만 그렇지 않습니다 :

SELECT country, city, Count(*) 
FROM people_data 
WHERE name="Mary" 
GROUP BY country, city; 

그래서 지금까지이 쿼리를 내놓았다 Druid 데이터 소스에서 groupBy처럼 보입니다. 필자는 Mary가 아닌 다른 이름으로 내 출력에있는 사람들을 보았습니다. 누구든지이 작업을 수행하는 방법에 대한 의견이 있습니까?

답변

2

간단한 대답은 groupBy 개의 검색어에서 임의의 크기를 선택할 수 없다는 것입니다.

엄밀히 말하면 SQL 쿼리조차도 의미가 없습니다. country, city의 주어진 조합에 대해 namestreet의 많은 다른 값이있는 경우 어떻게 그 행을 하나의 행에 집어 넣을 수 있습니까? 그들을 집계해야합니다 (예 : max 기능을 사용합니다.

이 경우 데이터에 측정 기준과 측정 항목 모두 같은 열을 포함 할 수 있습니다 (예 : name_dimname_metric이며 메트릭에 대한 해당 집계가 max(name_metric)입니다.

이 열 name 등이 높은 입도 값을 갖고 있으면 사제의 롤업 기능이 중지됩니다.

+0

위 쿼리를 더욱 유용하게 업데이트했습니다. 국가와 도시를 대상으로 '그룹'을 한 후 각 그룹의 모든 행의 '국가', '도시'및 '카운트'를 가져 와서 가장 많은 국가와 도시가 ' 메리'. 하지만이 쿼리를 어떻게 드루이드 코드 (위의'JSON')로 변환 할 수 있는지 알고 있습니까? – CapturedTree

+0

하지만 내부 쿼리가 정확히 필요한 것 같습니다. Group By 필터와'longSum' 집계. 해당 외부 쿼리를 제거하고 내부 쿼리 만 시도하십시오. – Nikem