Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,44 @@ jobs:
# of DuckDB require a version of DuckDB we no longer support
run: |
source .venv/bin/activate
# Remove semantic_models and metrics sections for DBT versions < 1.6.0
# Using explicit list to avoid version comparison issues
if [[ "${{ matrix.dbt-version }}" == "1.3" ]] || \
[[ "${{ matrix.dbt-version }}" == "1.4" ]] || \
[[ "${{ matrix.dbt-version }}" == "1.5" ]]; then
echo "DBT version is ${{ matrix.dbt-version }} (< 1.6.0), removing semantic_models and metrics sections..."
schema_file="tests/fixtures/dbt/sushi_test/models/schema.yml"
if [[ -f "$schema_file" ]]; then
echo "Modifying $schema_file..."
# Create a temporary file
temp_file=$(mktemp)
# Use awk to remove semantic_models and metrics sections
awk '
/^semantic_models:/ { in_semantic=1; next }
/^metrics:/ { in_metrics=1; next }
/^[^ ]/ && (in_semantic || in_metrics) {
in_semantic=0;
in_metrics=0
}
!in_semantic && !in_metrics { print }
' "$schema_file" > "$temp_file"
# Move the temp file back
mv "$temp_file" "$schema_file"
echo "Successfully removed semantic_models and metrics sections"
else
echo "Schema file not found at $schema_file, skipping..."
fi
else
echo "DBT version is ${{ matrix.dbt-version }} (>= 1.6.0), keeping semantic_models and metrics sections"
fi
make dbt-fast-test
- name: Test SQLMesh info in sushi_dbt
working-directory: ./examples/sushi_dbt
Expand All @@ -104,4 +142,5 @@ jobs:
else
echo "DBT version is ${{ matrix.dbt-version }} (>= 1.5.0), keeping version parameters"
fi
sqlmesh info --skip-connection
9 changes: 9 additions & 0 deletions sqlmesh/dbt/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,13 @@
IGNORED_PACKAGES = {"elementary"}
BUILTIN_CALLS = {*BUILTIN_GLOBALS, *BUILTIN_FILTERS}

# Patch Semantic Manifest to skip validation and avoid Pydantic v1 errors on DBT 1.6
# We patch for 1.7+ since we don't care about semantic models
if DBT_VERSION >= (1, 6, 0):
from dbt.contracts.graph.semantic_manifest import SemanticManifest # type: ignore

SemanticManifest.validate = lambda _: True # type: ignore


class ManifestHelper:
def __init__(
Expand Down Expand Up @@ -456,6 +463,8 @@ def _load_manifest(self) -> Manifest:
register_adapter(runtime_config) # type: ignore

manifest = ManifestLoader.get_full_manifest(runtime_config)
# This adapter doesn't care about semantic models so we clear them out to avoid issues
manifest.semantic_models = {}
reset_adapters()
return manifest

Expand Down
20 changes: 20 additions & 0 deletions tests/fixtures/dbt/sushi_test/models/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,23 @@ sources:
tables:
- name: items
- name: orders

semantic_models:
- name: top_waiters
description: Some description
model: ref('top_waiters')
measures:
- name: total_waiters
agg: sum
expr: waiter
dimensions:
- name: waiter
type: categorical

metrics:
- name: some_waiter_thing
description: Something
type: simple
label: testing
type_params:
measure: total_waiters