diff --git a/modules/drivers/druid/src/metabase/driver/druid/query_processor.clj b/modules/drivers/druid/src/metabase/driver/druid/query_processor.clj index 658fbfb099c67d8aa1ffaadf6365fa9227b029ec..368a0de13fd7b939cc2c552e9a70bf6057637635 100644 --- a/modules/drivers/druid/src/metabase/driver/druid/query_processor.clj +++ b/modules/drivers/druid/src/metabase/driver/druid/query_processor.clj @@ -84,7 +84,8 @@ :distinct___count (= ag-type :aggregation-options) - (recur (second ag)) + (let [[_ wrapped-ag options] ag] + (or (:name options) (recur wrapped-ag))) ag-type ag-type @@ -1010,7 +1011,8 @@ (defmethod handle-limit ::groupBy [_ {limit :limit} updated-query] (if-not limit - updated-query + (-> updated-query + (assoc-in [:query :limitSpec :type] :default)) (-> updated-query (assoc-in [:query :limitSpec :type] :default) (assoc-in [:query :limitSpec :limit] limit)))) diff --git a/modules/drivers/druid/test/metabase/driver/druid/query_processor_test.clj b/modules/drivers/druid/test/metabase/driver/druid/query_processor_test.clj index 6c4ab2ab94ea70c46f6da6c72ae829b89bb54e90..4ec7fb87e8f7f9b8588b6e137f8802c20653a4b4 100644 --- a/modules/drivers/druid/test/metabase/driver/druid/query_processor_test.clj +++ b/modules/drivers/druid/test/metabase/driver/druid/query_processor_test.clj @@ -47,6 +47,52 @@ {:aggregation [[:* [:count $id] 10]] :breakout [$venue_price]})) +(datasets/expect-with-driver :druid + {:projections [:venue_category_name :user_name :__count_0] + :query {:queryType :groupBy + :granularity :all + :dataSource "checkins" + :dimensions ["venue_category_name", "user_name"] + :context {:timeout 60000, :queryId "<Query ID>"} + :intervals ["1900-01-01/2100-01-01"] + :aggregations [{:type :cardinality + :name "__count_0" + :fieldNames ["venue_name"]}] + :limitSpec {:type :default + :columns [{:dimension "__count_0", :direction :descending} + {:dimension "venue_category_name", :direction :ascending} + {:dimension "user_name", :direction :ascending}]}} + :query-type ::druid.qp/groupBy + :mbql? true} + (query->native + {:aggregation [[:aggregation-options [:distinct [:field-id (data/id :checkins :venue_name)]] {:name "__count_0"}]] + :breakout [$venue_category_name $user_name] + :order-by [[:desc [:aggregation 0]] [:asc [:field-id (data/id :checkins :venue_category_name)]]]})) + +(datasets/expect-with-driver :druid + {:projections [:venue_category_name :user_name :__count_0] + :query {:queryType :groupBy + :granularity :all + :dataSource "checkins" + :dimensions ["venue_category_name", "user_name"] + :context {:timeout 60000, :queryId "<Query ID>"} + :intervals ["1900-01-01/2100-01-01"] + :aggregations [{:type :cardinality + :name "__count_0" + :fieldNames ["venue_name"]}] + :limitSpec {:type :default + :columns [{:dimension "__count_0", :direction :descending} + {:dimension "venue_category_name", :direction :ascending} + {:dimension "user_name", :direction :ascending}] + :limit 5}} + :query-type ::druid.qp/groupBy + :mbql? true} + (query->native + {:aggregation [[:aggregation-options [:distinct [:field-id (data/id :checkins :venue_name)]] {:name "__count_0"}]] + :breakout [$venue_category_name $user_name] + :order-by [[:desc [:aggregation 0]] [:asc [:field-id (data/id :checkins :venue_category_name)]]] + :limit 5})) + (datasets/expect-with-driver :druid {:projections [:venue_category_name :__count_0] :query {:queryType :topN @@ -66,4 +112,4 @@ (query->native {:aggregation [[:aggregation-options [:distinct [:field-id (data/id :checkins :venue_name)]] {:name "__count_0"}]] :breakout [$venue_category_name] - :order-by [[:desc [:aggregation 0]] [:asc [:field-id (data/id :checkins :venue_category_name)]]]})) \ No newline at end of file + :order-by [[:desc [:aggregation 0]] [:asc [:field-id (data/id :checkins :venue_category_name)]]]})) diff --git a/modules/drivers/druid/test/metabase/driver/druid_test.clj b/modules/drivers/druid/test/metabase/driver/druid_test.clj index 609023cfb3970ff2ec01d517c02cbad21085501c..e94f1fb7f31254909f582491971a037257432cd3 100644 --- a/modules/drivers/druid/test/metabase/driver/druid_test.clj +++ b/modules/drivers/druid/test/metabase/driver/druid_test.clj @@ -439,3 +439,27 @@ (u/pprint-to-str 'red results)) {:cols (->> results :data :cols (map :name)) :rows (-> results :data :rows)}))) + +(datasets/expect-with-driver :druid + [["Bar" "Felipinho Asklepios" 8.015665809687173] + ["Bar" "Spiros Teofil" 8.015665809687173] + ["Japanese" "Felipinho Asklepios" 7.011990219885757] + ["Japanese" "Frans Hevel" 7.011990219885757] + ["Mexican" "Shad Ferdynand" 7.011990219885757]] + (druid-query-returning-rows + {:aggregation [[:aggregation-options [:distinct [:field-id (data/id :checkins :venue_name)]] {:name "__count_0"}]] + :breakout [$venue_category_name $user_name] + :order-by [[:desc [:aggregation 0]] [:asc [:field-id (data/id :checkins :venue_category_name)]]] + :limit 5})) + +(datasets/expect-with-driver :druid + [["American" "Rüstem Hebel" 1.0002442201269182] + ["Artisan" "Broen Olujimi" 1.0002442201269182] + ["Artisan" "Conchúr Tihomir" 1.0002442201269182] + ["Artisan" "Dwight Gresham" 1.0002442201269182] + ["Artisan" "Plato Yeshua" 1.0002442201269182]] + (druid-query-returning-rows + {:aggregation [[:aggregation-options [:distinct [:field-id (data/id :checkins :venue_name)]] {:name "__count_0"}]] + :breakout [$venue_category_name $user_name] + :order-by [[:asc [:aggregation 0]] [:asc [:field-id (data/id :checkins :venue_category_name)]]] + :limit 5})) \ No newline at end of file