{"record":{"id":"1ef546b65b985a6d","repo":"cube-js/cube","slug":"select-queries-for-ksql-allowed-only-from-cube-sto","errorCode":null,"errorMessage":"Select queries for ksql allowed only from Cube Store. In order to query ksql create pre-aggregation first.","messagePattern":"Select queries for ksql allowed only from Cube Store\\. In order to query ksql create pre-aggregation first\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cubejs-ksql-driver/src/KsqlDriver.ts","lineNumber":175,"sourceCode":"        `ksql API error for '${\n          body.ksql\n        }': ${\n          (<any>e).response?.data?.message ||\n          (<any>e).response?.statusCode ||\n          (<any>e).message ||\n          (<any>e).toString()\n        }`\n      );\n    }\n  }\n\n  protected prepareQueryWithParams(query: string, values?: unknown[]): string {\n    return formatAnsi(query, values || []);\n  }\n\n  public async query<R = unknown>(query: string, values?: unknown[], options: KsqlQueryOptions = {}): Promise<R> {\n    if (query.toLowerCase().startsWith('select')) {\n      throw new Error('Select queries for ksql allowed only from Cube Store. In order to query ksql create pre-aggregation first.');\n    }\n\n    const { data } = await this.apiQuery('/ksql', {\n      ksql: `${this.prepareQueryWithParams(query, values)};`,\n      ...(options.streamOffset ? {\n        streamsProperties: {\n          'ksql.streams.auto.offset.reset': options.streamOffset\n        }\n      } : {})\n    });\n\n    return data[0];\n  }\n\n  public async testConnection() {\n    await this.query('SHOW VARIABLES');\n    if (this.kafkaClient) {\n      await this.kafkaClient.admin().connect();","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-ksql-driver/src/KsqlDriver.ts#L157-L193","documentation":"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.","triggerScenarios":"Thrown at packages/cubejs-ksql-driver/src/KsqlDriver.ts:175 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Do not send SELECT statements directly to ksql from Cube; ksqlDB pull/push queries are not executed by this driver","Wrap the ksql data in a pre-aggregation so the data is loaded into Cube Store and queried there","Use a different driver or direct ksqlDB HTTP client if you truly need ad-hoc SELECTs"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}