diff --git a/.changes/unreleased/Features-20260105-000635.yaml b/.changes/unreleased/Features-20260105-000635.yaml new file mode 100644 index 00000000000..7e242c12e65 --- /dev/null +++ b/.changes/unreleased/Features-20260105-000635.yaml @@ -0,0 +1,6 @@ +kind: Features +body: Add seed header option support +time: 2026-01-05T00:06:35.693542+01:00 +custom: + Author: aammett + Issue: "11334" diff --git a/core/dbt/artifacts/resources/v1/seed.py b/core/dbt/artifacts/resources/v1/seed.py index 5328488b3c5..2dbfe7898de 100644 --- a/core/dbt/artifacts/resources/v1/seed.py +++ b/core/dbt/artifacts/resources/v1/seed.py @@ -16,6 +16,7 @@ class SeedConfig(NodeConfig): materialized: str = "seed" delimiter: str = "," quote_columns: Optional[bool] = None + header: bool = True @classmethod def validate(cls, data): diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 6ac9b7250d1..c74aba05ac4 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -1269,8 +1269,19 @@ def load_agate_table(self) -> "agate.Table": column_types = self.model.config.column_types delimiter = self.model.config.delimiter + header = self.model.config.header + column_names = None + if not self.model.config.header: + column_names = list(self.model.columns.keys()) + try: - table = agate_helper.from_csv(path, text_columns=column_types, delimiter=delimiter) + table = agate_helper.from_csv( + path, + column_names=column_names, + text_columns=column_types, + delimiter=delimiter, + header=header, + ) except ValueError as e: raise LoadAgateTableValueError(e, node=self.model) # this is used by some adapters diff --git a/tests/unit/contracts/graph/test_nodes_parsed.py b/tests/unit/contracts/graph/test_nodes_parsed.py index 8b159480a01..ef41953cb61 100644 --- a/tests/unit/contracts/graph/test_nodes_parsed.py +++ b/tests/unit/contracts/graph/test_nodes_parsed.py @@ -523,6 +523,7 @@ def basic_parsed_seed_dict(): "delimiter": ",", "enabled": True, "materialized": "seed", + "header": True, "persist_docs": {}, "post-hook": [], "pre-hook": [], @@ -616,6 +617,7 @@ def complex_parsed_seed_dict(): "delimiter": ",", "enabled": True, "materialized": "seed", + "header": True, "persist_docs": {"relation": True, "columns": True}, "post-hook": [], "pre-hook": [], @@ -677,6 +679,7 @@ def complex_parsed_seed_object(): config=SeedConfig( quote_columns=True, delimiter=",", + header=True, persist_docs={"relation": True, "columns": True}, ), docs=Docs(show=True),