@@ -434,13 +434,13 @@ For downstream partition-aware scheduling, use ``PartitionedAssetTimetable``:
434434
435435.. code-block :: python
436436
437- from airflow.sdk import DAG , HourlyMapper , PartitionedAssetTimetable
437+ from airflow.sdk import DAG , StartOfHourMapper , PartitionedAssetTimetable
438438
439439 with DAG(
440440 dag_id = " clean_and_combine_player_stats" ,
441441 schedule = PartitionedAssetTimetable(
442442 assets = team_a_player_stats & team_b_player_stats & team_c_player_stats,
443- default_partition_mapper = HourlyMapper (),
443+ default_partition_mapper = StartOfHourMapper (),
444444 ),
445445 catchup = False ,
446446 ):
@@ -458,17 +458,17 @@ Partition mappers define how upstream partition keys are transformed to the
458458downstream Dag partition key:
459459
460460* ``IdentityMapper `` keeps keys unchanged.
461- * Temporal mappers such as ``HourlyMapper ``, ``DailyMapper ``, and
462- ``YearlyMapper `` normalize time keys to a chosen grain. For input key
461+ * Temporal mappers such as ``StartOfHourMapper ``, ``StartOfDayMapper ``, and
462+ ``StartOfYearMapper `` normalize time keys to a chosen grain. For input key
463463 ``2026-03-10T09:37:51 ``, the default outputs are:
464464
465- * ``HourlyMapper `` -> ``2026-03-10T09 ``
466- * ``DailyMapper `` -> ``2026-03-10 ``
467- * ``YearlyMapper `` -> ``2026 ``
465+ * ``StartOfHourMapper `` -> ``2026-03-10T09 ``
466+ * ``StartOfDayMapper `` -> ``2026-03-10 ``
467+ * ``StartOfYearMapper `` -> ``2026 ``
468468* ``ProductMapper `` maps composite keys segment-by-segment.
469469 It applies one mapper per segment and then rejoins the mapped segments.
470470 For example, with key ``us|2026-03-10T09:00:00 ``,
471- ``ProductMapper(IdentityMapper(), DailyMapper ()) `` produces
471+ ``ProductMapper(IdentityMapper(), StartOfDayMapper ()) `` produces
472472 ``us|2026-03-10 ``.
473473* ``AllowedKeyMapper `` validates that keys are in a fixed allow-list and
474474 passes the key through unchanged if valid.
@@ -481,10 +481,10 @@ Example of per-asset mapper configuration and composite-key mapping:
481481
482482 from airflow.sdk import (
483483 Asset,
484- DailyMapper,
485484 IdentityMapper,
486485 PartitionedAssetTimetable,
487486 ProductMapper,
487+ StartOfDayMapper,
488488 )
489489
490490 regional_sales = Asset(uri = " file://incoming/sales/regional.csv" , name = " regional_sales" )
@@ -493,7 +493,7 @@ Example of per-asset mapper configuration and composite-key mapping:
493493 dag_id = " aggregate_regional_sales" ,
494494 schedule = PartitionedAssetTimetable(
495495 assets = regional_sales,
496- default_partition_mapper = ProductMapper(IdentityMapper(), DailyMapper ()),
496+ default_partition_mapper = ProductMapper(IdentityMapper(), StartOfDayMapper ()),
497497 ),
498498 ):
499499 ...
@@ -503,7 +503,7 @@ You can also override mappers for specific upstream assets with
503503
504504.. code-block :: python
505505
506- from airflow.sdk import Asset, DAG , DailyMapper , IdentityMapper, PartitionedAssetTimetable
506+ from airflow.sdk import Asset, DAG , StartOfDayMapper , IdentityMapper, PartitionedAssetTimetable
507507
508508 hourly_sales = Asset(uri = " file://incoming/sales/hourly.csv" , name = " hourly_sales" )
509509 daily_targets = Asset(uri = " file://incoming/sales/targets.csv" , name = " daily_targets" )
@@ -513,7 +513,7 @@ You can also override mappers for specific upstream assets with
513513 schedule = PartitionedAssetTimetable(
514514 assets = hourly_sales & daily_targets,
515515 # Default behavior: map timestamp-like keys to daily keys.
516- default_partition_mapper = DailyMapper (),
516+ default_partition_mapper = StartOfDayMapper (),
517517 # Override for assets that already emit daily partition keys.
518518 partition_mapper_config = {
519519 daily_targets: IdentityMapper(),
0 commit comments