-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Closed
Labels
bugLEGACY. Use the Bug issue type insteadLEGACY. Use the Bug issue type instead
Description
Describe the bug
Queries generated via metabase are breaking pretty frequently past 1.1.4 when containing time clauses and groupings on time.
To Reproduce
Steps to reproduce the behavior:
1: leverage the following cube in a postgres / redshift env
Minimally reproducible Cube Schema
cubes:
- name: test_cube
sql: SELECT CURRENT_DATE as day_one, 1 as some_val
dimensions:
- name: day_one
sql: day_one
type: time
primary_key: true
public: true
- name: some_val
sql: some_val
type: number
The following queries fail
SELECT
CEIL(EXTRACT(DOY FROM DATE_TRUNC('week', "public"."test_cube"."day_one")) / 7.0) AS week_of_year,
count(distinct some_val)
FROM
"public"."test_cube"
WHERE
"public"."test_cube"."day_one" >= DATE_TRUNC('year', NOW())
AND "public"."test_cube"."day_one" < DATE_TRUNC('year', NOW() + INTERVAL '1 year')
GROUP BY
week_of_year
ORDER BY
week_of_year ASC;
with
Internal error: Can't generate SQL for literal: TimestampNanosecond(1704067200000000000, Some("UTC")). This was likely caused by a bug in DataFusion's code and we would welcome that you file an bug report in our issue tracker
QUERY: SELECT CEIL(EXTRACT(DOY FROM DATE_TRUNC('week', "public"."test_cube"."day_one")) / 7.0) AS week_of_year, count(DISTINCT some_val) FROM "public"."test_cube" WHERE "public"."test_cube"."day_one" >= DATE_TRUNC('year', NOW()) AND "public"."test_cube"."day_one" < DATE_TRUNC('year', NOW() + INTERVAL '1 year') GROUP BY week_of_year ORDER BY week_of_year ASC
I have smoke tested the query in several ways and here are the outcomes when modifying
|---|---|
| Adjustment | Pass / fail |
|---|---|
Remove count(distinct some_val) |
Pass |
Remove WHERE clause |
Pass |
adjust count distinct to count |
Fail |
| Remove ordering | fail |
Reduce time cast complexity DATE_TRUNC('week', "public"."test_cube"."day_one") |
fail |
Some failing examples
SELECT
DATE_TRUNC('week', "public"."test_cube"."day_one") AS week_of_year,
count(distinct some_val)
FROM
"public"."test_cube"
WHERE
"public"."test_cube"."day_one" >= DATE_TRUNC('year', NOW())
AND "public"."test_cube"."day_one" < DATE_TRUNC('year', NOW() + INTERVAL '1 year')
GROUP BY
1
Some passing example queries from the above chart
SELECT
DATE_TRUNC('week', "public"."test_cube"."day_one") AS week_of_year,
count(distinct some_val)
FROM
"public"."test_cube"
GROUP BY
1
SELECT
DATE_TRUNC('week', "public"."test_cube"."day_one") AS week_of_year
FROM
"public"."test_cube"
Hassanyard
Metadata
Metadata
Assignees
Labels
bugLEGACY. Use the Bug issue type insteadLEGACY. Use the Bug issue type instead