cube-js/cube · error · Error
Pre aggregation schema for kSql source with partition granul
Error message
Pre aggregation schema for kSql source with partition granularity must contains buildRangeEnd parameter
What it means
The paired validation guard in KsqlQuery.preAggregationStartEndQueries: a ksql pre-aggregation with partitionGranularity must also define a refreshRangeEnd (buildRangeEnd) parameter so the partition window's end boundary is known; missing it aborts compilation. The input at fault is a pre-aggregation declaring partitionGranularity whose buildRangeEnd is absent (buildRangeStart alone is insufficient).
Source
Thrown at packages/cubejs-ksql-driver/src/KsqlQuery.ts:126
}
const dimensionsForSelect: any[] = this.dimensionsForSelect();
const dimensionColumns = dimensionsForSelect.map(s => s.selectColumns() && s.dimensionSql())
.reduce((a, b) => a.concat(b), [])
.filter((s: any) => !!s);
return dimensionColumns.length ? ` GROUP BY ${dimensionColumns.join(', ')}` : '';
}
public partitionInvalidateKeyQueries(_cube: string, _preAggregation: any) {
return [];
}
public preAggregationStartEndQueries(cube: string, preAggregation: any) {
if (preAggregation.partitionGranularity) {
if (!preAggregation.refreshRangeStart) {
throw new Error('Pre aggregation schema for kSql source with partition granularity must contains buildRangeStart parameter');
}
if (!preAggregation.refreshRangeEnd) {
throw new Error('Pre aggregation schema for kSql source with partition granularity must contains buildRangeEnd parameter');
}
}
const res = this.evaluateSymbolSqlWithContext(() => [
preAggregation.refreshRangeStart && [this.evaluateSql(cube, preAggregation.refreshRangeStart.sql, {}), [], { external: true }],
preAggregation.refreshRangeEnd && [this.evaluateSql(cube, preAggregation.refreshRangeEnd.sql, {}), [], { external: true }]
], { preAggregationQuery: true });
return res;
}
public preAggregationReadOnly(cube: string, preAggregation: any) {
const [sql] = this.preAggregationSql(cube, preAggregation);
return preAggregation.type === 'originalSql' && Boolean(KsqlQuery.extractTableFromSimpleSelectAsteriskQuery(sql)) ||
preAggregation.type === 'rollup' && !!this.dimensionsForSelect().find(d => d.definition().primaryKey);
}
public preAggregationAllowUngroupingWithPrimaryKey(_cube: any, _preAggregation: any) {
return true;View on GitHub (pinned to 7d981676b3)
Solutions
- Add refreshRangeEnd to the pre-aggregation definition alongside refreshRangeStart
- Ensure both range endpoints are present whenever partitionGranularity is declared
- Add schema validation to fail fast during compilation rather than at query time
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/cubejs-ksql-driver/src/KsqlQuery.ts:126 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02).
Data as JSON: /api/errors/e7b4af63b0861c3d.
Report an issue: GitHub.