Skip to content

feat(eap-items): add generic name column with bloom_filter index#8016

Open
phacops wants to merge 9 commits into
masterfrom
feat/add-trace-metric-name-column
Open

feat(eap-items): add generic name column with bloom_filter index#8016
phacops wants to merge 9 commits into
masterfrom
feat/add-trace-metric-name-column

Conversation

@phacops

@phacops phacops commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a generic indexed_name column to the eap_items_1 tables, with a bloom_filter index, to store and index a per-item-type "name" attribute that we frequently filter on. Promoting this commonly-filtered attribute to a dedicated indexed column lets those queries skip granules via the bloom_filter instead of scanning the attribute maps.

The column is intentionally generic (indexed_name) rather than tied to a single item type, since each item type has its own notion of a primary name attribute it gets filtered by.

Changes

  • New column indexed_name: String CODEC(ZSTD(1)), positioned after retention_days so it sits ahead of the entire attributes block (attributes_bool, attributes_int, and the string/float buckets).
    • Added to all eap_items tables: eap_items_1_local/_dist, the three downsampled tables (_downsample_8/64/512, local + dist), and the read-only distributed tables (_dist_ro) under the EVENTS_ANALYTICS_PLATFORM_RO storage set.
    • retention_days is used as the placement anchor because it's the only pre-attributes column present on every target table (the downsampled and _dist_ro variants lack downsampled_retention_days). Column order has no effect on correctness since ClickHouse inserts/selects are by name.
  • New bf_indexed_name bloom_filter index (granularity 1) on every local table: eap_items_1_local and the three _downsample_{8,64,512}_local tables, so name filtering is accelerated on the full-resolution and downsampled read paths alike.
  • Recreated downsample materialized views (mv_4mv_5) for all three sampling weights, adding indexed_name to the SELECT so the column is actually populated on the downsampled tables (the views select an explicit column list from eap_items_1_local, so the column has to be added to the views, not just the tables). The column is added to the downsample tables before the views are recreated so they have a destination to write into.
  • Fully reversible: backwards_ops restores the mv_4 views (byte-for-byte identical to migration 0049, without indexed_name) first, then drops the indexes, then the column from every table.

Generated SQL (forwards)

ALTER TABLE eap_items_1_local ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
-- + dist, the 3 downsampled local/dist tables, and the 4 _dist_ro tables
ALTER TABLE eap_items_1_local ADD INDEX IF NOT EXISTS bf_indexed_name indexed_name TYPE bloom_filter GRANULARITY 1;
-- + the 3 _downsample_{8,64,512}_local tables
CREATE MATERIALIZED VIEW IF NOT EXISTS eap_items_1_downsample_8_mv_5 TO eap_items_1_downsample_8_local (...) AS SELECT ..., indexed_name, ... FROM eap_items_1_local WHERE ...;
DROP TABLE IF EXISTS eap_items_1_downsample_8_mv_4 SYNC;
-- + the 64 and 512 downsample views

Notes

  • _dist_ro tables are created via CREATE TABLE ... AS and don't inherit later schema changes, so the column is added explicitly there for the read path.
  • This extends the bloom_filter index to the downsampled local tables, which goes a step beyond the existing bf_trace_id/bf_hashed_keys indexes (those live on the main local table only) — intentional here so name filtering benefits on downsampled queries too.

Testing

Verified the migration loads and renders the expected forward/backward SQL via EventsAnalyticsPlatformLoader, including that the backward mv_4 definition matches migration 0049 exactly.

🤖 Generated with Claude Code

Add a `trace_metric_name` LowCardinality(String) column to the
eap_items_1 tables (local, dist, and the downsampled 8/64/512 tables)
to store the trace metric name. This sets up a future bloom_filter
index on the column.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Agent transcript: https://claudescope.sentry.dev/share/NYTrkkz-0_0mKttPxUNymU3l-z042ptNDua5SgEa-Wk
@phacops phacops requested review from a team as code owners June 10, 2026 18:19
@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown

This PR has a migration; here is the generated SQL for ./snuba/migrations/groups.py ()

-- start migrations

