Skip to content

Commit

Permalink
Add support for ephemeral models
Browse files Browse the repository at this point in the history
  • Loading branch information
PaddyAlton committed Feb 9, 2024
1 parent 2dadff3 commit 5552ab2
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

Recent and upcoming changes to dbt2looker

## Unreleased
### Added
- support ephemeral models (#57)

## 0.11.0
### Added
- support label and hidden fields (#49)
Expand Down
5 changes: 3 additions & 2 deletions dbt2looker/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from enum import Enum
from typing import Union, Dict, List, Optional
from typing import Any, Union, Dict, List, Optional
try:
from typing import Literal
except ImportError:
Expand Down Expand Up @@ -144,6 +144,7 @@ class DbtModelColumn(BaseModel):
class DbtNode(BaseModel):
unique_id: str
resource_type: str
config: Dict[str, Any]


class Dbt2LookerExploreJoin(BaseModel):
Expand Down Expand Up @@ -224,4 +225,4 @@ def case_insensitive_column_names(cls, v: Dict[str, DbtCatalogNodeColumn]):


class DbtCatalog(BaseModel):
nodes: Dict[str, DbtCatalogNode]
nodes: Dict[str, DbtCatalogNode]
10 changes: 5 additions & 5 deletions dbt2looker/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,21 @@ def tags_match(query_tag: str, model: models.DbtModel) -> bool:

def parse_models(raw_manifest: dict, tag=None) -> List[models.DbtModel]:
manifest = models.DbtManifest(**raw_manifest)
all_models: List[models.DbtModel] = [
materialized_models: List[models.DbtModel] = [
node
for node in manifest.nodes.values()
if node.resource_type == 'model'
if node.resource_type == 'model' and node.config['materialized'] != 'ephemeral'
]

# Empty model files have many missing parameters
for model in all_models:
for model in materialized_models:
if not hasattr(model, 'name'):
logging.error('Cannot parse model with id: "%s" - is the model file empty?', model.unique_id)
raise SystemExit('Failed')

if tag is None:
return all_models
return [model for model in all_models if tags_match(tag, model)]
return materialized_models
return [model for model in materialized_models if tags_match(tag, model)]


def check_models_for_missing_column_types(dbt_typed_models: List[models.DbtModel]):
Expand Down

0 comments on commit 5552ab2

Please sign in to comment.