|
51 | 51 | {% macro handle_dbt_test(flattened_test, materialization_macro) %} |
52 | 52 | {% set result = materialization_macro() %} |
53 | 53 | {% set sample_limit = elementary.get_config_var('test_sample_row_count') %} |
54 | | - |
| 54 | + |
55 | 55 | {% set disable_test_samples = false %} |
56 | 56 | {% if "meta" in flattened_test and "disable_test_samples" in flattened_test["meta"] %} |
57 | 57 | {% set disable_test_samples = flattened_test["meta"]["disable_test_samples"] %} |
58 | 58 | {% endif %} |
59 | | - |
| 59 | + |
60 | 60 | {% if disable_test_samples %} |
61 | 61 | {% set sample_limit = 0 %} |
62 | 62 | {% elif elementary.is_pii_table(flattened_test) %} |
63 | 63 | {% set sample_limit = 0 %} |
64 | 64 | {% elif elementary.should_disable_sampling_for_pii(flattened_test) %} |
65 | 65 | {% set sample_limit = 0 %} |
66 | 66 | {% endif %} |
67 | | - |
| 67 | + |
68 | 68 | {% set result_rows = elementary.query_test_result_rows(sample_limit=sample_limit, ignore_passed_tests=true) %} |
69 | 69 | {% set elementary_test_results_row = elementary.get_dbt_test_result_row(flattened_test, result_rows) %} |
70 | 70 | {% do elementary.cache_elementary_test_results_rows([elementary_test_results_row]) %} |
|
125 | 125 | {% do elementary.debug_log("Skipping sample query because the test passed.") %} |
126 | 126 | {% do return([]) %} |
127 | 127 | {% endif %} |
128 | | - |
| 128 | + |
129 | 129 | {% set query %} |
130 | 130 | with test_results as ( |
131 | 131 | {{ sql }} |
|
137 | 137 |
|
138 | 138 | {% macro get_columns_to_exclude_from_sampling(flattened_test) %} |
139 | 139 | {% set columns_to_exclude = [] %} |
140 | | - |
| 140 | + |
141 | 141 | {% if not flattened_test %} |
142 | 142 | {% do return(columns_to_exclude) %} |
143 | 143 | {% endif %} |
144 | | - |
| 144 | + |
145 | 145 | {% if elementary.get_config_var('disable_samples_on_pii_tags') %} |
146 | 146 | {% set pii_columns = elementary.get_pii_columns_from_parent_model(flattened_test) %} |
147 | 147 | {% set columns_to_exclude = columns_to_exclude + pii_columns %} |
148 | 148 | {% endif %} |
149 | | - |
| 149 | + |
150 | 150 | {% if elementary.is_sampling_disabled_for_column(flattened_test) %} |
151 | 151 | {% set test_column_name = elementary.insensitive_get_dict_value(flattened_test, 'test_column_name') %} |
152 | 152 | {% if test_column_name and test_column_name not in columns_to_exclude %} |
153 | 153 | {% do columns_to_exclude.append(test_column_name) %} |
154 | 154 | {% endif %} |
155 | 155 | {% endif %} |
156 | | - |
| 156 | + |
157 | 157 | {% do return(columns_to_exclude) %} |
158 | 158 | {% endmacro %} |
159 | 159 |
|
|
162 | 162 | {% if not elementary.get_config_var('disable_samples_on_pii_tags') %} |
163 | 163 | {% do return(false) %} |
164 | 164 | {% endif %} |
165 | | - |
| 165 | + |
166 | 166 | {% set pii_columns = elementary.get_pii_columns_from_parent_model(flattened_test) %} |
167 | 167 | {% if not pii_columns %} |
168 | 168 | {% do return(false) %} |
169 | 169 | {% endif %} |
170 | | - |
| 170 | + |
171 | 171 | {# Get the compiled test query #} |
172 | 172 | {% set test_query = elementary.get_compiled_code(flattened_test) %} |
173 | 173 | {% set test_query_lower = test_query.lower() %} |
174 | | - |
| 174 | + |
175 | 175 | {# Check if query uses * (select all columns) #} |
176 | | - {# Note: This is intentionally conservative and may over-censor in cases like |
| 176 | + {# Note: This is intentionally conservative and may over-censor in cases like |
177 | 177 | "SELECT * FROM other_table" in CTEs, but it's better to be safe with PII data #} |
178 | 178 | {% if '*' in test_query_lower %} |
179 | 179 | {% do return(true) %} |
180 | 180 | {% endif %} |
181 | | - |
| 181 | +
|
182 | 182 | {# Check if any PII column appears in the test query #} |
183 | 183 | {% for pii_column in pii_columns %} |
184 | 184 | {% if pii_column.lower() in test_query_lower %} |
185 | 185 | {% do return(true) %} |
186 | 186 | {% endif %} |
187 | 187 | {% endfor %} |
188 | | - |
| 188 | +
|
189 | 189 | {% do return(false) %} |
190 | 190 | {% endmacro %} |
191 | 191 |
|
192 | 192 | {% macro is_sampling_disabled_for_column(flattened_test) %} |
193 | 193 | {% set test_column_name = elementary.insensitive_get_dict_value(flattened_test, 'test_column_name') %} |
194 | 194 | {% set parent_model_unique_id = elementary.insensitive_get_dict_value(flattened_test, 'parent_model_unique_id') %} |
195 | | - |
| 195 | +
|
196 | 196 | {% if not test_column_name or not parent_model_unique_id %} |
197 | 197 | {% do return(false) %} |
198 | 198 | {% endif %} |
199 | | - |
| 199 | +
|
200 | 200 | {% set parent_model = elementary.get_node(parent_model_unique_id) %} |
201 | 201 | {% if parent_model and parent_model.get('columns') %} |
202 | 202 | {% set column_config = parent_model.get('columns', {}).get(test_column_name, {}).get('config', {}) %} |
203 | 203 | {% set disable_test_samples = elementary.safe_get_with_default(column_config, 'disable_test_samples', false) %} |
204 | 204 | {% do return(disable_test_samples) %} |
205 | 205 | {% endif %} |
206 | | - |
| 206 | +
|
207 | 207 | {% do return(false) %} |
208 | 208 | {% endmacro %} |
209 | 209 |
|
|
0 commit comments