-- forward migration events_analytics_platform : 0057_add_name_column_and_index
Local op: ALTER TABLE eap_items_1_local ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_dist ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Local op: ALTER TABLE eap_items_1_downsample_8_local ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_downsample_8_dist ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Local op: ALTER TABLE eap_items_1_downsample_64_local ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_downsample_64_dist ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Local op: ALTER TABLE eap_items_1_downsample_512_local ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_downsample_512_dist ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_dist_ro ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_downsample_8_dist_ro ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_downsample_64_dist_ro ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Distributed op: ALTER TABLE eap_items_1_downsample_512_dist_ro ON CLUSTER 'cluster_one_sh' ADD COLUMN IF NOT EXISTS indexed_name String CODEC (ZSTD(1)) AFTER retention_days;
Local op: ALTER TABLE eap_items_1_local ON CLUSTER 'cluster_one_sh' ADD INDEX IF NOT EXISTS bf_indexed_name indexed_name TYPE bloom_filter GRANULARITY 1;
Local op: ALTER TABLE eap_items_1_downsample_8_local ON CLUSTER 'cluster_one_sh' ADD INDEX IF NOT EXISTS bf_indexed_name indexed_name TYPE bloom_filter GRANULARITY 1;
Local op: ALTER TABLE eap_items_1_downsample_64_local ON CLUSTER 'cluster_one_sh' ADD INDEX IF NOT EXISTS bf_indexed_name indexed_name TYPE bloom_filter GRANULARITY 1;
Local op: ALTER TABLE eap_items_1_downsample_512_local ON CLUSTER 'cluster_one_sh' ADD INDEX IF NOT EXISTS bf_indexed_name indexed_name TYPE bloom_filter GRANULARITY 1;
Local op: CREATE MATERIALIZED VIEW IF NOT EXISTS eap_items_1_downsample_8_mv_5 ON CLUSTER 'cluster_one_sh' TO eap_items_1_downsample_8_local (organization_id UInt64, project_id UInt64, item_type UInt8, timestamp DateTime CODEC (DoubleDelta, ZSTD(1)), trace_id UUID, item_id UInt128, sampling_weight UInt64 CODEC (ZSTD(1)), sampling_factor Float64 CODEC (ZSTD(1)), retention_days UInt16 CODEC (T64, ZSTD(1)), indexed_name String CODEC (ZSTD(1)), attributes_bool Map(String, Bool), attributes_int Map(String, Int64), attributes_string_0 Map(String, String) CODEC (ZSTD(1)), attributes_string_1 Map(String, String) CODEC (ZSTD(1)), attributes_string_2 Map(String, String) CODEC (ZSTD(1)), attributes_string_3 Map(String, String) CODEC (ZSTD(1)), attributes_string_4 Map(String, String) CODEC (ZSTD(1)), attributes_string_5 Map(String, String) CODEC (ZSTD(1)), attributes_string_6 Map(String, String) CODEC (ZSTD(1)), attributes_string_7 Map(String, String) CODEC (ZSTD(1)), attributes_string_8 Map(String, String) CODEC (ZSTD(1)), attributes_string_9 Map(String, String) CODEC (ZSTD(1)), attributes_string_10 Map(String, String) CODEC (ZSTD(1)), attributes_string_11 Map(String, String) CODEC (ZSTD(1)), attributes_string_12 Map(String, String) CODEC (ZSTD(1)), attributes_string_13 Map(String, String) CODEC (ZSTD(1)), attributes_string_14 Map(String, String) CODEC (ZSTD(1)), attributes_string_15 Map(String, String) CODEC (ZSTD(1)), attributes_string_16 Map(String, String) CODEC (ZSTD(1)), attributes_string_17 Map(String, String) CODEC (ZSTD(1)), attributes_string_18 Map(String, String) CODEC (ZSTD(1)), attributes_string_19 Map(String, String) CODEC (ZSTD(1)), attributes_string_20 Map(String, String) CODEC (ZSTD(1)), attributes_string_21 Map(String, String) CODEC (ZSTD(1)), attributes_string_22 Map(String, String) CODEC (ZSTD(1)), attributes_string_23 Map(String, String) CODEC (ZSTD(1)), attributes_string_24 Map(String, String) CODEC (ZSTD(1)), attributes_string_25 Map(String, String) CODEC (ZSTD(1)), attributes_string_26 Map(String, String) CODEC (ZSTD(1)), attributes_string_27 Map(String, String) CODEC (ZSTD(1)), attributes_string_28 Map(String, String) CODEC (ZSTD(1)), attributes_string_29 Map(String, String) CODEC (ZSTD(1)), attributes_string_30 Map(String, String) CODEC (ZSTD(1)), attributes_string_31 Map(String, String) CODEC (ZSTD(1)), attributes_string_32 Map(String, String) CODEC (ZSTD(1)), attributes_string_33 Map(String, String) CODEC (ZSTD(1)), attributes_string_34 Map(String, String) CODEC (ZSTD(1)), attributes_string_35 Map(String, String) CODEC (ZSTD(1)), attributes_string_36 Map(String, String) CODEC (ZSTD(1)), attributes_string_37 Map(String, String) CODEC (ZSTD(1)), attributes_string_38 Map(String, String) CODEC (ZSTD(1)), attributes_string_39 Map(String, String) CODEC (ZSTD(1)), attributes_float_0 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_1 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_2 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_3 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_4 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_5 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_6 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_7 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_8 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_9 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_10 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_11 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_12 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_13 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_14 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_15 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_16 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_17 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_18 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_19 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_20 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_21 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_22 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_23 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_24 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_25 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_26 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_27 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_28 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_29 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_30 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_31 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_32 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_33 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_34 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_35 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_36 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_37 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_38 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_39 Map(String, Float64) CODEC (ZSTD(1))) AS SELECT organization_id, project_id, item_type, timestamp, trace_id, item_id, indexed_name, attributes_bool, attributes_int, attributes_string_0, attributes_string_1, attributes_string_2, attributes_string_3, attributes_string_4, attributes_string_5, attributes_string_6, attributes_string_7, attributes_string_8, attributes_string_9, attributes_string_10, attributes_string_11, attributes_string_12, attributes_string_13, attributes_string_14, attributes_string_15, attributes_string_16, attributes_string_17, attributes_string_18, attributes_string_19, attributes_string_20, attributes_string_21, attributes_string_22, attributes_string_23, attributes_string_24, attributes_string_25, attributes_string_26, attributes_string_27, attributes_string_28, attributes_string_29, attributes_string_30, attributes_string_31, attributes_string_32, attributes_string_33, attributes_string_34, attributes_string_35, attributes_string_36, attributes_string_37, attributes_string_38, attributes_string_39, attributes_float_0, attributes_float_1, attributes_float_2, attributes_float_3, attributes_float_4, attributes_float_5, attributes_float_6, attributes_float_7, attributes_float_8, attributes_float_9, attributes_float_10, attributes_float_11, attributes_float_12, attributes_float_13, attributes_float_14, attributes_float_15, attributes_float_16, attributes_float_17, attributes_float_18, attributes_float_19, attributes_float_20, attributes_float_21, attributes_float_22, attributes_float_23, attributes_float_24, attributes_float_25, attributes_float_26, attributes_float_27, attributes_float_28, attributes_float_29, attributes_float_30, attributes_float_31, attributes_float_32, attributes_float_33, attributes_float_34, attributes_float_35, attributes_float_36, attributes_float_37, attributes_float_38, attributes_float_39, downsampled_retention_days AS retention_days, sampling_weight * 8 AS sampling_weight, sampling_factor / 8 AS sampling_factor, client_sample_rate / 8 AS client_sample_rate, server_sample_rate / 8 AS server_sample_rate FROM eap_items_1_local WHERE (cityHash64(item_id + 8)  % 8) = 0;
Local op: DROP TABLE IF EXISTS eap_items_1_downsample_8_mv_4 ON CLUSTER 'cluster_one_sh' SYNC;
Local op: CREATE MATERIALIZED VIEW IF NOT EXISTS eap_items_1_downsample_64_mv_5 ON CLUSTER 'cluster_one_sh' TO eap_items_1_downsample_64_local (organization_id UInt64, project_id UInt64, item_type UInt8, timestamp DateTime CODEC (DoubleDelta, ZSTD(1)), trace_id UUID, item_id UInt128, sampling_weight UInt64 CODEC (ZSTD(1)), sampling_factor Float64 CODEC (ZSTD(1)), retention_days UInt16 CODEC (T64, ZSTD(1)), indexed_name String CODEC (ZSTD(1)), attributes_bool Map(String, Bool), attributes_int Map(String, Int64), attributes_string_0 Map(String, String) CODEC (ZSTD(1)), attributes_string_1 Map(String, String) CODEC (ZSTD(1)), attributes_string_2 Map(String, String) CODEC (ZSTD(1)), attributes_string_3 Map(String, String) CODEC (ZSTD(1)), attributes_string_4 Map(String, String) CODEC (ZSTD(1)), attributes_string_5 Map(String, String) CODEC (ZSTD(1)), attributes_string_6 Map(String, String) CODEC (ZSTD(1)), attributes_string_7 Map(String, String) CODEC (ZSTD(1)), attributes_string_8 Map(String, String) CODEC (ZSTD(1)), attributes_string_9 Map(String, String) CODEC (ZSTD(1)), attributes_string_10 Map(String, String) CODEC (ZSTD(1)), attributes_string_11 Map(String, String) CODEC (ZSTD(1)), attributes_string_12 Map(String, String) CODEC (ZSTD(1)), attributes_string_13 Map(String, String) CODEC (ZSTD(1)), attributes_string_14 Map(String, String) CODEC (ZSTD(1)), attributes_string_15 Map(String, String) CODEC (ZSTD(1)), attributes_string_16 Map(String, String) CODEC (ZSTD(1)), attributes_string_17 Map(String, String) CODEC (ZSTD(1)), attributes_string_18 Map(String, String) CODEC (ZSTD(1)), attributes_string_19 Map(String, String) CODEC (ZSTD(1)), attributes_string_20 Map(String, String) CODEC (ZSTD(1)), attributes_string_21 Map(String, String) CODEC (ZSTD(1)), attributes_string_22 Map(String, String) CODEC (ZSTD(1)), attributes_string_23 Map(String, String) CODEC (ZSTD(1)), attributes_string_24 Map(String, String) CODEC (ZSTD(1)), attributes_string_25 Map(String, String) CODEC (ZSTD(1)), attributes_string_26 Map(String, String) CODEC (ZSTD(1)), attributes_string_27 Map(String, String) CODEC (ZSTD(1)), attributes_string_28 Map(String, String) CODEC (ZSTD(1)), attributes_string_29 Map(String, String) CODEC (ZSTD(1)), attributes_string_30 Map(String, String) CODEC (ZSTD(1)), attributes_string_31 Map(String, String) CODEC (ZSTD(1)), attributes_string_32 Map(String, String) CODEC (ZSTD(1)), attributes_string_33 Map(String, String) CODEC (ZSTD(1)), attributes_string_34 Map(String, String) CODEC (ZSTD(1)), attributes_string_35 Map(String, String) CODEC (ZSTD(1)), attributes_string_36 Map(String, String) CODEC (ZSTD(1)), attributes_string_37 Map(String, String) CODEC (ZSTD(1)), attributes_string_38 Map(String, String) CODEC (ZSTD(1)), attributes_string_39 Map(String, String) CODEC (ZSTD(1)), attributes_float_0 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_1 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_2 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_3 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_4 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_5 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_6 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_7 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_8 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_9 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_10 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_11 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_12 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_13 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_14 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_15 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_16 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_17 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_18 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_19 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_20 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_21 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_22 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_23 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_24 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_25 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_26 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_27 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_28 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_29 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_30 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_31 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_32 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_33 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_34 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_35 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_36 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_37 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_38 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_39 Map(String, Float64) CODEC (ZSTD(1))) AS SELECT organization_id, project_id, item_type, timestamp, trace_id, item_id, indexed_name, attributes_bool, attributes_int, attributes_string_0, attributes_string_1, attributes_string_2, attributes_string_3, attributes_string_4, attributes_string_5, attributes_string_6, attributes_string_7, attributes_string_8, attributes_string_9, attributes_string_10, attributes_string_11, attributes_string_12, attributes_string_13, attributes_string_14, attributes_string_15, attributes_string_16, attributes_string_17, attributes_string_18, attributes_string_19, attributes_string_20, attributes_string_21, attributes_string_22, attributes_string_23, attributes_string_24, attributes_string_25, attributes_string_26, attributes_string_27, attributes_string_28, attributes_string_29, attributes_string_30, attributes_string_31, attributes_string_32, attributes_string_33, attributes_string_34, attributes_string_35, attributes_string_36, attributes_string_37, attributes_string_38, attributes_string_39, attributes_float_0, attributes_float_1, attributes_float_2, attributes_float_3, attributes_float_4, attributes_float_5, attributes_float_6, attributes_float_7, attributes_float_8, attributes_float_9, attributes_float_10, attributes_float_11, attributes_float_12, attributes_float_13, attributes_float_14, attributes_float_15, attributes_float_16, attributes_float_17, attributes_float_18, attributes_float_19, attributes_float_20, attributes_float_21, attributes_float_22, attributes_float_23, attributes_float_24, attributes_float_25, attributes_float_26, attributes_float_27, attributes_float_28, attributes_float_29, attributes_float_30, attributes_float_31, attributes_float_32, attributes_float_33, attributes_float_34, attributes_float_35, attributes_float_36, attributes_float_37, attributes_float_38, attributes_float_39, downsampled_retention_days AS retention_days, sampling_weight * 64 AS sampling_weight, sampling_factor / 64 AS sampling_factor, client_sample_rate / 64 AS client_sample_rate, server_sample_rate / 64 AS server_sample_rate FROM eap_items_1_local WHERE (cityHash64(item_id + 64)  % 64) = 0;
Local op: DROP TABLE IF EXISTS eap_items_1_downsample_64_mv_4 ON CLUSTER 'cluster_one_sh' SYNC;
Local op: CREATE MATERIALIZED VIEW IF NOT EXISTS eap_items_1_downsample_512_mv_5 ON CLUSTER 'cluster_one_sh' TO eap_items_1_downsample_512_local (organization_id UInt64, project_id UInt64, item_type UInt8, timestamp DateTime CODEC (DoubleDelta, ZSTD(1)), trace_id UUID, item_id UInt128, sampling_weight UInt64 CODEC (ZSTD(1)), sampling_factor Float64 CODEC (ZSTD(1)), retention_days UInt16 CODEC (T64, ZSTD(1)), indexed_name String CODEC (ZSTD(1)), attributes_bool Map(String, Bool), attributes_int Map(String, Int64), attributes_string_0 Map(String, String) CODEC (ZSTD(1)), attributes_string_1 Map(String, String) CODEC (ZSTD(1)), attributes_string_2 Map(String, String) CODEC (ZSTD(1)), attributes_string_3 Map(String, String) CODEC (ZSTD(1)), attributes_string_4 Map(String, String) CODEC (ZSTD(1)), attributes_string_5 Map(String, String) CODEC (ZSTD(1)), attributes_string_6 Map(String, String) CODEC (ZSTD(1)), attributes_string_7 Map(String, String) CODEC (ZSTD(1)), attributes_string_8 Map(String, String) CODEC (ZSTD(1)), attributes_string_9 Map(String, String) CODEC (ZSTD(1)), attributes_string_10 Map(String, String) CODEC (ZSTD(1)), attributes_string_11 Map(String, String) CODEC (ZSTD(1)), attributes_string_12 Map(String, String) CODEC (ZSTD(1)), attributes_string_13 Map(String, String) CODEC (ZSTD(1)), attributes_string_14 Map(String, String) CODEC (ZSTD(1)), attributes_string_15 Map(String, String) CODEC (ZSTD(1)), attributes_string_16 Map(String, String) CODEC (ZSTD(1)), attributes_string_17 Map(String, String) CODEC (ZSTD(1)), attributes_string_18 Map(String, String) CODEC (ZSTD(1)), attributes_string_19 Map(String, String) CODEC (ZSTD(1)), attributes_string_20 Map(String, String) CODEC (ZSTD(1)), attributes_string_21 Map(String, String) CODEC (ZSTD(1)), attributes_string_22 Map(String, String) CODEC (ZSTD(1)), attributes_string_23 Map(String, String) CODEC (ZSTD(1)), attributes_string_24 Map(String, String) CODEC (ZSTD(1)), attributes_string_25 Map(String, String) CODEC (ZSTD(1)), attributes_string_26 Map(String, String) CODEC (ZSTD(1)), attributes_string_27 Map(String, String) CODEC (ZSTD(1)), attributes_string_28 Map(String, String) CODEC (ZSTD(1)), attributes_string_29 Map(String, String) CODEC (ZSTD(1)), attributes_string_30 Map(String, String) CODEC (ZSTD(1)), attributes_string_31 Map(String, String) CODEC (ZSTD(1)), attributes_string_32 Map(String, String) CODEC (ZSTD(1)), attributes_string_33 Map(String, String) CODEC (ZSTD(1)), attributes_string_34 Map(String, String) CODEC (ZSTD(1)), attributes_string_35 Map(String, String) CODEC (ZSTD(1)), attributes_string_36 Map(String, String) CODEC (ZSTD(1)), attributes_string_37 Map(String, String) CODEC (ZSTD(1)), attributes_string_38 Map(String, String) CODEC (ZSTD(1)), attributes_string_39 Map(String, String) CODEC (ZSTD(1)), attributes_float_0 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_1 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_2 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_3 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_4 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_5 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_6 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_7 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_8 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_9 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_10 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_11 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_12 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_13 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_14 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_15 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_16 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_17 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_18 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_19 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_20 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_21 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_22 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_23 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_24 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_25 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_26 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_27 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_28 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_29 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_30 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_31 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_32 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_33 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_34 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_35 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_36 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_37 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_38 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_39 Map(String, Float64) CODEC (ZSTD(1))) AS SELECT organization_id, project_id, item_type, timestamp, trace_id, item_id, indexed_name, attributes_bool, attributes_int, attributes_string_0, attributes_string_1, attributes_string_2, attributes_string_3, attributes_string_4, attributes_string_5, attributes_string_6, attributes_string_7, attributes_string_8, attributes_string_9, attributes_string_10, attributes_string_11, attributes_string_12, attributes_string_13, attributes_string_14, attributes_string_15, attributes_string_16, attributes_string_17, attributes_string_18, attributes_string_19, attributes_string_20, attributes_string_21, attributes_string_22, attributes_string_23, attributes_string_24, attributes_string_25, attributes_string_26, attributes_string_27, attributes_string_28, attributes_string_29, attributes_string_30, attributes_string_31, attributes_string_32, attributes_string_33, attributes_string_34, attributes_string_35, attributes_string_36, attributes_string_37, attributes_string_38, attributes_string_39, attributes_float_0, attributes_float_1, attributes_float_2, attributes_float_3, attributes_float_4, attributes_float_5, attributes_float_6, attributes_float_7, attributes_float_8, attributes_float_9, attributes_float_10, attributes_float_11, attributes_float_12, attributes_float_13, attributes_float_14, attributes_float_15, attributes_float_16, attributes_float_17, attributes_float_18, attributes_float_19, attributes_float_20, attributes_float_21, attributes_float_22, attributes_float_23, attributes_float_24, attributes_float_25, attributes_float_26, attributes_float_27, attributes_float_28, attributes_float_29, attributes_float_30, attributes_float_31, attributes_float_32, attributes_float_33, attributes_float_34, attributes_float_35, attributes_float_36, attributes_float_37, attributes_float_38, attributes_float_39, downsampled_retention_days AS retention_days, sampling_weight * 512 AS sampling_weight, sampling_factor / 512 AS sampling_factor, client_sample_rate / 512 AS client_sample_rate, server_sample_rate / 512 AS server_sample_rate FROM eap_items_1_local WHERE (cityHash64(item_id + 512)  % 512) = 0;
Local op: DROP TABLE IF EXISTS eap_items_1_downsample_512_mv_4 ON CLUSTER 'cluster_one_sh' SYNC;
-- end forward migration events_analytics_platform : 0057_add_name_column_and_index




