SigNoz/signoz · error · error

no operations table supplied

Error message

no operations table supplied

What it means

ErrNoOperationsTable is a sentinel error from the ClickHouse reader: the query service was constructed without an operations table name, so operation-based queries cannot run.

Source

Thrown at pkg/query-service/app/clickhouseReader/reader.go:118

	signozTSTableNameV41Week      = "distributed_time_series_v4_1week"

	signozTSTableNameV4Reduced = "distributed_time_series_v4_reduced"

	signozTableAttributesMetadata      = "distributed_attributes_metadata"
	signozLocalTableAttributesMetadata = "attributes_metadata"

	signozUpdatedMetricsMetadataLocalTable = "updated_metadata"
	signozUpdatedMetricsMetadataTable      = "distributed_updated_metadata"
	minTimespanForProgressiveSearch        = time.Hour
	minTimespanForProgressiveSearchMargin  = time.Minute
	maxProgressiveSteps                    = 4
	charset                                = "abcdefghijklmnopqrstuvwxyz" +
		"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
	NANOSECOND = 1000000000
)

var (
	ErrNoOperationsTable            = errors.New("no operations table supplied")
	ErrNoIndexTable                 = errors.New("no index table supplied")
	ErrStartTimeRequired            = errors.New("start time is required for search queries")
	seededRand           *rand.Rand = rand.New(
		rand.NewSource(time.Now().UnixNano()))
)

// SpanWriter for reading spans from ClickHouse
type ClickHouseReader struct {
	db                      clickhouse.Conn
	prometheus              prometheus.Prometheus
	sqlDB                   sqlstore.SQLStore
	TraceDB                 string
	operationsTable         string
	durationTable           string
	indexTable              string
	errorTable              string
	usageExplorerTable      string
	SpansTable              string

View on GitHub (pinned to 5069bf80b0)

Solutions

  1. Set the operations table name in the query-service ClickHouse reader configuration
  2. Verify the ClickHouse schema migration that creates the operations table has run
  3. Pass a non-empty operationsTable argument when constructing the reader

Example fix

// before
reader := clickhouseReader.NewClickHouseReader(conn, "", indexTable)
// after
reader := clickhouseReader.NewClickHouseReader(conn, "signouts_operations", indexTable)
Defensive patterns

Strategy: validation

Validate before calling

if operationsTable == "" {
    log.Fatal("operations table must be configured (e.g. via env/config)")
}
reader := NewClickHouseReader(conn, operationsTable, indexTable)

Try / catch

if err := reader.SomeOperationQuery(ctx, params); errors.Is(err, clickhouseReader.ErrNoOperationsTable) {
    // fix config and restart rather than retrying
}

Prevention

When it happens

Trigger: Instantating/calling ClickHouseReader methods that need the operations table when the operationsTable config/arg is empty (e.g. GetOperations-style queries with no table configured).

Common situations: Missing operations table setting in query-service config/env; a ClickHouse schema version that doesn't create the operations table; fresh installs skipping the migration step.

Understand the failure class

Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28). Data as JSON: /api/errors/dab74a4082448f48. Report an issue: GitHub.