{"record":{"id":"1fa47a1653869444","repo":"cube-js/cube","slug":"the-query-limit-has-been-exceeded","errorCode":null,"errorMessage":"The query limit has been exceeded.","messagePattern":"The query limit has been exceeded\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/cubejs-api-gateway/src/query.js","lineNumber":468,"sourceCode":"  }\n\n  const regularToTimeDimension = (query.dimensions || []).filter(d => typeof d === 'string' && d.split('.').length === 3).map(d => ({\n    dimension: d.split('.').slice(0, 2).join('.'),\n    granularity: d.split('.')[2]\n  }));\n  const timezone = value.timezone || 'UTC';\n\n  const def = getEnv('dbQueryDefaultLimit') <= getEnv('dbQueryLimit')\n    ? getEnv('dbQueryDefaultLimit')\n    : getEnv('dbQueryLimit');\n\n  let newLimit;\n  if (!persistent) {\n    if (\n      typeof query.limit === 'number' &&\n      query.limit > getEnv('dbQueryLimit')\n    ) {\n      throw new Error('The query limit has been exceeded.');\n    }\n    newLimit = typeof query.limit === 'number'\n      ? query.limit\n      : def;\n  } else {\n    newLimit = query.limit;\n  }\n\n  return {\n    ...query,\n    ...(query.order ? { order: normalizeQueryOrder(query.order) } : {}),\n    limit: newLimit,\n    timezone,\n    filters: normalizeQueryFilters(query.filters || [], timezone),\n    dimensions: (query.dimensions || []).filter(d => typeof d !== 'string' || d.split('.').length !== 3),\n    timeDimensions: (query.timeDimensions || []).map(td => {\n      const compareDateRange = td.compareDateRange ? td.compareDateRange.map((currentDateRange) => (typeof currentDateRange === 'string' ? dateParser(currentDateRange, timezone) : currentDateRange)) : null;\n","sourceCodeStart":450,"sourceCodeEnd":486,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-api-gateway/src/query.js#L450-L486","documentation":"Resource guard in normalizeQuery: for non-persistent queries the requested `limit` exceeds the CUBEJS_DB_QUERY_LIMIT environment cap. Unlike UserError-based validations, this throws a plain Error, signaling a hard server-side limit rather than a client input mistake.","triggerScenarios":"Thrown at packages/cubejs-api-gateway/src/query.js:468 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reduce the query `limit` to at most the value of CUBEJS_DB_QUERY_LIMIT (default 10000).","If a higher limit is genuinely needed, raise CUBEJS_DB_QUERY_LIMIT in the orchestrator configuration.","For exports or large result sets, use the download/export API instead of a huge single-query limit."],"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"}