cube-js/cube · error

Dialect for '${queryOptions.externalDbType}' is not found

Error message

Dialect for '${queryOptions.externalDbType}' is not found

What it means

When compiling an external (pre-aggregation rollup) query, Cube looks up the driver class for externalDbType in the built-in ADAPTERS registry. If externalDialectClass is not provided and externalDbType is not a known key, the factory throws this error because it has no query class to instantiate for the external store.

Source

Thrown at packages/cubejs-schema-compiler/src/adapter/QueryBuilder.ts:53

  hive: HiveQuery,
  oracle: OracleQuery,
  sqlite: SqliteQuery,
  materialize: PostgresQuery,
  cubestore: CubeStoreQuery,
};

export const queryClass = (dbType: string, dialectClass) => dialectClass || ADAPTERS[dbType];

export const createQuery = (compilers, dbType: string, queryOptions: any) => {
  if (!queryOptions.dialectClass && !ADAPTERS[dbType]) {
    return null;
  }

  let externalQueryClass = queryOptions.externalDialectClass;

  if (!externalQueryClass && queryOptions.externalDbType) {
    if (!ADAPTERS[queryOptions.externalDbType]) {
      throw new Error(`Dialect for '${queryOptions.externalDbType}' is not found`);
    }

    externalQueryClass = ADAPTERS[queryOptions.externalDbType];
  }

  return new (queryClass(dbType, queryOptions.dialectClass))(compilers, {
    ...queryOptions,
    externalQueryClass,
  });
};

View on GitHub (pinned to 7d981676b3)

Solutions

  1. Correct the externalDbType string to a registered adapter name (check ADAPTERS keys in adapter/QueryBuilder.ts)
  2. Provide queryOptions.externalDialectClass with your own query class for the external db
  3. Verify the driver package for the external database is installed and the db type is supported in your Cube version

Example fix

// before
createQuery(compilers, { ...options, externalDbType: 'postgres ' });
// after
createQuery(compilers, { ...options, externalDbType: 'postgres' }); // or supply externalDialectClass
Defensive patterns

Strategy: validation

Validate before calling

import { ADAPTERS } from './adapter/QueryBuilder';
if (opts.externalDbType && !opts.externalDialectClass && !ADAPTERS[opts.externalDbType]) throw new Error(`Unsupported externalDbType: ${opts.externalDbType}`);

Try / catch

try { return createQuery(compilers, options); } catch (e) { if (/Dialect for '.*' is not found/.test(e.message)) { console.error('Known dbTypes:', Object.keys(ADAPTERS)); } throw e; }

Prevention

When it happens

Trigger: Passing queryOptions.externalDbType whose value has no entry in ADAPTERS (typo like 'postgres ' or a custom/unregistered db type) while not supplying externalDialectClass via compilerApi/prepareCompiler options.

Common situations: Configuring a custom pre-aggregation store (e.g. DuckDB/ClickHouse) with a misspelled externalDbType; upgrading Cube where a dialect was renamed or removed; forgetting externalDialectClass when using a non-registered external database.

Related errors


AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02). Data as JSON: /api/errors/1096cc85cc8faebc. Report an issue: GitHub.