-- backward migration events_analytics_platform : 0057_add_name_column_and_index
Local op: CREATE MATERIALIZED VIEW IF NOT EXISTS eap_items_1_downsample_8_mv_4 ON CLUSTER 'cluster_one_sh' TO eap_items_1_downsample_8_local (organization_id UInt64, project_id UInt64, item_type UInt8, timestamp DateTime CODEC (DoubleDelta, ZSTD(1)), trace_id UUID, item_id UInt128, sampling_weight UInt64 CODEC (ZSTD(1)), sampling_factor Float64 CODEC (ZSTD(1)), retention_days UInt16 CODEC (T64, ZSTD(1)), attributes_bool Map(String, Bool), attributes_int Map(String, Int64), attributes_string_0 Map(String, String) CODEC (ZSTD(1)), attributes_string_1 Map(String, String) CODEC (ZSTD(1)), attributes_string_2 Map(String, String) CODEC (ZSTD(1)), attributes_string_3 Map(String, String) CODEC (ZSTD(1)), attributes_string_4 Map(String, String) CODEC (ZSTD(1)), attributes_string_5 Map(String, String) CODEC (ZSTD(1)), attributes_string_6 Map(String, String) CODEC (ZSTD(1)), attributes_string_7 Map(String, String) CODEC (ZSTD(1)), attributes_string_8 Map(String, String) CODEC (ZSTD(1)), attributes_string_9 Map(String, String) CODEC (ZSTD(1)), attributes_string_10 Map(String, String) CODEC (ZSTD(1)), attributes_string_11 Map(String, String) CODEC (ZSTD(1)), attributes_string_12 Map(String, String) CODEC (ZSTD(1)), attributes_string_13 Map(String, String) CODEC (ZSTD(1)), attributes_string_14 Map(String, String) CODEC (ZSTD(1)), attributes_string_15 Map(String, String) CODEC (ZSTD(1)), attributes_string_16 Map(String, String) CODEC (ZSTD(1)), attributes_string_17 Map(String, String) CODEC (ZSTD(1)), attributes_string_18 Map(String, String) CODEC (ZSTD(1)), attributes_string_19 Map(String, String) CODEC (ZSTD(1)), attributes_string_20 Map(String, String) CODEC (ZSTD(1)), attributes_string_21 Map(String, String) CODEC (ZSTD(1)), attributes_string_22 Map(String, String) CODEC (ZSTD(1)), attributes_string_23 Map(String, String) CODEC (ZSTD(1)), attributes_string_24 Map(String, String) CODEC (ZSTD(1)), attributes_string_25 Map(String, String) CODEC (ZSTD(1)), attributes_string_26 Map(String, String) CODEC (ZSTD(1)), attributes_string_27 Map(String, String) CODEC (ZSTD(1)), attributes_string_28 Map(String, String) CODEC (ZSTD(1)), attributes_string_29 Map(String, String) CODEC (ZSTD(1)), attributes_string_30 Map(String, String) CODEC (ZSTD(1)), attributes_string_31 Map(String, String) CODEC (ZSTD(1)), attributes_string_32 Map(String, String) CODEC (ZSTD(1)), attributes_string_33 Map(String, String) CODEC (ZSTD(1)), attributes_string_34 Map(String, String) CODEC (ZSTD(1)), attributes_string_35 Map(String, String) CODEC (ZSTD(1)), attributes_string_36 Map(String, String) CODEC (ZSTD(1)), attributes_string_37 Map(String, String) CODEC (ZSTD(1)), attributes_string_38 Map(String, String) CODEC (ZSTD(1)), attributes_string_39 Map(String, String) CODEC (ZSTD(1)), attributes_float_0 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_1 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_2 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_3 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_4 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_5 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_6 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_7 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_8 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_9 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_10 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_11 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_12 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_13 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_14 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_15 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_16 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_17 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_18 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_19 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_20 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_21 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_22 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_23 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_24 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_25 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_26 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_27 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_28 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_29 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_30 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_31 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_32 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_33 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_34 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_35 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_36 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_37 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_38 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_39 Map(String, Float64) CODEC (ZSTD(1))) AS SELECT organization_id, project_id, item_type, timestamp, trace_id, item_id, attributes_bool, attributes_int, attributes_string_0, attributes_string_1, attributes_string_2, attributes_string_3, attributes_string_4, attributes_string_5, attributes_string_6, attributes_string_7, attributes_string_8, attributes_string_9, attributes_string_10, attributes_string_11, attributes_string_12, attributes_string_13, attributes_string_14, attributes_string_15, attributes_string_16, attributes_string_17, attributes_string_18, attributes_string_19, attributes_string_20, attributes_string_21, attributes_string_22, attributes_string_23, attributes_string_24, attributes_string_25, attributes_string_26, attributes_string_27, attributes_string_28, attributes_string_29, attributes_string_30, attributes_string_31, attributes_string_32, attributes_string_33, attributes_string_34, attributes_string_35, attributes_string_36, attributes_string_37, attributes_string_38, attributes_string_39, attributes_float_0, attributes_float_1, attributes_float_2, attributes_float_3, attributes_float_4, attributes_float_5, attributes_float_6, attributes_float_7, attributes_float_8, attributes_float_9, attributes_float_10, attributes_float_11, attributes_float_12, attributes_float_13, attributes_float_14, attributes_float_15, attributes_float_16, attributes_float_17, attributes_float_18, attributes_float_19, attributes_float_20, attributes_float_21, attributes_float_22, attributes_float_23, attributes_float_24, attributes_float_25, attributes_float_26, attributes_float_27, attributes_float_28, attributes_float_29, attributes_float_30, attributes_float_31, attributes_float_32, attributes_float_33, attributes_float_34, attributes_float_35, attributes_float_36, attributes_float_37, attributes_float_38, attributes_float_39, downsampled_retention_days AS retention_days, sampling_weight * 8 AS sampling_weight, sampling_factor / 8 AS sampling_factor, client_sample_rate / 8 AS client_sample_rate, server_sample_rate / 8 AS server_sample_rate FROM eap_items_1_local WHERE (cityHash64(item_id + 8)  % 8) = 0;
Local op: DROP TABLE IF EXISTS eap_items_1_downsample_8_mv_5 ON CLUSTER 'cluster_one_sh' SYNC;
Local op: CREATE MATERIALIZED VIEW IF NOT EXISTS eap_items_1_downsample_64_mv_4 ON CLUSTER 'cluster_one_sh' TO eap_items_1_downsample_64_local (organization_id UInt64, project_id UInt64, item_type UInt8, timestamp DateTime CODEC (DoubleDelta, ZSTD(1)), trace_id UUID, item_id UInt128, sampling_weight UInt64 CODEC (ZSTD(1)), sampling_factor Float64 CODEC (ZSTD(1)), retention_days UInt16 CODEC (T64, ZSTD(1)), attributes_bool Map(String, Bool), attributes_int Map(String, Int64), attributes_string_0 Map(String, String) CODEC (ZSTD(1)), attributes_string_1 Map(String, String) CODEC (ZSTD(1)), attributes_string_2 Map(String, String) CODEC (ZSTD(1)), attributes_string_3 Map(String, String) CODEC (ZSTD(1)), attributes_string_4 Map(String, String) CODEC (ZSTD(1)), attributes_string_5 Map(String, String) CODEC (ZSTD(1)), attributes_string_6 Map(String, String) CODEC (ZSTD(1)), attributes_string_7 Map(String, String) CODEC (ZSTD(1)), attributes_string_8 Map(String, String) CODEC (ZSTD(1)), attributes_string_9 Map(String, String) CODEC (ZSTD(1)), attributes_string_10 Map(String, String) CODEC (ZSTD(1)), attributes_string_11 Map(String, String) CODEC (ZSTD(1)), attributes_string_12 Map(String, String) CODEC (ZSTD(1)), attributes_string_13 Map(String, String) CODEC (ZSTD(1)), attributes_string_14 Map(String, String) CODEC (ZSTD(1)), attributes_string_15 Map(String, String) CODEC (ZSTD(1)), attributes_string_16 Map(String, String) CODEC (ZSTD(1)), attributes_string_17 Map(String, String) CODEC (ZSTD(1)), attributes_string_18 Map(String, String) CODEC (ZSTD(1)), attributes_string_19 Map(String, String) CODEC (ZSTD(1)), attributes_string_20 Map(String, String) CODEC (ZSTD(1)), attributes_string_21 Map(String, String) CODEC (ZSTD(1)), attributes_string_22 Map(String, String) CODEC (ZSTD(1)), attributes_string_23 Map(String, String) CODEC (ZSTD(1)), attributes_string_24 Map(String, String) CODEC (ZSTD(1)), attributes_string_25 Map(String, String) CODEC (ZSTD(1)), attributes_string_26 Map(String, String) CODEC (ZSTD(1)), attributes_string_27 Map(String, String) CODEC (ZSTD(1)), attributes_string_28 Map(String, String) CODEC (ZSTD(1)), attributes_string_29 Map(String, String) CODEC (ZSTD(1)), attributes_string_30 Map(String, String) CODEC (ZSTD(1)), attributes_string_31 Map(String, String) CODEC (ZSTD(1)), attributes_string_32 Map(String, String) CODEC (ZSTD(1)), attributes_string_33 Map(String, String) CODEC (ZSTD(1)), attributes_string_34 Map(String, String) CODEC (ZSTD(1)), attributes_string_35 Map(String, String) CODEC (ZSTD(1)), attributes_string_36 Map(String, String) CODEC (ZSTD(1)), attributes_string_37 Map(String, String) CODEC (ZSTD(1)), attributes_string_38 Map(String, String) CODEC (ZSTD(1)), attributes_string_39 Map(String, String) CODEC (ZSTD(1)), attributes_float_0 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_1 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_2 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_3 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_4 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_5 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_6 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_7 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_8 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_9 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_10 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_11 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_12 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_13 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_14 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_15 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_16 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_17 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_18 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_19 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_20 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_21 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_22 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_23 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_24 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_25 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_26 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_27 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_28 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_29 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_30 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_31 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_32 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_33 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_34 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_35 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_36 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_37 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_38 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_39 Map(String, Float64) CODEC (ZSTD(1))) AS SELECT organization_id, project_id, item_type, timestamp, trace_id, item_id, attributes_bool, attributes_int, attributes_string_0, attributes_string_1, attributes_string_2, attributes_string_3, attributes_string_4, attributes_string_5, attributes_string_6, attributes_string_7, attributes_string_8, attributes_string_9, attributes_string_10, attributes_string_11, attributes_string_12, attributes_string_13, attributes_string_14, attributes_string_15, attributes_string_16, attributes_string_17, attributes_string_18, attributes_string_19, attributes_string_20, attributes_string_21, attributes_string_22, attributes_string_23, attributes_string_24, attributes_string_25, attributes_string_26, attributes_string_27, attributes_string_28, attributes_string_29, attributes_string_30, attributes_string_31, attributes_string_32, attributes_string_33, attributes_string_34, attributes_string_35, attributes_string_36, attributes_string_37, attributes_string_38, attributes_string_39, attributes_float_0, attributes_float_1, attributes_float_2, attributes_float_3, attributes_float_4, attributes_float_5, attributes_float_6, attributes_float_7, attributes_float_8, attributes_float_9, attributes_float_10, attributes_float_11, attributes_float_12, attributes_float_13, attributes_float_14, attributes_float_15, attributes_float_16, attributes_float_17, attributes_float_18, attributes_float_19, attributes_float_20, attributes_float_21, attributes_float_22, attributes_float_23, attributes_float_24, attributes_float_25, attributes_float_26, attributes_float_27, attributes_float_28, attributes_float_29, attributes_float_30, attributes_float_31, attributes_float_32, attributes_float_33, attributes_float_34, attributes_float_35, attributes_float_36, attributes_float_37, attributes_float_38, attributes_float_39, downsampled_retention_days AS retention_days, sampling_weight * 64 AS sampling_weight, sampling_factor / 64 AS sampling_factor, client_sample_rate / 64 AS client_sample_rate, server_sample_rate / 64 AS server_sample_rate FROM eap_items_1_local WHERE (cityHash64(item_id + 64)  % 64) = 0;
Local op: DROP TABLE IF EXISTS eap_items_1_downsample_64_mv_5 ON CLUSTER 'cluster_one_sh' SYNC;
Local op: CREATE MATERIALIZED VIEW IF NOT EXISTS eap_items_1_downsample_512_mv_4 ON CLUSTER 'cluster_one_sh' TO eap_items_1_downsample_512_local (organization_id UInt64, project_id UInt64, item_type UInt8, timestamp DateTime CODEC (DoubleDelta, ZSTD(1)), trace_id UUID, item_id UInt128, sampling_weight UInt64 CODEC (ZSTD(1)), sampling_factor Float64 CODEC (ZSTD(1)), retention_days UInt16 CODEC (T64, ZSTD(1)), attributes_bool Map(String, Bool), attributes_int Map(String, Int64), attributes_string_0 Map(String, String) CODEC (ZSTD(1)), attributes_string_1 Map(String, String) CODEC (ZSTD(1)), attributes_string_2 Map(String, String) CODEC (ZSTD(1)), attributes_string_3 Map(String, String) CODEC (ZSTD(1)), attributes_string_4 Map(String, String) CODEC (ZSTD(1)), attributes_string_5 Map(String, String) CODEC (ZSTD(1)), attributes_string_6 Map(String, String) CODEC (ZSTD(1)), attributes_string_7 Map(String, String) CODEC (ZSTD(1)), attributes_string_8 Map(String, String) CODEC (ZSTD(1)), attributes_string_9 Map(String, String) CODEC (ZSTD(1)), attributes_string_10 Map(String, String) CODEC (ZSTD(1)), attributes_string_11 Map(String, String) CODEC (ZSTD(1)), attributes_string_12 Map(String, String) CODEC (ZSTD(1)), attributes_string_13 Map(String, String) CODEC (ZSTD(1)), attributes_string_14 Map(String, String) CODEC (ZSTD(1)), attributes_string_15 Map(String, String) CODEC (ZSTD(1)), attributes_string_16 Map(String, String) CODEC (ZSTD(1)), attributes_string_17 Map(String, String) CODEC (ZSTD(1)), attributes_string_18 Map(String, String) CODEC (ZSTD(1)), attributes_string_19 Map(String, String) CODEC (ZSTD(1)), attributes_string_20 Map(String, String) CODEC (ZSTD(1)), attributes_string_21 Map(String, String) CODEC (ZSTD(1)), attributes_string_22 Map(String, String) CODEC (ZSTD(1)), attributes_string_23 Map(String, String) CODEC (ZSTD(1)), attributes_string_24 Map(String, String) CODEC (ZSTD(1)), attributes_string_25 Map(String, String) CODEC (ZSTD(1)), attributes_string_26 Map(String, String) CODEC (ZSTD(1)), attributes_string_27 Map(String, String) CODEC (ZSTD(1)), attributes_string_28 Map(String, String) CODEC (ZSTD(1)), attributes_string_29 Map(String, String) CODEC (ZSTD(1)), attributes_string_30 Map(String, String) CODEC (ZSTD(1)), attributes_string_31 Map(String, String) CODEC (ZSTD(1)), attributes_string_32 Map(String, String) CODEC (ZSTD(1)), attributes_string_33 Map(String, String) CODEC (ZSTD(1)), attributes_string_34 Map(String, String) CODEC (ZSTD(1)), attributes_string_35 Map(String, String) CODEC (ZSTD(1)), attributes_string_36 Map(String, String) CODEC (ZSTD(1)), attributes_string_37 Map(String, String) CODEC (ZSTD(1)), attributes_string_38 Map(String, String) CODEC (ZSTD(1)), attributes_string_39 Map(String, String) CODEC (ZSTD(1)), attributes_float_0 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_1 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_2 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_3 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_4 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_5 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_6 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_7 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_8 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_9 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_10 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_11 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_12 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_13 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_14 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_15 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_16 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_17 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_18 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_19 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_20 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_21 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_22 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_23 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_24 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_25 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_26 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_27 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_28 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_29 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_30 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_31 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_32 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_33 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_34 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_35 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_36 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_37 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_38 Map(String, Float64) CODEC (ZSTD(1)), attributes_float_39 Map(String, Float64) CODEC (ZSTD(1))) AS SELECT organization_id, project_id, item_type, timestamp, trace_id, item_id, attributes_bool, attributes_int, attributes_string_0, attributes_string_1, attributes_string_2, attributes_string_3, attributes_string_4, attributes_string_5, attributes_string_6, attributes_string_7, attributes_string_8, attributes_string_9, attributes_string_10, attributes_string_11, attributes_string_12, attributes_string_13, attributes_string_14, attributes_string_15, attributes_string_16, attributes_string_17, attributes_string_18, attributes_string_19, attributes_string_20, attributes_string_21, attributes_string_22, attributes_string_23, attributes_string_24, attributes_string_25, attributes_string_26, attributes_string_27, attributes_string_28, attributes_string_29, attributes_string_30, attributes_string_31, attributes_string_32, attributes_string_33, attributes_string_34, attributes_string_35, attributes_string_36, attributes_string_37, attributes_string_38, attributes_string_39, attributes_float_0, attributes_float_1, attributes_float_2, attributes_float_3, attributes_float_4, attributes_float_5, attributes_float_6, attributes_float_7, attributes_float_8, attributes_float_9, attributes_float_10, attributes_float_11, attributes_float_12, attributes_float_13, attributes_float_14, attributes_float_15, attributes_float_16, attributes_float_17, attributes_float_18, attributes_float_19, attributes_float_20, attributes_float_21, attributes_float_22, attributes_float_23, attributes_float_24, attributes_float_25, attributes_float_26, attributes_float_27, attributes_float_28, attributes_float_29, attributes_float_30, attributes_float_31, attributes_float_32, attributes_float_33, attributes_float_34, attributes_float_35, attributes_float_36, attributes_float_37, attributes_float_38, attributes_float_39, downsampled_retention_days AS retention_days, sampling_weight * 512 AS sampling_weight, sampling_factor / 512 AS sampling_factor, client_sample_rate / 512 AS client_sample_rate, server_sample_rate / 512 AS server_sample_rate FROM eap_items_1_local WHERE (cityHash64(item_id + 512)  % 512) = 0;
Local op: DROP TABLE IF EXISTS eap_items_1_downsample_512_mv_5 ON CLUSTER 'cluster_one_sh' SYNC;
Local op: ALTER TABLE eap_items_1_local ON CLUSTER 'cluster_one_sh' DROP INDEX IF EXISTS bf_indexed_name;
Local op: ALTER TABLE eap_items_1_downsample_8_local ON CLUSTER 'cluster_one_sh' DROP INDEX IF EXISTS bf_indexed_name;
Local op: ALTER TABLE eap_items_1_downsample_64_local ON CLUSTER 'cluster_one_sh' DROP INDEX IF EXISTS bf_indexed_name;
Local op: ALTER TABLE eap_items_1_downsample_512_local ON CLUSTER 'cluster_one_sh' DROP INDEX IF EXISTS bf_indexed_name;
Distributed op: ALTER TABLE eap_items_1_dist ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Local op: ALTER TABLE eap_items_1_local ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Distributed op: ALTER TABLE eap_items_1_downsample_8_dist ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Local op: ALTER TABLE eap_items_1_downsample_8_local ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Distributed op: ALTER TABLE eap_items_1_downsample_64_dist ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Local op: ALTER TABLE eap_items_1_downsample_64_local ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Distributed op: ALTER TABLE eap_items_1_downsample_512_dist ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Local op: ALTER TABLE eap_items_1_downsample_512_local ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Distributed op: ALTER TABLE eap_items_1_dist_ro ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Distributed op: ALTER TABLE eap_items_1_downsample_8_dist_ro ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Distributed op: ALTER TABLE eap_items_1_downsample_64_dist_ro ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
Distributed op: ALTER TABLE eap_items_1_downsample_512_dist_ro ON CLUSTER 'cluster_one_sh' DROP COLUMN IF EXISTS indexed_name;
-- end backward migration events_analytics_platform : 0057_add_name_column_and_index

