feat(eap-items): Make downsample tiers nested subsets#7980
Conversation
The downsample materialized views previously sampled per `item_id` and perturbed the hash per tier (`cityHash64(item_id + sampling_weight)`), so the 1/8, 1/64, and 1/512 tiers were independent samples and items in the same trace could land in different tiers. Switch the MVs to `cityHash64(reinterpretAsUInt128(trace_id)) % w = 0`. Hashing `trace_id` (without perturbation) keeps every item in a trace together, and because 8 | 64 | 512 the tiers nest: tier 512 ⊆ tier 64 ⊆ tier 8. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Agent transcript: https://claudescope.sentry.dev/share/J1l8N_MgYvD7E5OR27eSBvBE-k-Q7G1nqkfGulwerG8
|
This PR has a migration; here is the generated SQL for -- start migrations
-- forward migration events_analytics_platform : 0057_nest_downsample_tiers
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)), 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) = 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)), 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) = 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)), 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) = 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_nest_downsample_tiers
-- backward migration events_analytics_platform : 0057_nest_downsample_tiers
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;
-- end backward migration events_analytics_platform : 0057_nest_downsample_tiers |
|
@phacops : Thanks for making this change. How are we ensuring that the extrapolation math holds as well? Is that going to be a separate PR? |
I agree.
Indeed. |
| @@ -0,0 +1,184 @@ | |||
| from typing import List, Sequence | |||
There was a problem hiding this comment.
Duplicate migration number 0055
High Severity
The new migration file uses prefix 0055, but events_analytics_platform already has 0055_fix_attribute_keys_hash_missing_bool.py. DirectoryLoader.get_migrations() raises on duplicate four-digit prefixes, so loading the EAP group fails and this migration cannot run until the file is renumbered (e.g. 0057 after 0056).
Reviewed by Cursor Bugbot for commit a63b706. Configure here.
Migrations 0055 and 0056 landed on master, colliding with this PR's 0055_sample_downsample_tiers_by_trace. Bump it to 0057 and update the test import path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Agent transcript: https://claudescope.sentry.dev/share/a4n8ne-FeVHxgip0LTtvUecLmEJ3EXkM9ToaC5Ocymc
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit ddfb2e4. Configure here.
EAP migrations repeatedly copy-paste the eap_items column list, the downsample materialized view SELECT, and the create/drop-per-weight loop. Add snuba_migrations/events_analytics_platform/templates.py with: - get_eap_items_columns(num_attr_buckets): a fresh, customizable column list - downsample_mv_select(): builds the MV SELECT from a sampling predicate - swap_downsample_materialized_views(): create-new/drop-old ops per weight Adopt them in 0057 so the migration only describes the sampling predicate and version bump. Forwards SQL is unchanged. Existing applied migrations are left as-is (immutable history); new migrations can use these helpers. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sample each downsample tier with a single, un-perturbed hash of item_id (cityHash64(item_id) % weight) instead of hashing trace_id. Because the weights are 8 / 64 / 512 (each divides the next) and every tier hashes the same value, tier 512 is a subset of tier 64 is a subset of tier 8 — while inclusion stays independent across items, preserving the Bernoulli independence assumption the RPC extrapolation variance math relies on. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The migration no longer samples by trace, so rename it from 0057_sample_downsample_tiers_by_trace to 0057_nest_downsample_tiers to match what it does, and update the test import. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>


Summary
tier 512 ⊆ tier 64 ⊆ tier 8. Previously each tier drew an independent
per-item sample
(
cityHash64(item_id + {sampling_weight}) % {sampling_weight}),perturbing the hash per tier, so an item could land in tier 8 but not
tier 64.
item_idwith a single,un-perturbed expression:
cityHash64(item_id) % {sampling_weight} = 0. Because the samplingweights 8 / 64 / 512 each divide the next and every tier hashes the
same value, an item with
H % 512 == 0also satisfiesH % 64 == 0and
H % 8 == 0.items. This preserves the Bernoulli-independence assumption the RPC
extrapolation variance math relies on (
_get_ci_count/_get_ci_sumin
resolvers/common/aggregation.py) — point estimates and confidenceintervals are unaffected.
Migration 0057 creates the new MVs (
mv_5) and drops the old ones(
mv_4). The backwards op restoresmv_4with the original perturbedexpression.
This PR also extracts the repeated EAP downsample-MV boilerplate (the
eap_itemscolumn list, theSELECTbuilder, and the create/drop loop)into
snuba_migrations/events_analytics_platform/templates.pyso futuremigrations stop copy-pasting it.
Test plan
pytest tests/migrations/test_eap_subset_sampling.py— asserts theSQL hashes
item_idun-perturbed (nottrace_id) and that 8 | 64 | 512,so the tiers nest.
pytest tests/migrations/test_groups.py tests/migrations/test_validator.py— migration discovery/validation pass.
scripts/ddl-changes.py— generated DDL createsmv_5and dropsmv_4.mv_5is created andmv_4dropped.🤖 Generated with Claude Code
Agent transcript: https://claudescope.sentry.dev/share/_SFJAD4lYVt3kW7SjAK5rdKYya-tgTnGRn2GZwv1jx8