from datetime import datetime import dagster as dg from dagster import EnvVar from src.utils.snowflake.constants import Group, PartitionExpr DIM_CLIP_TABLE_NAME = "DIM_CLIP" DIM_CLIP_START_DATE = datetime.strptime('2023-05-12', '%Y-%m-%d') RDS_AUTH_USER_TABLE_NAME = "RDS_AUTH_USER" RDS_AUTH_USER_START_DATE = datetime.strptime('2023-03-26', '%Y-%m-%d') USER_SESSION_STATE_TABLE_NAME = "USER_SESSION_STATE" USER_SESSION_STATE_START_DATE = datetime.strptime('2023-03-26', '%Y-%m-%d') AGG_USER_DAILY_SPINE_TABLE_NAME = "AGG_USER_DAILY_SPINE" AGG_USER_DAILY_SPINE_START_DATE = datetime.strptime('2024-06-01', '%Y-%m-%d') AGG_USER_PLATFORM_DAILY_TABLE_NAME = "AGG_USER_PLATFORM_DAILY" AGG_USER_PLATFORM_DAILY_START_DATE = datetime.strptime('2024-06-01', '%Y-%m-%d') user_session_state = dg.AssetSpec( key="user_session_state", description="User session state table", group_name=Group.SESSIONS.value, partitions_def=dg.HourlyPartitionsDefinition(start_date=USER_SESSION_STATE_START_DATE), metadata={ "database": EnvVar("SNOWFLAKE_DB").get_value(), "schema": EnvVar("SNOWFLAKE_SCHEMA").get_value(), "table_name": USER_SESSION_STATE_TABLE_NAME, "partition_expr": PartitionExpr.HOURLY.value, } ) agg_user_daily_spine = dg.AssetSpec( key="agg_user_daily_spine", description="Daily user aggregation with calendar spine, providing one row per day per user, even if inactive. Orchestrated via Snowflake task.", group_name=Group.USER_METRICS.value, partitions_def=dg.DailyPartitionsDefinition(start_date=AGG_USER_DAILY_SPINE_START_DATE, end_offset=0), metadata={ "database": EnvVar("SNOWFLAKE_DB").get_value(), "schema": EnvVar("SNOWFLAKE_SCHEMA").get_value(), "table_name": AGG_USER_DAILY_SPINE_TABLE_NAME, "partition_expr": PartitionExpr.DAILY.value, } ) agg_user_platform_daily = dg.AssetSpec( key="agg_user_platform_daily", description="Active user daily aggregation broken down by platform. Orchestrated via Snowflake task. Source for daily_active_users model.", group_name=Group.AGG.value, partitions_def=dg.DailyPartitionsDefinition(start_date=AGG_USER_PLATFORM_DAILY_START_DATE, end_offset=0), metadata={ "database": EnvVar("SNOWFLAKE_DB").get_value(), "schema": "prod", # This table is in prod schema, not SNOWFLAKE_SCHEMA "table_name": AGG_USER_PLATFORM_DAILY_TABLE_NAME, "partition_expr": PartitionExpr.DAILY.value, } )