Files
zeekayandGitHub 940df58087 debrand: rename physical ClickHouse signoz_* schema -> o11y_* (writer side) (#7)
Rename ONLY the physical ClickHouse DATABASE/TABLE identifiers the
schema-migrator CREATEs and the exporters WRITE, matching the o11y read
plane + the data-preserving RENAME migration (hanzoai/o11y#28):

  databases: signoz_{traces,metrics,logs,metadata,analytics,meter}
             -> o11y_{traces,metrics,logs,metadata,analytics,meter}
  tables:    (distributed_)signoz_{index_v3,index_v2,error_index_v2,spans}
             -> (distributed_)o11y_{index_v3,index_v2,error_index_v2,spans}

Word-boundary anchored (\bsignoz_<db>\b) so wire contracts are untouched:
spanmetrics/usage METRIC names (signoz_calls_total, signoz_latency,
signoz_*_count/_bytes, signoz_metadata_exporter_json_logs_processed,
signoz_normalize_operator_logs_processed), signoz.* resource ATTRIBUTES
(signoz.gen_ai.*), OTel component TYPE strings (signozclickhousemetrics,
signozclickhousemeter, signozlogspipeline, signozllmpricing), and all
github.com/SigNoz/* deps + LICENSE/NOTICE attribution all preserved.

Coordinated cutover: deploy this collector, run o11y#28 RENAME migration,
then deploy o11y + cloud readers — together, or telemetry blackholes.

go build ./... = 0. schema-migrator tests green. Two pre-existing test
failures (flaky TestExporterPushTracesData usage-collector timing;
o11ydatastoremeter go.signoz.io scope-name debrand) reproduce identically
on unmodified v0.144.7.
2026-07-09 13:08:10 -07:00

209 lines
9.2 KiB
Go

package schemamigrator
var MeterMigrations = []SchemaMigrationRecord{
{
MigrationID: 1,
UpItems: []Operation{
CreateTableOperation{
Database: "o11y_meter",
Table: "samples",
Columns: []Column{
{Name: "temporality", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'Unspecified'"},
{Name: "metric_name", Type: LowCardinalityColumnType{ColumnTypeString}},
{Name: "description", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "unit", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "type", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "is_monotonic", Type: ColumnTypeBool, Default: "false"},
{Name: "labels", Type: ColumnTypeString, Codec: "ZSTD(5)"},
{Name: "fingerprint", Type: ColumnTypeUInt64, Codec: "Delta(8), ZSTD(1)"},
{Name: "unix_milli", Type: ColumnTypeInt64, Codec: "DoubleDelta, ZSTD(1)"},
{Name: "value", Type: ColumnTypeFloat64, Codec: "Gorilla, ZSTD(1)"},
},
Engine: MergeTree{
PartitionBy: "toYYYYMM(toDateTime(intDiv(unix_milli, 1000)))",
OrderBy: "(temporality, metric_name, fingerprint, toDayOfMonth(toDateTime(intDiv(unix_milli, 1000))))",
TTL: "toDateTime(intDiv(unix_milli, 1000)) + toIntervalYear(1)",
Settings: TableSettings{
{Name: "index_granularity", Value: "8192"},
{Name: "ttl_only_drop_parts", Value: "1"},
},
},
},
},
DownItems: []Operation{
DropTableOperation{
Database: "o11y_meter",
Table: "samples",
},
},
},
{
MigrationID: 2,
UpItems: []Operation{
CreateTableOperation{
Database: "o11y_meter",
Table: "distributed_samples",
Columns: []Column{
{Name: "temporality", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'Unspecified'"},
{Name: "metric_name", Type: LowCardinalityColumnType{ColumnTypeString}},
{Name: "description", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "unit", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "type", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "is_monotonic", Type: ColumnTypeBool, Default: "false"},
{Name: "labels", Type: ColumnTypeString, Codec: "ZSTD(5)"},
{Name: "fingerprint", Type: ColumnTypeUInt64, Codec: "Delta(8), ZSTD(1)"},
{Name: "unix_milli", Type: ColumnTypeInt64, Codec: "DoubleDelta, ZSTD(1)"},
{Name: "value", Type: ColumnTypeFloat64, Codec: "Gorilla, ZSTD(1)"},
},
Engine: Distributed{
Database: "o11y_meter",
Table: "samples",
ShardingKey: "cityHash64(temporality, metric_name, fingerprint)",
},
},
},
DownItems: []Operation{
DropTableOperation{
Database: "o11y_meter",
Table: "distributed_samples",
},
},
},
{
MigrationID: 3,
UpItems: []Operation{
CreateTableOperation{
Database: "o11y_meter",
Table: "samples_agg_1d",
Columns: []Column{
{Name: "temporality", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'Unspecified'"},
{Name: "metric_name", Type: LowCardinalityColumnType{ColumnTypeString}},
{Name: "description", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "unit", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "type", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "is_monotonic", Type: ColumnTypeBool, Default: "false"},
{Name: "labels", Type: ColumnTypeString, Codec: "ZSTD(5)"},
{Name: "fingerprint", Type: ColumnTypeUInt64, Codec: "Delta(8), ZSTD(1)"},
{Name: "unix_milli", Type: ColumnTypeInt64, Codec: "DoubleDelta, ZSTD(1)"},
{Name: "last", Type: SimpleAggregateFunction{FunctionName: "anyLast", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "min", Type: SimpleAggregateFunction{FunctionName: "min", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "max", Type: SimpleAggregateFunction{FunctionName: "max", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "sum", Type: SimpleAggregateFunction{FunctionName: "sum", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "count", Type: SimpleAggregateFunction{FunctionName: "sum", Arguments: []ColumnType{ColumnTypeUInt64}}, Codec: "ZSTD(1)"},
},
Engine: AggregatingMergeTree{
MergeTree: MergeTree{
PartitionBy: "toYYYYMM(toDateTime(intDiv(unix_milli, 1000)))",
OrderBy: "(temporality, metric_name, fingerprint, toDayOfMonth(toDateTime(intDiv(unix_milli, 1000))))",
TTL: "toDateTime(intDiv(unix_milli, 1000)) + toIntervalYear(1)",
Settings: TableSettings{
{Name: "index_granularity", Value: "8192"},
{Name: "ttl_only_drop_parts", Value: "1"},
},
},
},
},
},
DownItems: []Operation{
DropTableOperation{
Database: "o11y_meter",
Table: "samples_agg_1d",
},
},
},
{
MigrationID: 4,
UpItems: []Operation{
CreateTableOperation{
Database: "o11y_meter",
Table: "distributed_samples_agg_1d",
Columns: []Column{
{Name: "temporality", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'Unspecified'"},
{Name: "metric_name", Type: LowCardinalityColumnType{ColumnTypeString}},
{Name: "description", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "unit", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "type", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "is_monotonic", Type: ColumnTypeBool, Default: "false"},
{Name: "labels", Type: ColumnTypeString, Codec: "ZSTD(5)"},
{Name: "fingerprint", Type: ColumnTypeUInt64, Codec: "Delta(8), ZSTD(1)"},
{Name: "unix_milli", Type: ColumnTypeInt64, Codec: "DoubleDelta, ZSTD(1)"},
{Name: "last", Type: SimpleAggregateFunction{FunctionName: "anyLast", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "min", Type: SimpleAggregateFunction{FunctionName: "min", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "max", Type: SimpleAggregateFunction{FunctionName: "max", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "sum", Type: SimpleAggregateFunction{FunctionName: "sum", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "count", Type: SimpleAggregateFunction{FunctionName: "sum", Arguments: []ColumnType{ColumnTypeUInt64}}, Codec: "ZSTD(1)"},
},
Engine: Distributed{
Database: "o11y_meter",
Table: "samples_agg_1d",
ShardingKey: "cityHash64(temporality, metric_name, fingerprint)",
},
},
},
DownItems: []Operation{
DropTableOperation{
Database: "o11y_meter",
Table: "distributed_samples_agg_1d",
},
},
},
{
MigrationID: 5,
UpItems: []Operation{
CreateMaterializedViewOperation{
Database: "o11y_meter",
ViewName: "samples_agg_1d_mv",
DestTable: "samples_agg_1d",
Columns: []Column{
{Name: "temporality", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'Unspecified'"},
{Name: "metric_name", Type: LowCardinalityColumnType{ColumnTypeString}},
{Name: "description", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "unit", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "type", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "'default'"},
{Name: "is_monotonic", Type: ColumnTypeBool, Default: "false"},
{Name: "labels", Type: ColumnTypeString, Codec: "ZSTD(5)"},
{Name: "fingerprint", Type: ColumnTypeUInt64, Codec: "Delta(8), ZSTD(1)"},
{Name: "unix_milli", Type: ColumnTypeInt64, Codec: "DoubleDelta, ZSTD(1)"},
{Name: "last", Type: SimpleAggregateFunction{FunctionName: "anyLast", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "min", Type: SimpleAggregateFunction{FunctionName: "min", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "max", Type: SimpleAggregateFunction{FunctionName: "max", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "sum", Type: SimpleAggregateFunction{FunctionName: "sum", Arguments: []ColumnType{ColumnTypeFloat64}}, Codec: "ZSTD(1)"},
{Name: "count", Type: SimpleAggregateFunction{FunctionName: "sum", Arguments: []ColumnType{ColumnTypeUInt64}}, Codec: "ZSTD(1)"},
},
Query: `SELECT
temporality,
metric_name,
description,
unit,
type,
is_monotonic,
labels,
fingerprint,
intDiv(unix_milli,86400000) * 86400000 as unix_milli,
anyLast(value) as last,
min(value) as min,
max(value) as max,
sum(value) as sum,
count(*) as count
FROM o11y_meter.samples
GROUP BY
temporality,
metric_name,
fingerprint,
description,
unit,
type,
is_monotonic,
labels,
unix_milli;`,
},
},
DownItems: []Operation{
DropTableOperation{
Database: "o11y_meter",
Table: "samples_agg_1d_mv",
},
},
},
}