{"record":{"id":"0e752d611e7f9322","repo":"cube-js/cube","slug":"cannot-transform-interval-expression-interval","errorCode":null,"errorMessage":"Cannot transform interval expression \"${interval}\" to Databricks dialect","messagePattern":"Cannot transform interval expression \"(.+?)\" to Databricks dialect","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/cubejs-databricks-jdbc-driver/src/DatabricksQuery.ts","lineNumber":140,"sourceCode":"    } else if (intervalParsed.day && intKeys === 1) {\n      return [`'${intervalParsed.day}' DAY`, 'DAY'];\n    } else if (intervalParsed.day && intervalParsed.hour && intKeys === 2) {\n      return [`'${intervalParsed.day} ${intervalParsed.hour}' DAY TO HOUR`, 'HOUR'];\n    } else if (intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intKeys === 3) {\n      return [`'${intervalParsed.day} ${intervalParsed.hour}:${intervalParsed.minute}' DAY TO MINUTE`, 'MINUTE'];\n    } else if (intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 4) {\n      return [`'${intervalParsed.day} ${intervalParsed.hour}:${intervalParsed.minute}:${intervalParsed.second}' DAY TO SECOND`, 'SECOND'];\n    } else if (intervalParsed.hour && intervalParsed.minute && intKeys === 2) {\n      return [`'${intervalParsed.hour}:${intervalParsed.minute}' HOUR TO MINUTE`, 'MINUTE'];\n    } else if (intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 3) {\n      return [`'${intervalParsed.hour}:${intervalParsed.minute}:${intervalParsed.second}' HOUR TO SECOND`, 'SECOND'];\n    } else if (intervalParsed.minute && intervalParsed.second && intKeys === 2) {\n      return [`'${intervalParsed.minute}:${intervalParsed.second}' MINUTE TO SECOND`, 'SECOND'];\n    }\n\n    // No need to support microseconds.\n\n    throw new Error(`Cannot transform interval expression \"${interval}\" to Databricks dialect`);\n  }\n\n  public escapeColumnName(name: string) {\n    return `\\`${name}\\``;\n  }\n\n  public override getFieldIndex(id: string): string | number | null {\n    const idx = super.getFieldIndex(id);\n    if (idx !== null) {\n      return idx;\n    }\n\n    return this.escapeColumnName(this.aliasName(id, false));\n  }\n\n  public unixTimestampSql() {\n    return 'unix_timestamp()';\n  }","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-databricks-jdbc-driver/src/DatabricksQuery.ts#L122-L158","documentation":"formatInterval in DatabricksQuery converts a parsed SQL interval expression into Databricks dialect (e.g. 'X' DAY TO HOUR). Databricks only supports a subset of interval combos, and the method deliberately does not handle microseconds; anything not matching a known key combination throws this error.","triggerScenarios":"A time-dimension or calculated query compiles an interval literal whose parsed fields (e.g. only year, or exotic combos, or microsecond precision) don't match any supported branch in formatInterval.","commonSituations":"Using interval expressions with unsupported precision (microseconds) or unusual unit combinations in a calculated member or date filter against Databricks; driver dialect translating a generic interval from the schema compiler.","solutions":["Rewrite the query/calculated member to use an interval combination Databricks supports (day-to-second or year-to-month forms present in the code)","Avoid microsecond precision in intervals — use seconds instead","Express the interval arithmetic differently, e.g. via date_add/timestamp arithmetic functions in the cube schema"],"exampleFix":"// before\nINTERVAL '0 00:00:00.000001' DAY TO SECOND // microseconds unsupported\n// after\nINTERVAL '1' SECOND // or a supported DAY TO SECOND combination","handlingStrategy":"try-catch","validationCode":"// avoid microsecond or unsupported interval combos in calculated members\nconst SUPPORTED_INTERVALS = /^\\d+ (second|minute|hour|day|month|year)s?$/i;\nif (!SUPPORTED_INTERVALS.test(myIntervalLiteral)) throw new Error('Use a simple single-unit interval for Databricks');","typeGuard":null,"tryCatchPattern":"try {\n  const result = await cube.query(queryObject);\n} catch (e) {\n  if (e.message.includes('Cannot transform interval expression')) {\n    // rewrite the interval in the schema/calculated member and resubmit\n  }\n  throw e;\n}","preventionTips":["Use whole-unit intervals (DAY, HOUR, SECOND...) in calculated members","Never use microsecond precision against Databricks","Snapshot-test generated SQL for interval-heavy queries"],"tags":["query-compiler","sql","dialect","interval"],"backgroundTag":"unsupported-sql-dialect-construct","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}