2016-07-23 4 views
2

:実行上記のクエリGROUP BYドルイドから返された結果でSELECTを実行するにはどうすればよいですか?私はドルイドに、以下のこの単純なSQLクエリを変換に苦労しています

{ 
    "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のように見えるのは、メアリー以外の名前を持つ人物が出力されているからです。誰もこの仕事をする方法についての入力がありますか?

答えて

2

あなたのgroupByクエリで任意のディメンションを選択することはできません。

厳密に言えば、SQLクエリは意味をなさない。 country, cityの組み合わせに対して、namestreetという異なる値がある場合、どのように1行に絞り込むのですか?それらを集計する必要があります。 max機能を使用します。

この場合、次元と指標の両方に同じ列をデータに含めることができます。 name_dimname_metricであり、メトリックに対応する集計、max(name_metric)が含まれています。

これらの列、nameなどの粒度値が高いと、ドルイドのロールアップ機能が無効になることに注意してください。

+0

私は上記のクエリをより有用にするために更新しました。国と都市で 'グループ・バイ・'を行った後、各グループのすべての行の '国家'、 '都市'と '数量'をつかんで、どの国と都市が 'メアリー。しかし、このクエリをドルイドコード(上記の 'JSON')にどのように翻訳できるのか分かりませんか? – CapturedTree

+0

しかし、あなたの内側のクエリは、あなたが必要とするものと正確に思われます。 Group Byフィルタと 'longSum'集計。その外側のクエリを削除し、内側のクエリのみを試してください。 – Nikem

関連する問題