infiniflow/ragflow · error · ConnectorValidationError
At least one content column must be specified.
Error message
At least one content column must be specified.
What it means
validate_connector_settings requires at least one content column; content_columns defines which fields become indexed document content, so an empty list means the connector would ingest nothing meaningful.
Source
Thrown at common/data_source/bigquery_connector.py:595
from api.db.services.connector_service import ConnectorService
updated_conf = copy.deepcopy(self._sync_config)
updated_conf["sync_cursor_value"] = self.serialize_cursor_value(self._pending_sync_cursor_value)
updated_conf["sync_cursor_id"] = self._pending_sync_cursor_id
ConnectorService.update_by_id(self._sync_connector_id, {"config": updated_conf})
self._sync_config = updated_conf
# ------------------------------------------------------------------ #
# Validation
# ------------------------------------------------------------------ #
def validate_connector_settings(self) -> None:
"""Validate settings via SELECT 1 plus a dry-run of the configured base query."""
if not self._credentials:
raise ConnectorMissingCredentialError("BigQuery credentials not loaded.")
if not self.project_id:
raise ConnectorValidationError("BigQuery project_id is required.")
if not self.content_columns:
raise ConnectorValidationError("At least one content column must be specified.")
if not self.query and not (self.dataset_id and self.table_id):
raise ConnectorValidationError("BigQuery requires either a custom query or both dataset_id and table_id.")
try:
client = self._get_client()
# Cheap connectivity check.
client.query(
"SELECT 1",
job_config=self._build_query_job_config(),
location=self.location or None,
).result()
# Free cost/validity check of the actual base query.
dry_run_job = client.query(
self._wrap_query(self._build_base_query()),
job_config=self._build_query_job_config(dry_run=True),
location=self.location or None,View on GitHub (pinned to 554fb1133a)
Solutions
- Set content_columns to one or more columns present in the base query, e.g. ['body']
- Verify the key is exactly content_columns and the list is non-empty
Example fix
// before
config = {"content_columns": [], ...}
// after
config = {"content_columns": ["title", "body"], ...} Defensive patterns
Strategy: validation
Validate before calling
if not config.get("content_columns"):
raise ValueError("content_columns must list at least one column to ingest") Try / catch
try:
conn.validate_connector_settings()
except ConnectorValidationError as e:
if "content column" in str(e):
config["content_columns"] = infer_content_columns(schema); revalidate()
else:
raise Prevention
- Make content_columns a required field in connector-creation UIs
- Reject empty arrays at form-submit time
When it happens
Trigger: content_columns empty or missing from config during validation.
Common situations: User configures only metadata/id/timestamp columns; form serialization drops empty arrays; key typo like contentColumns.
Related errors
- BigQuery requires either a custom query or both dataset_id a
- BigQuery project_id is required.
- BigQuery configured columns not found in schema: {', '.join(
- main() must return a value. Use null for an empty result.
- main() returned a non-JSON-serializable value.
AI-assisted analysis of infiniflow/ragflow@554fb1133a (2026-08-15).
Data as JSON: /api/errors/7346fc3f9fca7c99.
Report an issue: GitHub.