| -- ML / DS feature engineering SQL (Vertica legacy) | |
| -- Migrates to Snowflake / dbt feature mart for model training | |
| CREATE LOCAL TEMP TABLE tmp_user_events ON COMMIT PRESERVE ROWS AS | |
| SELECT | |
| user_id, | |
| event_ts, | |
| event_type, | |
| ZEROIFNULL(event_value) AS event_value | |
| FROM staging.product_events | |
| WHERE event_ts >= CURRENT_DATE - 90; | |
| WITH user_agg AS ( | |
| SELECT | |
| user_id, | |
| COUNT(*) AS event_count_90d, | |
| COUNT(DISTINCT event_type) AS event_type_nunique, | |
| SUM(event_value) AS value_sum_90d, | |
| AVG(event_value) AS value_avg_90d, | |
| DATEDIFF('day', MAX(event_ts), CURRENT_DATE) AS days_since_last_event | |
| FROM tmp_user_events | |
| GROUP BY user_id | |
| ), | |
| labels AS ( | |
| SELECT | |
| user_id, | |
| CASE WHEN ZEROIFNULL(churned_flag) = 1 THEN 1 ELSE 0 END AS churn_label | |
| FROM ml.churn_labels | |
| WHERE label_date = CURRENT_DATE - 1 | |
| ) | |
| SELECT | |
| a.user_id, | |
| a.event_count_90d, | |
| a.event_type_nunique, | |
| a.value_sum_90d, | |
| a.value_avg_90d, | |
| a.days_since_last_event, | |
| l.churn_label | |
| FROM user_agg a | |
| JOIN labels l ON a.user_id = l.user_id; | |