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
quartergranularity 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_THREADSto 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_TOKENenvironment variable to download script (#4282) - Added: Add
EXPLAINimplementation (#4303) - Added:
INoperator support for decimal type (#4306) - Added: Support space-separated binary strings for HyperLogLog fields in
CSV, resolves issue with
countDistinctApproxin 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_PATHleads 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 &INTERVALs - Added: Introduce
information_schemafor MySQL compatibility - Added: Improved selection finder for
ORDER BY - Added: Ignore
KILLstatement 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
SETvariables (#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_scalefield 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
booleancolumn 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
uniqueidentifiertype 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_KEYfor 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
allowNodeRequireforDataSchemaCompiler(#4235) - Fixed: Timestamp for
quarterrange in time series has incorrect ending period of23:59:99(#4162) - Fixed:
TypeErrorwhen requesting/cubejs-api/v1/run-scheduled-refreshwithout auth params - Fixed: Validate
contextToAppId()is in place whenCOMPILE_CONTEXTis used - Fixed: Improved defaults in
RefreshScheduler
API gateway
- Added: Compact JSON array-based response data format support (#4046)
- Added: A new property
totalis 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/oroperators (#4016) - Fixed: Skip GraphQL types generation for empty cubes
- Fixed: GraphQL cannot read property
findIndexofundefined - Fixed: Allow HTTP POST requests for
/sqlendpoint (#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_atofundefined(#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/andinFILTER_PARAMS(#4253) - Added: Support for compound primary keys (#4370)
- Fixed: Handle
nullvalues in security context (#3868) - Fixed: An error when using
subQueryfor arollingWindowmeasure - Fixed: Do not instantiate
SqlParserifrewriteQueriesisfalseto save cache memory - Fixed:
refreshKeyis evaluated ten times more frequently ifsqlandeveryare 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
metafield to TypeScriptTCubeMembertype (#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