From 369bffcaac7883d115ae9d72390ab370290d7daf Mon Sep 17 00:00:00 2001 From: Ryosuke839 Date: Fri, 12 Dec 2025 16:12:25 +0900 Subject: [PATCH 1/3] Override test_sample_row_count by test config --- macros/edr/materializations/test/test.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/macros/edr/materializations/test/test.sql b/macros/edr/materializations/test/test.sql index ebc4c4dcf..04897db2d 100644 --- a/macros/edr/materializations/test/test.sql +++ b/macros/edr/materializations/test/test.sql @@ -51,6 +51,9 @@ {% macro handle_dbt_test(flattened_test, materialization_macro) %} {% set result = materialization_macro() %} {% set sample_limit = elementary.get_config_var('test_sample_row_count') %} + {% if "meta" in flattened_test and "test_sample_row_count" in flattened_test["meta"] %} + {% set sample_limit = flattened_test["meta"]["test_sample_row_count"] %} + {% endif %} {% set disable_test_samples = false %} {% if "meta" in flattened_test and "disable_test_samples" in flattened_test["meta"] %} From 06784c24a2b1ab6d91cbad2277dff3f3d4388ade Mon Sep 17 00:00:00 2001 From: Ryosuke839 Date: Fri, 12 Dec 2025 16:14:29 +0900 Subject: [PATCH 2/3] Add tests --- .../tests/test_override_samples_config.py | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 integration_tests/tests/test_override_samples_config.py diff --git a/integration_tests/tests/test_override_samples_config.py b/integration_tests/tests/test_override_samples_config.py new file mode 100644 index 000000000..c9274f13d --- /dev/null +++ b/integration_tests/tests/test_override_samples_config.py @@ -0,0 +1,80 @@ +import json + +import pytest +from dbt_project import DbtProject + +COLUMN_NAME = "some_data" + +SAMPLES_QUERY = """ + with latest_elementary_test_result as ( + select id + from {{{{ ref("elementary_test_results") }}}} + where lower(table_name) = lower('{test_id}') + order by created_at desc + limit 1 + ) + + select result_row + from {{{{ ref("test_result_rows") }}}} + where elementary_test_results_id in (select * from latest_elementary_test_result) +""" + + +@pytest.mark.skip_targets(["clickhouse"]) +def test_sample_count_unlimited( + test_id: str, dbt_project: DbtProject +): + null_count = 20 + data = [{COLUMN_NAME: None} for _ in range(null_count)] + + test_result = dbt_project.test( + test_id, + "not_null", + dict(column_name=COLUMN_NAME), + data=data, + as_model=True, + test_vars={ + "enable_elementary_test_materialization": True, + "test_sample_row_count": 5, + }, + test_config={"meta": {"test_sample_row_count": None}}, + ) + assert test_result["status"] == "fail" + + samples = [ + json.loads(row["result_row"]) + for row in dbt_project.run_query(SAMPLES_QUERY.format(test_id=test_id)) + ] + assert len(samples) == 20 + for sample in samples: + assert COLUMN_NAME in sample + assert sample[COLUMN_NAME] is None + + +@pytest.mark.skip_targets(["clickhouse"]) +def test_sample_count_small(test_id: str, dbt_project: DbtProject): + null_count = 20 + data = [{COLUMN_NAME: None} for _ in range(null_count)] + + test_result = dbt_project.test( + test_id, + "not_null", + dict(column_name=COLUMN_NAME), + data=data, + as_model=True, + test_vars={ + "enable_elementary_test_materialization": True, + "test_sample_row_count": 5, + }, + test_config={"meta": {"test_sample_row_count": 3}}, + ) + assert test_result["status"] == "fail" + + samples = [ + json.loads(row["result_row"]) + for row in dbt_project.run_query(SAMPLES_QUERY.format(test_id=test_id)) + ] + assert len(samples) == 3 + for sample in samples: + assert COLUMN_NAME in sample + assert sample[COLUMN_NAME] is None From 7228b2ce830bb7510234eae242cb69c54d3e240a Mon Sep 17 00:00:00 2001 From: Ryosuke839 Date: Wed, 17 Dec 2025 22:47:07 +0900 Subject: [PATCH 3/3] lint --- integration_tests/tests/test_override_samples_config.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/integration_tests/tests/test_override_samples_config.py b/integration_tests/tests/test_override_samples_config.py index c9274f13d..605dfea09 100644 --- a/integration_tests/tests/test_override_samples_config.py +++ b/integration_tests/tests/test_override_samples_config.py @@ -21,9 +21,7 @@ @pytest.mark.skip_targets(["clickhouse"]) -def test_sample_count_unlimited( - test_id: str, dbt_project: DbtProject -): +def test_sample_count_unlimited(test_id: str, dbt_project: DbtProject): null_count = 20 data = [{COLUMN_NAME: None} for _ in range(null_count)]