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.

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.

Appendix: 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)