Cube Core v0.30 release brings major new features, such as:
- Support for using dbt metrics with Cube. Check out this blog post to learn more.
- Support for Databricks, including the export bucket feature for enhanced pre-aggregation support.
- Support for Materialize databases.
- Support for QuestDB databases. To learn more about how to get started with QuestDB and Cube, check out our recent blog post on the topic.
Cube Store has also seen a massive number of improvements in both its stability and performance, and the Cube SQL API has been vastly improved since its' launch in v0.29. We've improved the existing support for Apache Superset and added support for Jupyter, Streamlit and Hex notebooks. We've also done a lot of work in preparation for extending support to other visualization tools, so stay tuned.
The Developer Playground has also seen a number of quality-of-life improvements, and we hope you’ll find them useful.
Breaking changes and deprecations
This release we have two breaking changes that should only affect older users.
We’re deprecating the CUBEJS_EXTERNAL_DEFAULT
and
CUBEJS_SCHEDULED_REFRESH_DEFAULT
environment variables. These were introduced
to smooth the migration to Cube Store; we doubt most users will be affected but
please ensure nothing depends on the above.
Cube Store
- Added: Support Docker images for ARM64 platform (#3841)
- Added: Split batching upload of pre-aggregations into multiple files to enhance performance and avoid load balancer
- Added: Support
quarter
granularity indate_trunc
(#4011) - Added: Decimal partition pruning (#4089)
- Added: Unwinds select worker panics to provide descriptive error messages (#4097)
- Added: Introduce
CUBESTORE_EVENT_LOOP_WORKER_THREADS
to allow setting Tokio worker threads and processes explicitly - Added: Repartition single chunks instead of partition as a whole to speed up ingestion of big tables (#4125)
- Added: Add
CUBEJS_GH_API_TOKEN
environment variable to download script (#4282) - Added: Add
EXPLAIN
implementation (#4303) - Added:
IN
operator support for decimal type (#4306) - Added: Support space-separated binary strings for HyperLogLog fields in
CSV, resolves issue with
countDistinctApprox
in AWS Athena (#4383) - Fixed: Reduce excessive startup memory usage
- Fixed: Re-parent chunks on compaction instead of repartitioning
- Fixed: Silence errors for not uploaded chunks scheduled for removal
- Fixed: Respect pending chunks for compaction
- Fixed: Do not fail scheduler loop on lagged broadcast receive
- Fixed: Provide better messages for CSV parsing error
- Fixed: Decimals without integral parts are now respecting sign
- Fixed: Schema type mismatch when in memory chunks are queried (#4024)
- Fixed: Ensure file size matches during downloads to localize any remote filesystem consistency issues (#4054)
- Fixed: Deactivate tables on data corruption to allow refresh worker to reconcile failing partitions (#4092)
- Fixed: Add list file size validation after file upload to check upload consistency (#4093)
- Fixed: Postpone deletion of partitions and chunks after metastore log commits to avoid missing files on sudden metastore loss (#4094)
- Fixed: Do not spawn select workers for router nodes
- Fixed: Jobs are fetched only once every 5 seconds if there's a queue
- Fixed: Do not warmup chunks on table creation to avoid stuck on warmup of unpartitioned chunks situation
- Fixed: Leading decimal zeros are truncated during formatting
- Fixed: Empty tables in Cube Store if index is being used (#4170)
- Fixed: Add compaction and chunk writing guards to cleanup uploads folder on any failures to minimize storage bloating
- Fixed: Filters are now included in index choosing
- Fixed: Empty
CUBESTORE_S3_SUB_PATH
leads to can't list file error (#4324) - Fixed: Inactive partition compaction: replace error with warn (#4337)
Cube SQL
- Added: Support for
SUBSTRING()
- Added: Support
UCASE()
- Added: Support
LOCATE()
- Added: Support
DATE()
,DATE_ADD()
,NOW()
functions &INTERVAL
s - Added: Introduce
information_schema
for MySQL compatibility - Added: Improved selection finder for
ORDER BY
- Added: Ignore
KILL
statement without error - Added: Improved error messages (#3829)
- Added: Support for ARM64 Linux (#3865)
- Added: Support
USE 'db'
- Added: Support
SHOW COLUMNS
(#3995) - Added: Support
SHOW TABLES
(#4001) - Added: Support
COUNT(1)
(#4004) - Added: Support prepared statements (#4005)
- Added: Support binary expression for measures (#4009)
- Added: Support
SHOW COLLATION
(#4025) - Added: Query execution now uses DataFusion-based Query Engine
- Added: Support
SHOW processlist
- Added: Split variables for session and server (#4255)
- Added: Support
pg_catalog.*
tables - Added: Support
SET
variables (#4266) - Added: Improved error messages (#4515)
- Fixed:
LIKE '%(%)%'
comparators - Fixed: Support for
IF()
- Fixed:
SUBSTRING()
with negative count now returns an empty string - Fixed: Return Cube errors to the SQL client
- Fixed: Fixed an alias binding problem with escapes
- Fixed: Ignore case-sensitive search for usage of identifiers
- Fixed: Unique filtering for measures/dimensions/segments in Request
- Fixed: Allow using a measure as an argument in
COUNT()
(#4063) - Fixed: Add
numeric_scale
field forinformation_schema.columns
- Fixed: Table columns should take precedence over projection to mimic database behavior
- Fixed: Allow quoted variables with
SHOW <variable>
syntax (#4313) - Fixed: Correct MySQL types in response headers (#4362)
- Fixed: Support
boolean
column type
AWS Athena
- Added: Batching and export support (#4039)
- Fixed: Fixes export bucket location and column order (#4183)
- Fixed: Support plain bucket (instead of a path) for
CUBEJS_DB_EXPORT_BUCKET
(#4390)
BigQuery
- Fixed: Cancel queries on polling timeout so they aren't dangling around indefinitely
Databricks
- Added: Export bucket support on S3/Azure (#4430)
JDBC
- Fixed: Handle Maven error for empty Java dependencies (#4307)
Materialize
- Added: New driver for Materialize (#4320)
MS SQL
- Fixed: Add
uniqueidentifier
type support (#4386)
Postgres
- Added: Enums now supported in pre-aggregations (#3957)
QuestDB
- Added: New driver for QuestDB (#4096)
Snowflake
- Added: New environment variable
CUBEJS_DB_SNOWFLAKE_PRIVATE_KEY
for setting private keys - Fixed: Fixed
OperationFailedError: SQL compilation error: invalid value [?] for parameter 'STATEMENT_TIMEOUT_IN_SECONDS'
Playground
- Added: A message now displays when using non-additive measures (#4236)
- Added: A message now displays when using count distinct (#4309)
- Added: Display error stack traces (#4438)
- Fixed: Filter groups now correctly display the full field name (#3816)
- Fixed: Adjust chart to fill the window (#4042)
- Fixed: Use security context in GraphQL sandbox
- Fixed: Fixed an issue rollup designer undefined key
- Fixed: Tab close button styles (#4047)
- Fixed: Fixed an issue that caused parameters to shift around when removing filters
Server
- Added: New environment variable
CUBEJS_ALLOW_UNGROUPED_WITHOUT_PRIMARY_KEY
(#2941) - Added: Allow configuring
allowNodeRequire
forDataSchemaCompiler
(#4235) - Fixed: Timestamp for
quarter
range in time series has incorrect ending period of23:59:99
(#4162) - Fixed:
TypeError
when requesting/cubejs-api/v1/run-scheduled-refresh
without auth params - Fixed: Validate
contextToAppId()
is in place whenCOMPILE_CONTEXT
is used - Fixed: Improved defaults in
RefreshScheduler
API gateway
- Added: Compact JSON array-based response data format support (#4046)
- Added: A new property
total
is available in the JSON query. Iftrue
, the query also returns the total number of rows for that query (#4134) - Fixed: Fix a type issue where queries did not properly support logical
and
/or
operators (#4016) - Fixed: Skip GraphQL types generation for empty cubes
- Fixed: GraphQL cannot read property
findIndex
ofundefined
- Fixed: Allow HTTP POST requests for
/sql
endpoint (#4180)
Query orchestrator
- Added: New environment variable to control database timeouts:
CUBEJS_DB_QUERY_TIMEOUT
(#3864) - Fixed: Refresh process for
useOriginalSqlPreAggregations
(#3826) - Fixed: Table cache incorrectly invalidated in multitenant configurations (#3828)
- Fixed: Cannot read property
last_updated_at
ofundefined
(#3980) - Fixed: Improve error message on missing partitions
- Fixed: Remove orphaned tables on error while pre-aggregation creation (#3996)
- Fixed: An out-of-memory error when an empty table was used to build partitioned pre-aggregations (#4021)
Schema compiler
- Added: Allow filtering with
or
/and
inFILTER_PARAMS
(#4253) - Added: Support for compound primary keys (#4370)
- Fixed: Handle
null
values in security context (#3868) - Fixed: An error when using
subQuery
for arollingWindow
measure - Fixed: Do not instantiate
SqlParser
ifrewriteQueries
isfalse
to save cache memory - Fixed:
refreshKey
is evaluated ten times more frequently ifsql
andevery
are simultaneously defined (#3873) - Fixed: Use prototype name matching instead of classes to allow exact
version mismatches for
AbstractExtension
- Fixed: Use a cube's alias when generating join aliases (#4010)
- Fixed: Add strictness to booleans (#4157)
Client libraries
Angular
- Fixed:
cubejs.watch()
is now producing errors (#3974)
Core
- Added: Support for compact response data format (#4046)
- Added: Accept immutable queries (#4366)
- Added: Add HTTP status code to
RequestError
(#4412) - Fixed: Add
meta
field to TypeScriptTCubeMember
type (#3815) - Fixed: Allow any filter types in
and
/or
(#4343) - Fixed: HTTP poll not working if Cube API stops and recovers (#3506)
Vue
- Added: Boolean filters support (#4314)
- Fixed: Fix error when deleting a member in
QueryBuilder
(#3806)
Documentation & examples
- Fixed: Frontend Integration API Reference generation
- Fixed: CodeSandbox examples in documentation
- Fixed: Kubernetes examples