cube-js/cube · error · Error

Select queries for ksql allowed only from Cube Store. In ord

Error message

Select queries for ksql allowed only from Cube Store. In order to query ksql create pre-aggregation first.

What it means

A capability guard in KsqlDriver.query: ksqlDB pull/SELECT queries are only executable through Cube Store's ksql connector, so direct SELECTs from the Cube orchestrator are rejected. Any caller issuing a SELECT against this driver (data queries, testConnection, table listing paths) hits this. The supported workflow is to first build a pre-aggregation from the ksql stream and query that.

Source

Thrown at packages/cubejs-ksql-driver/src/KsqlDriver.ts:175

        `ksql API error for '${
          body.ksql
        }': ${
          (<any>e).response?.data?.message ||
          (<any>e).response?.statusCode ||
          (<any>e).message ||
          (<any>e).toString()
        }`
      );
    }
  }

  protected prepareQueryWithParams(query: string, values?: unknown[]): string {
    return formatAnsi(query, values || []);
  }

  public async query<R = unknown>(query: string, values?: unknown[], options: KsqlQueryOptions = {}): Promise<R> {
    if (query.toLowerCase().startsWith('select')) {
      throw new Error('Select queries for ksql allowed only from Cube Store. In order to query ksql create pre-aggregation first.');
    }

    const { data } = await this.apiQuery('/ksql', {
      ksql: `${this.prepareQueryWithParams(query, values)};`,
      ...(options.streamOffset ? {
        streamsProperties: {
          'ksql.streams.auto.offset.reset': options.streamOffset
        }
      } : {})
    });

    return data[0];
  }

  public async testConnection() {
    await this.query('SHOW VARIABLES');
    if (this.kafkaClient) {
      await this.kafkaClient.admin().connect();

View on GitHub (pinned to 7d981676b3)

Solutions

  1. Do not send SELECT statements directly to ksql from Cube; ksqlDB pull/push queries are not executed by this driver
  2. Wrap the ksql data in a pre-aggregation so the data is loaded into Cube Store and queried there
  3. Use a different driver or direct ksqlDB HTTP client if you truly need ad-hoc SELECTs
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/cubejs-ksql-driver/src/KsqlDriver.ts:175 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/1ef546b65b985a6d. Report an issue: GitHub.