Optimize relative datetime filters (#14835)
1. Rename optimize-datetime-filters middleware -> optimize-temporal-filters (it's more accurate, because this also optimizes date or time filter clauses) 2. optimize-temporal-filters middleware now optimizes relative-datetime clauses (which represent a moment in time relative to when the query is ran, e.g. "last month") in addition to absolute-datetime clauses (which represent an absolute moment in time, e.g. 2021-02-15T14:40:00-08:00) . This middleware rewrites queries so we filter against specific temporal ranges without casting the column itself, meaning we can leverage indexes on that column. See #11837 for more details 3. Added new validate-temporal-bucketing middleware that throws an Exception if you try to do something that makes no sense, e.g. bucket a DATE field by :time or a TIME field by :month. This is a better situation then running the query and waiting for the DB to complain. (In practice, I don't think the FE client would let you generate a query like this in the first place) 4. Fix random test failures for MySQL in task-history-cleanup-test
Showing
- .circleci/config.yml 1 addition, 1 deletion.circleci/config.yml
- .dir-locals.el 1 addition, 2 deletions.dir-locals.el
- backend/mbql/src/metabase/mbql/schema.clj 16 additions, 15 deletionsbackend/mbql/src/metabase/mbql/schema.clj
- backend/mbql/src/metabase/mbql/util.clj 24 additions, 28 deletionsbackend/mbql/src/metabase/mbql/util.clj
- backend/mbql/test/metabase/mbql/util_test.clj 5 additions, 17 deletionsbackend/mbql/test/metabase/mbql/util_test.clj
- bin/lint-migrations-file/src/change/strict.clj 15 additions, 0 deletionsbin/lint-migrations-file/src/change/strict.clj
- bin/lint-migrations-file/src/change_set/strict.clj 15 additions, 3 deletionsbin/lint-migrations-file/src/change_set/strict.clj
- bin/lint-migrations-file/test/lint_migrations_file_test.clj 33 additions, 0 deletionsbin/lint-migrations-file/test/lint_migrations_file_test.clj
- jsconfig.json 19 additions, 1 deletionjsconfig.json
- modules/drivers/bigquery/test/metabase/driver/bigquery/query_processor_test.clj 7 additions, 0 deletions...ry/test/metabase/driver/bigquery/query_processor_test.clj
- modules/drivers/googleanalytics/src/metabase/driver/googleanalytics/query_processor.clj 83 additions, 60 deletions...s/src/metabase/driver/googleanalytics/query_processor.clj
- modules/drivers/googleanalytics/test/metabase/driver/googleanalytics/query_processor_test.clj 73 additions, 7 deletions.../metabase/driver/googleanalytics/query_processor_test.clj
- modules/drivers/googleanalytics/test/metabase/driver/googleanalytics_test.clj 15 additions, 9 deletions...leanalytics/test/metabase/driver/googleanalytics_test.clj
- modules/drivers/mongo/test/metabase/driver/mongo/query_processor_test.clj 56 additions, 34 deletions...mongo/test/metabase/driver/mongo/query_processor_test.clj
- resources/migrations/000_migrations.yaml 57 additions, 6 deletionsresources/migrations/000_migrations.yaml
- src/metabase/query_processor.clj 4 additions, 2 deletionssrc/metabase/query_processor.clj
- src/metabase/query_processor/middleware/optimize_temporal_filters.clj 204 additions, 0 deletions.../query_processor/middleware/optimize_temporal_filters.clj
- src/metabase/query_processor/middleware/validate_temporal_bucketing.clj 50 additions, 0 deletions...uery_processor/middleware/validate_temporal_bucketing.clj
- src/metabase/task/task_history_cleanup.clj 3 additions, 1 deletionsrc/metabase/task/task_history_cleanup.clj
- test/metabase/driver/sql/query_processor_test.clj 6 additions, 4 deletionstest/metabase/driver/sql/query_processor_test.clj
Loading
Please register or sign in to comment