Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit 5454310

Browse files
committed
output cols added/removed/types changed
1 parent cfd941f commit 5454310

File tree

3 files changed

+45
-12
lines changed

3 files changed

+45
-12
lines changed

data_diff/cloud/datafold_api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ class TSummaryResultSchemaStats(pydantic.BaseModel):
132132
column_type_mismatches: int
133133
column_reorders: int
134134
column_counts: Tuple[int, int]
135+
column_type_differs: List[str]
136+
exclusive_columns: Tuple[List[str], List[str]]
135137

136138

137139
class TCloudApiDataDiffSummaryResult(pydantic.BaseModel):

data_diff/dbt.py

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@
66

77
from dataclasses import dataclass
88
from typing import List, Optional, Dict
9-
from .utils import dbt_diff_string_template, getLogger
9+
from .utils import (
10+
dbt_diff_string_template,
11+
getLogger,
12+
columns_added_template,
13+
columns_removed_template,
14+
no_differences_template,
15+
)
1016
from pathlib import Path
1117

1218
import keyring
@@ -182,7 +188,6 @@ def _get_diff_vars(
182188

183189

184190
def _local_diff(diff_vars: DiffVars) -> None:
185-
column_diffs_str = ""
186191
dev_qualified_str = ".".join(diff_vars.dev_path)
187192
prod_qualified_str = ".".join(diff_vars.prod_path)
188193
diff_output_str = _diff_output_base(dev_qualified_str, prod_qualified_str)
@@ -203,14 +208,14 @@ def _local_diff(diff_vars: DiffVars) -> None:
203208
return
204209

205210
mutual_set = set(table1_columns) & set(table2_columns)
206-
table1_set_diff = list(set(table1_columns) - set(table2_columns))
207-
table2_set_diff = list(set(table2_columns) - set(table1_columns))
211+
columns_added = list(set(table1_columns) - set(table2_columns))
212+
columns_removed = list(set(table2_columns) - set(table1_columns))
208213

209-
if table1_set_diff:
210-
column_diffs_str += "Column(s) added: " + str(table1_set_diff) + "\n"
214+
if columns_added:
215+
diff_output_str += columns_added_template(columns_added)
211216

212-
if table2_set_diff:
213-
column_diffs_str += "Column(s) removed: " + str(table2_set_diff) + "\n"
217+
if columns_removed:
218+
diff_output_str += columns_removed_template(columns_removed)
214219

215220
mutual_set = mutual_set - set(diff_vars.primary_keys)
216221
extra_columns = tuple(mutual_set)
@@ -225,10 +230,10 @@ def _local_diff(diff_vars: DiffVars) -> None:
225230
)
226231

227232
if list(diff):
228-
diff_output_str += f"{column_diffs_str}{diff.get_stats_string(is_dbt=True)} \n"
233+
diff_output_str += f"{diff.get_stats_string(is_dbt=True)} \n"
229234
rich.print(diff_output_str)
230235
else:
231-
diff_output_str += f"{column_diffs_str}[bold][green]No row differences[/][/] \n"
236+
diff_output_str += no_differences_template()
232237
rich.print(diff_output_str)
233238

234239

@@ -302,6 +307,18 @@ def _cloud_diff(diff_vars: DiffVars, datasource_id: int, api: DatafoldAPI) -> No
302307
diff_percent_list = {
303308
x.column_name: str(x.match) + "%" for x in diff_results.values.columns_diff_stats if x.match != 100.0
304309
}
310+
columns_added = diff_results.schema_.exclusive_columns[1]
311+
columns_removed = diff_results.schema_.exclusive_columns[0]
312+
column_type_changes = diff_results.schema_.column_type_differs
313+
314+
if columns_added:
315+
diff_output_str += columns_added_template(columns_added)
316+
317+
if columns_removed:
318+
diff_output_str += columns_removed_template(columns_removed)
319+
320+
if column_type_changes:
321+
diff_output_str += "Type change: " + str(column_type_changes) + "\n"
305322

306323
if any([rows_added_count, rows_removed_count, rows_updated]):
307324
diff_output = dbt_diff_string_template(
@@ -312,10 +329,10 @@ def _cloud_diff(diff_vars: DiffVars, datasource_id: int, api: DatafoldAPI) -> No
312329
diff_percent_list,
313330
"Value Match Percent:",
314331
)
315-
diff_output_str += f"{diff_url}\n {diff_output} \n"
332+
diff_output_str += f"\n{diff_url}\n {diff_output} \n"
316333
rich.print(diff_output_str)
317334
else:
318-
diff_output_str += f"{diff_url}\n [green]No row differences[/] \n"
335+
diff_output_str += f"\n{diff_url}\n{no_differences_template()}\n"
319336
rich.print(diff_output_str)
320337

321338
except BaseException as ex: # Catch KeyboardInterrupt too

data_diff/utils.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,17 @@ def dbt_diff_string_template(
144144
string_output += f"\n{k}: {v}"
145145

146146
return string_output
147+
148+
149+
def columns_removed_template(table2_set_diff) -> str:
150+
columns_removed = "Column(s) removed: " + str(table2_set_diff) + "\n"
151+
return columns_removed
152+
153+
154+
def columns_added_template(table1_set_diff) -> str:
155+
columns_added = "Column(s) added: " + str(table1_set_diff) + "\n"
156+
return columns_added
157+
158+
159+
def no_differences_template() -> str:
160+
return "[bold][green]No row differences[/][/]\n"

0 commit comments

Comments
 (0)