phacops and others added 2 commits June 10, 2026 11:28
The _dist_ro tables are created via `CREATE TABLE ... AS` and do not
inherit schema changes from their source tables, so the column must be
added explicitly for the read path to see it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rename the new column from `trace_metric_name` to `name` and add a
`bf_name` bloom_filter index on `eap_items_1_local`, matching the
existing bloom_filter index convention (local table only).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Agent transcript: https://claudescope.sentry.dev/share/qdL1I1HW5uIk6IHkW6Dx9PXWP25TprCOs-FEFCgoxQg
@phacops phacops changed the title feat(eap-items): add trace_metric_name column feat(eap-items): add name column with bloom_filter index Jun 10, 2026
Add the bf_name bloom_filter index to the downsampled local tables
(eap_items_1_downsample_{8,64,512}_local) in addition to the main
eap_items_1_local table, so name lookups are accelerated on the
downsampled read paths as well.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@phacops phacops changed the title feat(eap-items): add name column with bloom_filter index feat(eap-items): add generic name column with bloom_filter index Jun 10, 2026
phacops and others added 2 commits June 10, 2026 12:24
Place the name column after attributes_int (before attributes_string_0)
so it sits ahead of all the string/float attribute bucket columns
instead of after attributes_array.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Agent transcript: https://claudescope.sentry.dev/share/D5xH-5PKdtHd7RX0JgQzXhCz8wJnAXR_d5sDw_M9dcw
Anchor the name column after retention_days so it precedes the entire
attributes block (attributes_bool, attributes_int, and the string/float
buckets). retention_days is used as the anchor because it exists on
every target table, including the downsampled and _dist_ro variants.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
),
),
]
after = "retention_days"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong column placement anchor

