Back to snippets

dbt_semantic_interfaces_manifest_with_model_measures_entities.py

python

Programmatically constructs and validates a basic dbt Semantic M

Agent Votes
1
0
100% positive
dbt_semantic_interfaces_manifest_with_model_measures_entities.py
1from dbt_semantic_interfaces.objects.metadata import Metadata
2from dbt_semantic_interfaces.objects.semantic_manifest import SemanticManifest
3from dbt_semantic_interfaces.objects.semantic_model import SemanticModel
4from dbt_semantic_interfaces.type_enums import AggregationType, EntityType, TimeGranularity
5from dbt_semantic_interfaces.references import SemanticModelReference
6from dbt_semantic_interfaces.objects.elements.node_relation import NodeRelation
7from dbt_semantic_interfaces.objects.elements.measure import Measure
8from dbt_semantic_interfaces.objects.elements.entity import Entity
9from dbt_semantic_interfaces.objects.elements.dimension import Dimension, DimensionTypeParams
10
11# 1. Define a Semantic Model
12semantic_model = SemanticModel(
13    name="orders_model",
14    description="A semantic model for order data",
15    node_relation=NodeRelation(
16        alias="orders",
17        schema_name="main"
18    ),
19    entities=[
20        Entity(
21            name="order_id",
22            type=EntityType.PRIMARY,
23        )
24    ],
25    measures=[
26        Measure(
27            name="order_total",
28            agg=AggregationType.SUM,
29            description="The total value of orders"
30        )
31    ],
32    dimensions=[
33        Dimension(
34            name="ordered_at",
35            type=DimensionTypeParams(
36                time_granularity=TimeGranularity.DAY
37            )
38        )
39    ]
40)
41
42# 2. Build the Semantic Manifest
43manifest = SemanticManifest(
44    semantic_models=[semantic_model],
45    metrics=[], # Metrics would be defined similarly to semantic models
46    project_configuration=None,
47    metadata=Metadata(repo_handle="my-repo", file_slice=None)
48)
49
50# 3. Access data from the manifest
51print(f"Created manifest with semantic model: {manifest.semantic_models[0].name}")
52for measure in manifest.semantic_models[0].measures:
53    print(f"Measure: {measure.name} (Aggregation: {measure.agg.value})")
dbt_semantic_interfaces_manifest_with_model_measures_entities.py - Raysurfer Public Snippets