Cube Core v0.32 release brings the GraphQL API into general availability, adds a number of quality-of-life improvements to Cube SQL and adds significant performance boosts to Cube Store.

Breaking changes and deprecations

This release, we have 2 deprecations and 5 breaking changes:

Please check the deprecation document for more details.

Breaking changes

  • Cube Store is now the default cache and queue engine, replacing Redis. We've talked previously about how Cube Store will be replacing Redis, and this release makes it official.

  • Support for Node.js v12 and v15 has been dropped due to them reaching end-of-life. We strongly recommend upgrading to Node.js v16.

  • Absolute imports for the following packages have been removed. We now provide a public API from the package directly:

    • @cubejs-backend/query-orchestrator
    • @cubejs-backend/schema-compiler
    • @cubejs-backend/server-core

Deprecations

  • Support for Node.js v14 has been marked as deprecated due to it reaching end-of-life in April 2023. We strongly recommend upgrading to Node.js v16.

  • Using Cube with the Serverless Framework and the @cubejs-backend/serverless packages is now deprecated, we strongly recommend using Docker-based deployments or Cube Cloud instead.

Pre-aggregations

Following on from the Lambda pre-aggregation support introduced in our last release, Cube now supports multiple rollups from the same cube in a rollupLambda definition.

CLI

The Cube CLI now lets you validate your models on your local machine - simply run npx cubejs-cli validate to check the models in your project for errors:

npx cubejs-cli validate
❌ Cube Schema validation failed
Cube Error ---------------------------------------
Orders cube: "dimensions.id" does not match any of the allowed types
Possible reasons (one of):
* (dimensions.id.case) is required
* (dimensions.id.latitude) is required
* (dimensions.id.sql) is required
LineItems cube: Cube Orders doesn't exist
Need some help? -------------------------------------
Ask this question in Cube Slack: https://slack.cube.dev
Post an issue: https://github.com/cube-js/cube/issues

Drivers

We've enabled readOnly: true as the default for the Clickhouse, MSSQL and Oracle drivers which lets Cube build pre-aggregations without creating temporary tables in those databases.

GraphQL API

We're extremely excited to announce general availability of the GraphQL API in Cube. With this, the GraphQL API now fully supports variables, a much-requested (and much-needed) improvement:

import { gql } from '@apollo/client';
const getOrdersQuery = gql`
query CubeQuery($orderBy: OrdersOrderByInput) {
cube {
orders(orderBy: $orderBy) {
count
status
}
}
}
`;
const variables = {
orderBy: {
count: 'desc',
},
};
client
.query({
query: getOrdersQuery,
variables,
})
.then((result) => console.log(result));

SQL API

Cube SQL continues to see quality-of-life improvements as well as enhanced support for even more SQL functions as selections and projections. Some examples of what we've improved this release include:

  • Support for CASE statements in Cube projections
  • Support for expressions like NOT(LOWER() IN)
  • Allow using CAST in HAVING clauses
  • Support for LEFT and RIGHT functions in projections
  • Support for NULLIF in projections
  • Allow using TO_DATE() in DATE_DIFF() expressions
  • Allow using DATE_TRUNC() in WHERE clauses

We hope that you find these helpful in your work with Cube SQL; please let us know if you have any feedback or suggestions by opening issues on our GitHub repository.