-
- Downloads
Separate date from datetime binning options (#29423)
* Separate date from datetime binning options The BE sends over binning indexes for each field and a top level map for how to interpret these keys. ```javascript ❯ http get http://localhost:3000/api/table/10658/query_metadata Cookie:$SESSION -pb { "active": true, "caveats": null, "created_at": "2023-03-21T22:20:42.363169Z", "db": { "engine": "postgres", "features": [ "full-join", ... ], "id": 499, ... }, "db_id": 499, "dimension_options": { "0": { "mbql": [ "field", null, { "temporal-unit": "day" } ], "name": "Day", "type": "type/Date"}, "1": { "mbql": [ "field", null, { "temporal-unit": "week" } ], "name": "Week", "type": "type/Date" }, "10": { "mbql": ["field", null, { "temporal-unit": "quarter-of-year"}], "name": "Quarter of Year", "type": "type/Date" }, "11": { "mbql": [ "field", null, { "temporal-unit": "minute" } ], "name": "Minute", "type": "type/DateTime"}, "12": { "mbql": [ "field", null, { "temporal-unit": "hour"}], "name": "Hour", "type": "type/DateTime"}, ... // more options. They have a type, an id, and an mbql clause }, "display_name": "Different Times", "entity_type": null, "fields": [{"name": "id",}, {"name": "dt", "dimension_options": [ "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"] "database_type": "timestamp", "effective_type": "type/DateTime", }, {"name": "t", "dimension_options": [ "26", "27", "28" ], "effective_type": "type/Time", "database_type": "time" }, {"name": "d", "database_type": "date", "dimension_options": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ], "effective_type": "type/Date", } ], "name": "different_times", ... } ``` This PR adds some new types just for dates so that you don't get offered by group a date by hour or minute. This adds new indexes to this list, which makes us wary that these indexes have leaked out and cannot be changed. But that is not the case. This is essentially compression on the response. When the FE saves a query, it does not include the index but uses the mbql query to insert the proper temporal-unit: ```clojure ;; a "date" field choosing the quarter option {:type :query, :query {:source-table 5, :breakout [[:field 49 {:temporal-unit :quarter}]], :aggregation [[:count]]}, :database 1} ;; the same query but binning by week {:database 1, :query {:source-table 5, :breakout [[:field 49 {:temporal-unit :week}]], :aggregation [[:count]]}, :type :query} ``` So the index is relative to just the editing session of the query, and the indexes do not have to be stable when we add new ones. * athena and mongo (others?) don't have a date type the test expects a date field to have date binning options. previous, we made no distinction for binning options for date vs datetime fields. Now we do and have to manage expectations in the tests. * mongo returns type/Instant
Loading
Please register or sign in to comment