cube-js/cube

End time in a dateRange makes cube confused about preaggregations: consider support of open date ranges

Open

#3982 aperta il 25 gen 2022

Vedi su GitHub
 (9 commenti) (0 reazioni) (0 assegnatari)Rust (1965 fork)batch import
help wanted

Metriche repository

Star
 (19.563 star)
Metriche merge PR
 (Merge medio 5g 16h) (138 PR mergiate in 30 g)

Descrizione

Summary If I make a request for { ... , "dateRange": ["2022-01-26 10:00" , "2022-01-26"]} then that works totally fine, it finds the relevant pre-aggregation no problem. However, { ... , "dateRange": ["2022-01-26 10:00" , "2022-01-26 12:00"]} does not work. {"error":"Error: No pre-aggregation exists for that query"}.

This seems wrong: the preaggregation evidently does exist for the whole of 2022-01-26 (because the first request works), and so requesting only a part of that day should not throw an error.

To Reproduce

Docker compose file:

version: "2.2"

services:
  cube:
    image: cubejs/cube:latest
    environment:
      - CUBEJS_DB_TYPE=postgres
     ... connection to the db ... 
      - CUBEJS_API_SECRET=SECRET
      - CUBEJS_DEV_MODE=true
      - CUBEJS_ROLLUP_ONLY=true
    volumes:
      - .:/cube/conf
    network_mode: "host"

Note that I am forcing queries to be served only if a preaggregation exists.

cube schema:

cube("Solar", {
  sql: `
    SELECT
        most_recent.date,
        most_recent.sp,
        most_recent.forecast, 
    FROM
        most_recent
  `,
  refreshKey: {
    every: "5 minute",
  },
  measures: {
    forecast: {
      sql: "forecast",
      type: "sum",
    },
  },
  dimensions: {
    time: {
      sql: `(date + ((sp-1) * (INTERVAL '30 min')))`,
      type: `time`,
      primaryKey: true,
      shown: true,
    },
  },
  preAggregations: {
    Aggregation1: {
      external: true,
      measures: [ CUBE.forecast  ],
      timeDimension: CUBE.time,
      granularity: `minute`,
      refreshKey: {  every: `15 minute`  },
      buildRangeStart: {
        sql: `SELECT NOW() - interval '1 days'`,
      },
    },
  },
});

Note that my time dimension is calculated, in the data each day is composed of 48 "sp".

api request that fails:

http://localhost:4000/cubejs-api/v1/load?query={%22measures%22:[%22Solar.forecast%22],%22timeDimensions%22:[{%22dimension%22:%22Solar.time%22,%22granularity%22:%22minute%22,%22dateRange%22:[%222022-01-24%2010:00:00%22,%222022-01-26%2010:00%22]}],%22dimensions%22:[]}&queryType=multi

Guida contributor