From 50bc7818707c732efb50f4846363781f2f9bbd7b Mon Sep 17 00:00:00 2001 From: Anoop K <40392769+anoopk19@users.noreply.github.com> Date: Wed, 28 Aug 2019 15:27:28 -0400 Subject: [PATCH] Fixes the error while sorting group by results (#10712) * Fixes the error while sorting group by results * Fixed formatting issues * Add tests --- .../metabase/driver/druid/query_processor.clj | 6 ++- .../driver/druid/query_processor_test.clj | 48 ++++++++++++++++++- .../druid/test/metabase/driver/druid_test.clj | 24 ++++++++++ 3 files changed, 75 insertions(+), 3 deletions(-) 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 658fbfb099c..368a0de13fd 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 6c4ab2ab94e..4ec7fb87e8f 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 609023cfb39..e94f1fb7f31 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 -- GitLab