{"record":{"id":"2a18368216e28767","repo":"apache/superset","slug":"columns-missing-in-dataset-invalid-columns-s","errorCode":null,"errorMessage":"Columns missing in dataset: %(invalid_columns)s","messagePattern":"Columns missing in dataset: (.+?)","errorType":"validation","errorClass":"QueryObjectValidationError","httpStatus":400,"severity":"error","filePath":"superset/common/query_context_processor.py","lineNumber":146,"sourceCode":"        ):\n            cache.is_loaded = False\n\n        cache_resolution_ns = max(0, time.perf_counter_ns() - cache_resolution_start_ns)\n\n        data_acquisition_ns: int | None = None\n        if query_obj and cache_key and not cache.is_loaded:\n            data_acquisition_start_ns = time.perf_counter_ns()\n            try:\n                if invalid_columns := [\n                    col\n                    for col in get_column_names_from_columns(query_obj.columns)\n                    + get_column_names_from_metrics(query_obj.metrics or [])\n                    if (\n                        col not in self._qc_datasource.column_names\n                        and col != DTTM_ALIAS\n                    )\n                ]:\n                    raise QueryObjectValidationError(\n                        _(\n                            \"Columns missing in dataset: %(invalid_columns)s\",\n                            invalid_columns=invalid_columns,\n                        )\n                    )\n\n                query_result = self.get_query_result(query_obj)\n                annotation_data = self.get_annotation_data(query_obj)\n            except QueryObjectValidationError as ex:\n                cache.error_message = str(ex)\n                cache.status = QueryStatus.FAILED\n            finally:\n                data_acquisition_ns = max(\n                    0, time.perf_counter_ns() - data_acquisition_start_ns\n                )\n\n            if cache.status != QueryStatus.FAILED:\n                cache.set_query_result(","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/apache/superset/blob/f4587218dd19d046c3e4d00063e7d27f8a2ed354/superset/common/query_context_processor.py#L128-L164","documentation":"QueryContextProcessor.get_payload (cache-key path) verifies that every column in query_obj.columns plus every metric name exists in the datasource's column_names (DTTM_ALIAS excepted). Any unknown name collects into invalid_columns and raises QueryObjectValidationError('Columns missing in dataset: ...').","triggerScenarios":"POSTing a chart data request whose columns/metrics reference fields not present on the dataset — renamed or dropped DB columns, a stale chart payload after dataset changes, or a query context built against a different dataset.","commonSituations":"Underlying table schema changed (column renamed/dropped) while charts still request the old names; chart JSON copied to a different dataset; caching layer bypassed so the validation runs against current schema.","solutions":["Sync the dataset: refresh columns in the dataset editor (or via API) so it matches the physical schema.","Update the chart's controls/params to use current column names.","If the column exists in the DB but not the dataset, add it to the dataset metadata."],"exampleFix":"# before\n{\"columns\": [\"user_nm\"], ...}  # dataset has user_name\n\n# after\n{\"columns\": [\"user_name\"], ...}  # match dataset column_names","handlingStrategy":"validation","validationCode":"valid = set(datasource.column_names) | {\"__timestamp\"}\ninvalid = [c for c in requested_columns if c not in valid]\nif invalid:\n    raise ValueError(f\"unknown columns: {invalid}\")","typeGuard":"def columns_exist(ds, cols: list[str]) -> bool:\n    names = set(ds.column_names)\n    return all(c in names or c == \"__timestamp\" for c in cols)","tryCatchPattern":"except QueryObjectValidationError as e:\n    if \"Columns missing in dataset\" in str(e):\n        sync_dataset_columns(); resubmit()","preventionTips":["Refresh dataset metadata after schema changes","Validate chart params against dataset before API calls"],"tags":["query","dataset","columns","validation","backend"],"backgroundTag":null,"analyzedSha":"f4587218dd19d046c3e4d00063e7d27f8a2ed354","analyzedAt":"2026-08-14T22:39:27.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}