mirror of
https://github.com/datahub-project/datahub.git
synced 2025-08-19 14:44:37 +00:00
feat(dbt): support prefer_sql_parser_lineage with sources enabled (#11168)
This commit is contained in:
parent
d36edcace9
commit
897173f270
@ -276,6 +276,12 @@ class DBTCommonConfig(
|
|||||||
DBTEntitiesEnabled(),
|
DBTEntitiesEnabled(),
|
||||||
description="Controls for enabling / disabling metadata emission for different dbt entities (models, test definitions, test results, etc.)",
|
description="Controls for enabling / disabling metadata emission for different dbt entities (models, test definitions, test results, etc.)",
|
||||||
)
|
)
|
||||||
|
prefer_sql_parser_lineage: bool = Field(
|
||||||
|
default=False,
|
||||||
|
description="Normally we use dbt's metadata to generate table lineage. When enabled, we prefer results from the SQL parser when generating lineage instead. "
|
||||||
|
"This can be useful when dbt models reference tables directly, instead of using the ref() macro. "
|
||||||
|
"This requires that `skip_sources_in_lineage` is enabled.",
|
||||||
|
)
|
||||||
skip_sources_in_lineage: bool = Field(
|
skip_sources_in_lineage: bool = Field(
|
||||||
default=False,
|
default=False,
|
||||||
description="[Experimental] When enabled, dbt sources will not be included in the lineage graph. "
|
description="[Experimental] When enabled, dbt sources will not be included in the lineage graph. "
|
||||||
@ -366,13 +372,6 @@ class DBTCommonConfig(
|
|||||||
description="When enabled, includes the compiled code in the emitted metadata.",
|
description="When enabled, includes the compiled code in the emitted metadata.",
|
||||||
)
|
)
|
||||||
|
|
||||||
prefer_sql_parser_lineage: bool = Field(
|
|
||||||
default=False,
|
|
||||||
description="Normally we use dbt's metadata to generate table lineage. When enabled, we prefer results from the SQL parser when generating lineage instead. "
|
|
||||||
"This can be useful when dbt models reference tables directly, instead of using the ref() macro. "
|
|
||||||
"This requires that `skip_sources_in_lineage` is enabled.",
|
|
||||||
)
|
|
||||||
|
|
||||||
@validator("target_platform")
|
@validator("target_platform")
|
||||||
def validate_target_platform_value(cls, target_platform: str) -> str:
|
def validate_target_platform_value(cls, target_platform: str) -> str:
|
||||||
if target_platform.lower() == DBT_PLATFORM:
|
if target_platform.lower() == DBT_PLATFORM:
|
||||||
@ -438,15 +437,27 @@ class DBTCommonConfig(
|
|||||||
|
|
||||||
return include_column_lineage
|
return include_column_lineage
|
||||||
|
|
||||||
@validator("skip_sources_in_lineage")
|
@validator("skip_sources_in_lineage", always=True)
|
||||||
def validate_skip_sources_in_lineage(
|
def validate_skip_sources_in_lineage(
|
||||||
cls, skip_sources_in_lineage: bool, values: Dict
|
cls, skip_sources_in_lineage: bool, values: Dict
|
||||||
) -> bool:
|
) -> bool:
|
||||||
entites_enabled: Optional[DBTEntitiesEnabled] = values.get("entities_enabled")
|
entities_enabled: Optional[DBTEntitiesEnabled] = values.get("entities_enabled")
|
||||||
|
prefer_sql_parser_lineage: Optional[bool] = values.get(
|
||||||
|
"prefer_sql_parser_lineage"
|
||||||
|
)
|
||||||
|
|
||||||
|
if prefer_sql_parser_lineage and not skip_sources_in_lineage:
|
||||||
|
raise ValueError(
|
||||||
|
"`prefer_sql_parser_lineage` requires that `skip_sources_in_lineage` is enabled."
|
||||||
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
skip_sources_in_lineage
|
skip_sources_in_lineage
|
||||||
and entites_enabled
|
and entities_enabled
|
||||||
and entites_enabled.sources == EmitDirective.YES
|
and entities_enabled.sources == EmitDirective.YES
|
||||||
|
# When `prefer_sql_parser_lineage` is enabled, it's ok to have `skip_sources_in_lineage` enabled
|
||||||
|
# without also disabling sources.
|
||||||
|
and not prefer_sql_parser_lineage
|
||||||
):
|
):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"When `skip_sources_in_lineage` is enabled, `entities_enabled.sources` must be set to NO."
|
"When `skip_sources_in_lineage` is enabled, `entities_enabled.sources` must be set to NO."
|
||||||
@ -454,16 +465,6 @@ class DBTCommonConfig(
|
|||||||
|
|
||||||
return skip_sources_in_lineage
|
return skip_sources_in_lineage
|
||||||
|
|
||||||
@validator("prefer_sql_parser_lineage")
|
|
||||||
def validate_prefer_sql_parser_lineage(
|
|
||||||
cls, prefer_sql_parser_lineage: bool, values: Dict
|
|
||||||
) -> bool:
|
|
||||||
if prefer_sql_parser_lineage and not values.get("skip_sources_in_lineage"):
|
|
||||||
raise ValueError(
|
|
||||||
"`prefer_sql_parser_lineage` requires that `skip_sources_in_lineage` is enabled."
|
|
||||||
)
|
|
||||||
return prefer_sql_parser_lineage
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class DBTColumn:
|
class DBTColumn:
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -227,7 +227,7 @@ class DbtTestConfig:
|
|||||||
source_config_modifiers={
|
source_config_modifiers={
|
||||||
"prefer_sql_parser_lineage": True,
|
"prefer_sql_parser_lineage": True,
|
||||||
"skip_sources_in_lineage": True,
|
"skip_sources_in_lineage": True,
|
||||||
"entities_enabled": {"sources": "NO"},
|
# "entities_enabled": {"sources": "NO"},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -247,7 +247,6 @@ def test_dbt_config_prefer_sql_parser_lineage():
|
|||||||
"catalog_path": "dummy_path",
|
"catalog_path": "dummy_path",
|
||||||
"target_platform": "dummy_platform",
|
"target_platform": "dummy_platform",
|
||||||
"skip_sources_in_lineage": True,
|
"skip_sources_in_lineage": True,
|
||||||
"entities_enabled": {"sources": "NO"},
|
|
||||||
"prefer_sql_parser_lineage": True,
|
"prefer_sql_parser_lineage": True,
|
||||||
}
|
}
|
||||||
config = DBTCoreConfig.parse_obj(config_dict)
|
config = DBTCoreConfig.parse_obj(config_dict)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user