Medium Severity

The migration sets after to retention_days, so every AddColumn emits AFTER retention_days. The PR and intended DDL place name immediately after attributes_array at the end of the attribute columns, not next to retention metadata.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit ea9a3e7. Configure here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The AFTER retention_days placement is intentional — the column was deliberately moved to sit before all the attribute columns (attributes_bool/attributes_int and the string/float buckets), not after attributes_array. retention_days is used as the anchor because it's the only pre-attributes column present on every target table (the downsampled and _dist_ro variants don't have downsampled_retention_days). The PR description referenced the older placement and has been updated to match. Column order doesn't affect correctness anyway, since ClickHouse inserts/selects are by name.

— Claude Code

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentional. The column was deliberately repositioned to sit after retention_days (ahead of the entire attributes block) rather than after attributes_array — see the PR description and the placement commits. Column order has no effect on correctness since ClickHouse inserts/selects are by name; retention_days is used as the anchor because it's the only pre-attributes column present on every target table (the downsampled and _dist_ro variants lack downsampled_retention_days). The comment references the original pre-revision intent.

— Claude Code

phacops added a commit that referenced this pull request Jun 10, 2026
Populate the new generic `name` column (added in #8016) in the EAP items
consumer. The value is sourced per item type from the primary name
attribute we commonly filter on: `sentry.op` for spans and `sentry.name`
for metrics. The source attribute is still written into the attribute
maps as before; this only promotes it into the dedicated indexed column.

Declare the `name` column in the eap_items storage and all sibling
storages (read-only, downsampled, and DLQ replay) so the read path sees
it as well.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Agent transcript: https://claudescope.sentry.dev/share/RnmbvjU4NSsHdJEJwL_H0KFTCm_2y3okwyxmphZmzms
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 269ce7f. Configure here.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
index_expression = "indexed_name"
index_type = "bloom_filter"
index_granularity = 1

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@phacops why not go with a higher value like 3 or 4 for this?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I were concern about the size of the index, I would probably raise this to 3-4. I'm not, so I keep it low. Maybe at some point we'll realize the index is getting too big and we'll reconvene.

For additional context, the trace_id index is 146.99 GiB uncompressed on a given replica and granularity is much lower than 1%.

@MeredithAnya MeredithAnya left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know what kind of impact this will have on inserts - especially in US (hence why I was asking about the index granularity) but looks good. Assuming you'll have the MV migration in a follow up PR

The downsample materialized views select an explicit column list from
eap_items_1_local, so adding the column to the downsampled tables alone
left indexed_name unpopulated (and the bloom_filter index empty) on the
downsampled read paths. Recreate the three downsample MVs as version 5
with indexed_name in the SELECT; the backward op restores the v4 views.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@phacops

phacops commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

I don't know what kind of impact this will have on inserts - especially in US (hence why I was asking about the index granularity) but looks good. Assuming you'll have the MV migration in a follow up PR

Or follow up commit :o.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants