from datetime import datetime, timedelta from enum import Enum from dagster.preview.freshness import FreshnessPolicy class Group(Enum): RDS = "rds" SEGMENT_EVENTS = "segment_events" BACKEND_EVENTS = "backend_events" DYNAMODB = "dynamodb" IDENTITY = "identity" SESSIONS = "sessions" CLIPS = "clips" HOOKS = "hooks" PLAYLISTS = "playlists" PERSONALIZATION = "personalization" RECOMMENDATION = "recommendation" RECOMMENDAtIONS = "reccomendations" NOTIFICATIONS = "notifications" LISTENING = "listening" SUBSCRIPTIONS = "subscriptions" AGG = "agg" USER_METRICS = "user_metrics" class Team(Enum): CORE_POD = "team:core-pod" DATA_POD = "team:data-pod" class QueryType(Enum): SELECT = "select" DDL = "ddl" class Role(Enum): ACCOUNTADMIN = "ACCOUNTADMIN" class SnowflakeDB(Enum): SUNO_PROD = "SUNO_PROD" class SnowflakeSchema(Enum): PROD = "PROD" class Warehouse(Enum): SMALL = "SUNO_PROD_X_SMAL" # not a mispelling MEDIUM = "SUNO_PROD_MEDIUM" LARGE = "SUNO_PROD_LARGE" # clip related SUNO_PROD_RDS_CLIP_HOURLY_UPDATE_MEDIUM = "SUNO_PROD_RDS_CLIP_HOURLY_UPDATE_MEDIUM" # agg related SUNO_PROD_AGG_HOURLY_LARGE = "SUNO_PROD_AGG_HOURLY_LARGE" # ml related SUNO_PROD_ML_HOURLY_LARGE = "SUNO_PROD_ML_HOURLY_LARGE" # rds related SUNO_PROD_RDS_HOURLY_X_SMALL = "SUNO_PROD_RDS_HOURLY_X_SMALL" SUNO_PROD_RDS_HOURLY_MEDUIM = "SUNO_PROD_RDS_HOURLY_MEDUIM" # fact related FACT_PLAY_LARGE = "FACT_PLAY_HOURLY_LARGE" FACT_PLAY_SMALL = "FACT_PLAY_HOURLY_SMALL" FACT_PLAY_BACKFILL_LARGE = "FACT_PLAY_BACKFILL_LARGE" FACT_PLAY_BACKFILL_SMALL = "FACT_PLAY_BACKFILL_SMALL" # ML related SUNO_PROD_USER_TOP_SCORE_SONGS = "SUNO_PROD_USER_TOP_SCORE_SONGS" # dynamodb related DYNAMODB_EVENTS_LARGE = "DYNAMODB_EVENTS_LARGE" DYNAMODB_EVENTS_SMALL = "DYNAMODB_EVENTS_SMALL" # frontend related WEB_EVENT_X_SMALL = "SUNO_PROD_WEB_HOURLY_X_SMALL" WEB_EVENT_SMALL = "WEB_EVENT_HOURLY_SMALL" # backend related BACKEND_EVENTS_X_SMALL = "BACKEND_EVENTS_HOURLY_X_SMALL" # hook related FACT_HOOK_PLAY_LARGE = "FACT_HOOK_PLAY_LARGE" FACT_HOOK_PLAY_SMALL = "FACT_HOOK_PLAY_SMALL" DIM_HOOK_LARGE = "DIM_HOOK_HOURLY_LARGE" DIM_HOOK_MEDIUM = "DIM_HOOK_HOURLY_MEDIUM" HOOK_SESSION_LARGE = "HOOK_SESSION_LARGE" HOOK_SESSION_X_SMALL = "HOOK_SESSION_X_SMALL" REC_HOOK_X_SMALL = "REC_HOOK_X_SMALL" class PartitionExpr(Enum): DAILY = "p_date" HOURLY = "p_date || '-' || p_hour || ':00'" # Time window freshness policies check whether the asset has been materialized in the last N hours. # Cron freshness policies check whether an asset has been materialized on an expected schedule with a buffer for runtime. TIME_WINDOW_FRESHNESS_POLICY_WARN_1H_FAIL_2H = FreshnessPolicy.time_window(fail_window=timedelta(hours=2), warn_window=timedelta(hours=1)) TIME_WINDOW_FRESHNESS_POLICY_WARN_24H_FAIL_25H = FreshnessPolicy.time_window(fail_window=timedelta(hours=25), warn_window=timedelta(hours=24)) MIN_TIMESTAMP = datetime.min