Skip to content

Decouple AI rule generation from Spark session - #1422

Open
ghanse wants to merge 1 commit into
mainfrom
fix_ai_generation
Open

Decouple AI rule generation from Spark session#1422
ghanse wants to merge 1 commit into
mainfrom
fix_ai_generation

Conversation

@ghanse

@ghanse ghanse commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Changes

This PR decouples AI-assisted rule generation from Spark to allow use without an active Spark session. A small get_table_column_metadata gets column metadata for any Unity Catalog tables using the Databricks SDK.

Spark sessions are lazily created when required (e.g. for reading data from file paths or inferring primary keys using AI).

Linked issues

Resolves #1095

Tests

  • manually tested
  • added unit tests
  • added integration tests
  • added end-to-end tests
  • added performance tests

Documentation and Demos

  • added/updated demos
  • added/updated docs
  • added/updated agent skills

@codecov

codecov Bot commented Aug 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.29730% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 92.81%. Comparing base (23900aa) to head (d7d2e07).
⚠️ Report is 4 commits behind head on main.

Files with missing lines Patch % Lines
src/databricks/labs/dqx/profiler/generator.py 92.30% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1422      +/-   ##
==========================================
- Coverage   92.97%   92.81%   -0.17%     
==========================================
  Files         103      104       +1     
  Lines       10819    10897      +78     
==========================================
+ Hits        10059    10114      +55     
- Misses        760      783      +23     
Flag Coverage Δ
anomaly ?
anomaly-serverless 53.16% <54.05%> (-0.14%) ⬇️
integration ?
integration-serverless 51.10% <43.24%> (-0.20%) ⬇️
unit 60.05% <97.29%> (+0.14%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

✅ 1/1 passed, 19m11s total

Running from mcp #249

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

❌ 441/442 passed, 1 failed, 7 skipped, 9h6m54s total

❌ test_apply_checks_all_row_checks_as_yaml_with_streaming: pyspark.errors.exceptions.connect.StreamingQueryException: [STREAM_FAILED] Query [id = f63393d6-e91d-438e-912d-9f487c3857a4, runId = 13133a6a-8c09-45c7-9e26-a5c509c22d50] terminated with exception: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS SQLSTATE: XXKST (6m16.945s)
... (skipped 278195 bytes)
:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_in_range', 'arguments': {'column': 'col6', 'min_limit': datetime.datetime(2025, 1, 1, 0, 0), 'max_limit': datetime.datetime(2025, 2, 24, 1, 0)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_in_range resolved successfully: <function is_in_range at 0x7fb48debf740>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_in_range', 'arguments': {'column': 'col3', 'min_limit': 'col2', 'max_limit': 'col2 * 2'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_in_range resolved successfully: <function is_in_range at 0x7fb48debf740>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_in_range', 'arguments': {'column': 'col2', 'min_limit': 11, 'max_limit': 20}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_in_range', 'arguments': {'column': 'col5', 'min_limit': datetime.date(2025, 2, 25), 'max_limit': datetime.date(2025, 2, 26)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_in_range', 'arguments': {'column': 'col6', 'min_limit': datetime.datetime(2025, 2, 25, 0, 0), 'max_limit': datetime.datetime(2025, 2, 26, 1, 0)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_in_range', 'arguments': {'column': 'col3', 'min_limit': 'col2 + 10', 'max_limit': 'col2 * 10'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_equal_to', 'arguments': {'column': 'col10', 'value': 2}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_equal_to resolved successfully: <function is_equal_to at 0x7fb48debf4c0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_equal_to', 'arguments': {'column': 'col3', 'value': 'col2'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_equal_to resolved successfully: <function is_equal_to at 0x7fb48debf4c0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_equal_to', 'arguments': {'column': 'col1', 'value': "'unknown'"}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_equal_to', 'arguments': {'column': 'col5', 'value': datetime.date(2025, 2, 24)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_equal_to', 'arguments': {'column': 'col6', 'value': datetime.datetime(2025, 2, 24, 1, 0)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_equal_to', 'arguments': {'column': 'col3', 'value': 'col2 + 5'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_less_than', 'arguments': {'column': 'col2', 'limit': 0}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_less_than', 'arguments': {'column': 'col5', 'limit': datetime.date(2025, 1, 1)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_less_than', 'arguments': {'column': 'col6', 'limit': datetime.datetime(2025, 1, 1, 1, 0)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_less_than', 'arguments': {'column': 'col3', 'limit': 'col2 - 10'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_greater_than', 'arguments': {'column': 'col2', 'limit': 10}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_greater_than', 'arguments': {'column': 'col5', 'limit': datetime.date(2025, 3, 1)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_greater_than', 'arguments': {'column': 'col6', 'limit': datetime.datetime(2025, 3, 24, 1, 0)}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_greater_than', 'arguments': {'column': 'col3', 'limit': 'col2 + 10'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_date', 'arguments': {'column': 'col5'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_date
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_date resolved successfully: <function is_valid_date at 0x7fb48debf9c0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'name': 'col5_is_not_valid_date2', 'check': {'function': 'is_valid_date', 'arguments': {'column': 'col5', 'date_format': 'yyyy-MM-dd'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_date
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_date resolved successfully: <function is_valid_date at 0x7fb48debf9c0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_timestamp', 'arguments': {'column': 'col6', 'timestamp_format': 'yyyy-MM-dd HH:mm:ss'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_timestamp
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_timestamp resolved successfully: <function is_valid_timestamp at 0x7fb48debfa60>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'name': 'col6_is_not_valid_timestamp2', 'check': {'function': 'is_valid_timestamp', 'arguments': {'column': 'col6'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_timestamp
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_timestamp resolved successfully: <function is_valid_timestamp at 0x7fb48debfa60>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_json', 'arguments': {'column': 'col_json_str'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_json
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_json resolved successfully: <function is_valid_json at 0x7fb48dee1580>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'has_json_keys', 'arguments': {'column': 'col_json_str', 'keys': ['key1']}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_json_keys
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_json_keys resolved successfully: <function has_json_keys at 0x7fb48dee1760>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'has_json_keys', 'arguments': {'column': 'col_json_str', 'keys': ['key1', 'key2'], 'require_all': False}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_json_keys
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_json_keys resolved successfully: <function has_json_keys at 0x7fb48dee1760>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'has_valid_json_schema', 'arguments': {'column': 'col_json_str2', 'schema': 'STRUCT<a: BIGINT, b: BIGINT>'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_valid_json_schema
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_valid_json_schema resolved successfully: <function has_valid_json_schema at 0x7fb48dee1800>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_in_future', 'arguments': {'column': 'col6', 'offset': 86400}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_future
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_future resolved successfully: <function is_not_in_future at 0x7fb48debf380>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_in_near_future', 'arguments': {'column': 'col6', 'offset': 36400}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_near_future
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_near_future resolved successfully: <function is_not_in_near_future at 0x7fb48debf420>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_older_than_n_days', 'arguments': {'column': 'col5', 'days': 10}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_older_than_n_days
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_older_than_n_days resolved successfully: <function is_older_than_n_days at 0x7fb48debf2e0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_older_than_col2_for_n_days', 'arguments': {'column1': 'col5', 'column2': 'col6', 'days': 2}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_older_than_col2_for_n_days
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_older_than_col2_for_n_days resolved successfully: <function is_older_than_col2_for_n_days at 0x7fb48debf240>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'regex_match', 'arguments': {'column': 'col2', 'regex': '[0-9]+', 'negate': False}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: regex_match
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function regex_match resolved successfully: <function regex_match at 0x7fb48debf880>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'sql_expression', 'arguments': {'expression': 'col3 >= col2 and col3 <= 10', 'msg': 'col3 is less than col2 and col3 is greater than 10', 'name': 'custom_output_name', 'negate': False}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'sql_expression', 'arguments': {'expression': 'col3 >= col2 and col3 <= 10', 'msg': 'col3 is less than col2 and col3 is greater than 10', 'columns': ['col2', 'col3']}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_null', 'for_each_column': ['col3', 'col5']}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_null', 'arguments': {'column': 'col8.field1'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_null', 'arguments': {'column': "try_element_at(col7, 'key1')"}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_null', 'arguments': {'column': 'try_element_at(col4, 1)'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_equal_to', 'arguments': {'column': 'col8.field1', 'value': 1}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_equal_to resolved successfully: <function is_equal_to at 0x7fb48debf4c0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_equal_to', 'arguments': {'column': "try_element_at(col7, 'key1')", 'value': 'col10'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_less_than', 'arguments': {'column': 'array_min(col4)', 'limit': 1}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_greater_than', 'arguments': {'column': 'array_max(col4)', 'limit': 10}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'sql_expression', 'arguments': {'expression': "try_element_at(col7, 'key1') < 10", 'msg': "col7 element 'key1' is less than 10", 'name': 'col7_element_key1_less_than_10', 'negate': False}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'sql_expression', 'arguments': {'expression': 'not exists(col4, x -> x >= 10)', 'msg': 'array col4 has an element greater than 10', 'name': 'col4_all_elements_less_than_10', 'negate': False}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_not_null', 'for_each_column': ['col1', 'col8.field1', "try_element_at(col7, 'key1')", 'try_element_at(col4, 1)']}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_ipv4_address', 'arguments': {'column': 'col_ipv4'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_ipv4_address
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_ipv4_address resolved successfully: <function is_valid_ipv4_address at 0x7fb48debfb00>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_ipv4_address_in_cidr', 'arguments': {'column': 'col_ipv4', 'cidr_block': '192.168.1.0/24'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_ipv4_address_in_cidr
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_ipv4_address_in_cidr resolved successfully: <function is_ipv4_address_in_cidr at 0x7fb48dee0900>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_ipv6_address', 'arguments': {'column': 'col_ipv6'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_ipv6_address
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_ipv6_address resolved successfully: <function is_valid_ipv6_address at 0x7fb48dee09a0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_ipv6_address_in_cidr', 'arguments': {'column': 'col_ipv6', 'cidr_block': '2001:0db8:85a3:08d3:0000:0000:0000:0000/64'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_ipv6_address_in_cidr
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_ipv6_address_in_cidr resolved successfully: <function is_ipv6_address_in_cidr at 0x7fb48dee0a40>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_data_fresh', 'arguments': {'column': 'col5', 'max_age_minutes': 18000, 'base_timestamp': 'col6'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_data_fresh
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_data_fresh resolved successfully: <function is_data_fresh at 0x7fb48dee0ae0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_email', 'arguments': {'column': 'col_email'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_email
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_email resolved successfully: <function is_valid_email at 0x7fb48debfba0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'has_valid_string_case', 'arguments': {'column': 'col1', 'case': 'lower'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_valid_string_case
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_valid_string_case resolved successfully: <function has_valid_string_case at 0x7fb48debef20>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_national_id', 'arguments': {'column': 'col_ssn', 'country': 'US'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_national_id
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_national_id resolved successfully: <function is_valid_national_id at 0x7fb48debfc40>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_country_code', 'arguments': {'column': 'col_country', 'code_format': 'alpha-2'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_country_code
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_country_code resolved successfully: <function is_valid_country_code at 0x7fb48dee0720>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_currency_code', 'arguments': {'column': 'col_currency', 'code_format': 'alphabetic'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_currency_code
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_currency_code resolved successfully: <function is_valid_currency_code at 0x7fb48dee07c0>
13:13 DEBUG [databricks.labs.dqx.checks_validator] Processing check definition: {'criticality': 'error', 'check': {'function': 'is_valid_language_code', 'arguments': {'column': 'col_language', 'code_format': 'alpha-2'}}}
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_language_code
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_language_code resolved successfully: <function is_valid_language_code at 0x7fb48dee0860>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null', arguments={'column': 'col1'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_empty', arguments={'column': 'col1'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_empty
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_empty resolved successfully: <function is_not_empty at 0x7fb48debea20>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null_and_not_empty', arguments={'column': 'col1', 'trim_strings': True}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null_and_not_empty
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null_and_not_empty resolved successfully: <function is_not_null_and_not_empty at 0x7fb48debe8e0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_in_list', arguments={'column': 'col2', 'allowed': [1, 2, 3]}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_in_list
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_in_list resolved successfully: <function is_in_list at 0x7fb48debf060>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_in_list', arguments={'column': 'col2', 'forbidden': [1000, 2000, 3000]}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_list
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_list resolved successfully: <function is_not_in_list at 0x7fb48debf100>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null_and_is_in_list', arguments={'column': 'col2', 'allowed': [1, 2, 3]}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null_and_is_in_list
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null_and_is_in_list resolved successfully: <function is_not_null_and_is_in_list at 0x7fb48debefc0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null_and_not_empty_array', arguments={'column': 'col4'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null_and_not_empty_array
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null_and_not_empty_array resolved successfully: <function is_not_null_and_not_empty_array at 0x7fb48debf920>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_in_range', arguments={'column': 'col2', 'min_limit': 1, 'max_limit': 10}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_in_range resolved successfully: <function is_in_range at 0x7fb48debf740>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_in_range', arguments={'column': 'col5', 'min_limit': datetime.date(2025, 1, 1), 'max_limit': datetime.date(2025, 2, 24)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_in_range resolved successfully: <function is_in_range at 0x7fb48debf740>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_in_range', arguments={'column': 'col6', 'min_limit': datetime.datetime(2025, 1, 1, 0, 0), 'max_limit': datetime.datetime(2025, 2, 24, 1, 0)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_in_range resolved successfully: <function is_in_range at 0x7fb48debf740>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_in_range', arguments={'column': 'col3', 'min_limit': 'col2', 'max_limit': 'col2 * 2'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_in_range resolved successfully: <function is_in_range at 0x7fb48debf740>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_in_range', arguments={'column': 'col2', 'min_limit': 11, 'max_limit': 20}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_in_range', arguments={'column': 'col5', 'min_limit': datetime.date(2025, 2, 25), 'max_limit': datetime.date(2025, 2, 26)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_in_range', arguments={'column': 'col6', 'min_limit': datetime.datetime(2025, 2, 25, 0, 0), 'max_limit': datetime.datetime(2025, 2, 26, 1, 0)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_in_range', arguments={'column': 'col3', 'min_limit': 'col2 + 10', 'max_limit': 'col2 * 10'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_range
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_range resolved successfully: <function is_not_in_range at 0x7fb48debf7e0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_equal_to', arguments={'column': 'col10', 'value': 2}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_equal_to resolved successfully: <function is_equal_to at 0x7fb48debf4c0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_equal_to', arguments={'column': 'col3', 'value': 'col2'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_equal_to resolved successfully: <function is_equal_to at 0x7fb48debf4c0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_equal_to', arguments={'column': 'col1', 'value': "'unknown'"}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_equal_to', arguments={'column': 'col5', 'value': datetime.date(2025, 2, 24)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_equal_to', arguments={'column': 'col6', 'value': datetime.datetime(2025, 2, 24, 1, 0)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_equal_to', arguments={'column': 'col3', 'value': 'col2 + 5'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_less_than', arguments={'column': 'col2', 'limit': 0}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_less_than', arguments={'column': 'col5', 'limit': datetime.date(2025, 1, 1)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_less_than', arguments={'column': 'col6', 'limit': datetime.datetime(2025, 1, 1, 1, 0)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_less_than', arguments={'column': 'col3', 'limit': 'col2 - 10'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_greater_than', arguments={'column': 'col2', 'limit': 10}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_greater_than', arguments={'column': 'col5', 'limit': datetime.date(2025, 3, 1)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_greater_than', arguments={'column': 'col6', 'limit': datetime.datetime(2025, 3, 24, 1, 0)}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_greater_than', arguments={'column': 'col3', 'limit': 'col2 + 10'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_date', arguments={'column': 'col5'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_date
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_date resolved successfully: <function is_valid_date at 0x7fb48debf9c0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_date', arguments={'column': 'col5', 'date_format': 'yyyy-MM-dd'}, for_each_column=None) criticality='error' name='col5_is_not_valid_date2' filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_date
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_date resolved successfully: <function is_valid_date at 0x7fb48debf9c0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_timestamp', arguments={'column': 'col6', 'timestamp_format': 'yyyy-MM-dd HH:mm:ss'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_timestamp
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_timestamp resolved successfully: <function is_valid_timestamp at 0x7fb48debfa60>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_timestamp', arguments={'column': 'col6'}, for_each_column=None) criticality='error' name='col6_is_not_valid_timestamp2' filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_timestamp
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_timestamp resolved successfully: <function is_valid_timestamp at 0x7fb48debfa60>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_json', arguments={'column': 'col_json_str'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_json
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_json resolved successfully: <function is_valid_json at 0x7fb48dee1580>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='has_json_keys', arguments={'column': 'col_json_str', 'keys': ['key1']}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_json_keys
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_json_keys resolved successfully: <function has_json_keys at 0x7fb48dee1760>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='has_json_keys', arguments={'column': 'col_json_str', 'keys': ['key1', 'key2'], 'require_all': False}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_json_keys
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_json_keys resolved successfully: <function has_json_keys at 0x7fb48dee1760>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='has_valid_json_schema', arguments={'column': 'col_json_str2', 'schema': 'STRUCT<a: BIGINT, b: BIGINT>'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_valid_json_schema
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_valid_json_schema resolved successfully: <function has_valid_json_schema at 0x7fb48dee1800>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_in_future', arguments={'column': 'col6', 'offset': 86400}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_future
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_future resolved successfully: <function is_not_in_future at 0x7fb48debf380>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_in_near_future', arguments={'column': 'col6', 'offset': 36400}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_in_near_future
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_in_near_future resolved successfully: <function is_not_in_near_future at 0x7fb48debf420>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_older_than_n_days', arguments={'column': 'col5', 'days': 10}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_older_than_n_days
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_older_than_n_days resolved successfully: <function is_older_than_n_days at 0x7fb48debf2e0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_older_than_col2_for_n_days', arguments={'column1': 'col5', 'column2': 'col6', 'days': 2}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_older_than_col2_for_n_days
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_older_than_col2_for_n_days resolved successfully: <function is_older_than_col2_for_n_days at 0x7fb48debf240>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='regex_match', arguments={'column': 'col2', 'regex': '[0-9]+', 'negate': False}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: regex_match
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function regex_match resolved successfully: <function regex_match at 0x7fb48debf880>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='sql_expression', arguments={'expression': 'col3 >= col2 and col3 <= 10', 'msg': 'col3 is less than col2 and col3 is greater than 10', 'name': 'custom_output_name', 'negate': False}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='sql_expression', arguments={'expression': 'col3 >= col2 and col3 <= 10', 'msg': 'col3 is less than col2 and col3 is greater than 10', 'columns': ['col2', 'col3']}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null', arguments={}, for_each_column=['col3', 'col5']) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null', arguments={'column': 'col8.field1'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null', arguments={'column': "try_element_at(col7, 'key1')"}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null', arguments={'column': 'try_element_at(col4, 1)'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_equal_to', arguments={'column': 'col8.field1', 'value': 1}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_equal_to resolved successfully: <function is_equal_to at 0x7fb48debf4c0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_equal_to', arguments={'column': "try_element_at(col7, 'key1')", 'value': 'col10'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_equal_to
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_equal_to resolved successfully: <function is_not_equal_to at 0x7fb48debf560>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_less_than', arguments={'column': 'array_min(col4)', 'limit': 1}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_less_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_less_than resolved successfully: <function is_not_less_than at 0x7fb48debf600>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_greater_than', arguments={'column': 'array_max(col4)', 'limit': 10}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_greater_than
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_greater_than resolved successfully: <function is_not_greater_than at 0x7fb48debf6a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='sql_expression', arguments={'expression': "try_element_at(col7, 'key1') < 10", 'msg': "col7 element 'key1' is less than 10", 'name': 'col7_element_key1_less_than_10', 'negate': False}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='sql_expression', arguments={'expression': 'not exists(col4, x -> x >= 10)', 'msg': 'array col4 has an element greater than 10', 'name': 'col4_all_elements_less_than_10', 'negate': False}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: sql_expression
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function sql_expression resolved successfully: <function sql_expression at 0x7fb48debf1a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_not_null', arguments={}, for_each_column=['col1', 'col8.field1', "try_element_at(col7, 'key1')", 'try_element_at(col4, 1)']) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_not_null
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_not_null resolved successfully: <function is_not_null at 0x7fb48debed40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_ipv4_address', arguments={'column': 'col_ipv4'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_ipv4_address
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_ipv4_address resolved successfully: <function is_valid_ipv4_address at 0x7fb48debfb00>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_ipv4_address_in_cidr', arguments={'column': 'col_ipv4', 'cidr_block': '192.168.1.0/24'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_ipv4_address_in_cidr
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_ipv4_address_in_cidr resolved successfully: <function is_ipv4_address_in_cidr at 0x7fb48dee0900>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_ipv6_address', arguments={'column': 'col_ipv6'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_ipv6_address
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_ipv6_address resolved successfully: <function is_valid_ipv6_address at 0x7fb48dee09a0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_ipv6_address_in_cidr', arguments={'column': 'col_ipv6', 'cidr_block': '2001:0db8:85a3:08d3:0000:0000:0000:0000/64'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_ipv6_address_in_cidr
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_ipv6_address_in_cidr resolved successfully: <function is_ipv6_address_in_cidr at 0x7fb48dee0a40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_data_fresh', arguments={'column': 'col5', 'max_age_minutes': 18000, 'base_timestamp': 'col6'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_data_fresh
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_data_fresh resolved successfully: <function is_data_fresh at 0x7fb48dee0ae0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_email', arguments={'column': 'col_email'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_email
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_email resolved successfully: <function is_valid_email at 0x7fb48debfba0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='has_valid_string_case', arguments={'column': 'col1', 'case': 'lower'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: has_valid_string_case
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function has_valid_string_case resolved successfully: <function has_valid_string_case at 0x7fb48debef20>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_national_id', arguments={'column': 'col_ssn', 'country': 'US'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_national_id
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_national_id resolved successfully: <function is_valid_national_id at 0x7fb48debfc40>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_country_code', arguments={'column': 'col_country', 'code_format': 'alpha-2'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_country_code
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_country_code resolved successfully: <function is_valid_country_code at 0x7fb48dee0720>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_currency_code', arguments={'column': 'col_currency', 'code_format': 'alphabetic'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_currency_code
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_currency_code resolved successfully: <function is_valid_currency_code at 0x7fb48dee07c0>
13:13 DEBUG [databricks.labs.dqx.checks_serializer] Processing check definition: check=CheckBlock(function='is_valid_language_code', arguments={'column': 'col_language', 'code_format': 'alpha-2'}, for_each_column=None) criticality='error' name=None filter=None user_metadata=None message_expr=None
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Resolving function: is_valid_language_code
13:13 DEBUG [databricks.labs.dqx.checks_resolver] Function is_valid_language_code resolved successfully: <function is_valid_language_code at 0x7fb48dee0860>
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_null
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_empty
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_in_list
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_in_list
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_null_and_is_in_list
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_null_and_not_empty_array
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_in_range
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_in_range
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_equal_to
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_equal_to
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_less_than
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_greater_than
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_date
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_timestamp
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_json
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=has_json_keys
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=has_valid_json_schema
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_in_future
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_not_in_near_future
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_older_than_n_days
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_older_than_col2_for_n_days
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=regex_match
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_ipv4_address
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_ipv4_address_in_cidr
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_ipv6_address
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_ipv6_address_in_cidr
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_data_fresh
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_email
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=has_valid_string_case
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_national_id
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_country_code
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_currency_code
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra check=is_valid_language_code
13:14 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra engine=save_results_in_table
13:14 INFO [databricks.labs.dqx.io] Setting streaming trigger: {'availableNow': True}
[gw2] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python

Running from acceptance #5471

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

❌ 23/55 passed, 32 failed, 8h51m26s total

❌ test_ai_query_explanation_populated_for_anomalous_row: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (12m1.971s)
... (skipped 21641 bytes)
ABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042 (id=747789043653784)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sm00fcp88 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sm00fcp88
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw6] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_explanation_degrades_when_endpoint_unavailable: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (12m2.019s)
... (skipped 21641 bytes)
ABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw9_afdf4ef9 (id=747789043653773)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw9_afdf4ef9
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_spqc4fjdm schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_spqc4fjdm
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw9] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_multiple_checks_by_metadata: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (13m2.648s)
... (skipped 21695 bytes)
ABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw2_9cd30add (id=747789043653777)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw2_9cd30add
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sd0t9anip schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sd0t9anip
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw2] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata_criticality_warn: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (19m38.139s)
... (skipped 21695 bytes)
ABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw0_fb784f06 (id=747789043653780)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw0_fb784f06
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_si7y5pi06 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_si7y5pi06
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
12:54 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw0] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_with_contributions: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (20m43.377s)
... (skipped 21641 bytes)
ABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw1_ea2c0211 (id=747789043653774)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw1_ea2c0211
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_spxbpslne schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_spxbpslne
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw1] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_explanation_references_dominant_feature_within_word_caps: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (20m43.372s)
... (skipped 21641 bytes)
ABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0 (id=747789043653771)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sgnfw2ad8 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sgnfw2ad8
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw5] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_response_shape_portability[databricks-claude-3-7-sonnet]: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (20m44.529s)
... (skipped 21641 bytes)
ABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw8_1c5b412e (id=747789043653782)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw8_1c5b412e
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_stjmjgzyb schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_stjmjgzyb
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw8] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_checks_and_split_with_correct_quarantine_structure: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (20m45.269s)
... (skipped 21695 bytes)
ABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw4_716a28ce (id=747789043653781)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw4_716a28ce
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_scy8ffyig schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_scy8ffyig
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw4] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_explicit_columns_no_auto_segment: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (25m4.159s)
... (skipped 22550 bytes)
ABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:52 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:53 DEBUG [tests.integration_anomaly.conftest] Created MLflow experiment /Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw3_311a3af0 (id=747789043653772)
12:53 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw3_311a3af0
12:53 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_szinperi9 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_szinperi9
12:53 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
12:54 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=1
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
12:54 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw3] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_explanation_disabled_without_contributions: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (17m14.192s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw9_afdf4ef9
13:05 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sjxkmunoi schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sjxkmunoi
13:08 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:08 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:04 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:05 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:05 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw9_afdf4ef9
13:05 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sjxkmunoi schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sjxkmunoi
13:08 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:08 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw9] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata_with_custom_threshold: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (19m13.697s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw2_9cd30add
13:06 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sdf4eqgbk schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sdf4eqgbk
13:08 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:08 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:06 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:06 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:06 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw2_9cd30add
13:06 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sdf4eqgbk schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sdf4eqgbk
13:08 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:08 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw2] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_explanation_null_for_non_anomalous_row: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (22m14.588s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042
13:05 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_srla3ptcn schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_srla3ptcn
13:08 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:08 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:04 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:05 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:05 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042
13:05 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_srla3ptcn schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_srla3ptcn
13:08 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:08 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw6] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (13m33.465s)
... (skipped 20567 bytes)
n9bkufzw
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw1_ea2c0211
13:13 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sn9bkufzw schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sn9bkufzw
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:13 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw1] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_response_shape_portability[databricks-llama-4-maverick]: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (14m39.116s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0
13:13 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_s9lzfzh73 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_s9lzfzh73
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0
13:13 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_s9lzfzh73 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_s9lzfzh73
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw5] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_anomaly_and_other_checks_combined: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (14m36.995s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw4_716a28ce
13:13 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_scfzqzxho schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_scfzqzxho
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw4_716a28ce
13:13 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_scfzqzxho schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_scfzqzxho
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw4] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata_with_filter_segmented: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (15m46.357s)
... (skipped 20451 bytes)
2.3 /home/runner/work/dqx/dqx/.venv/bin/python
13:12 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:12 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:12 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw0_fb784f06
13:12 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_soc22cp91 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_soc22cp91
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:12 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:12 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:12 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw0_fb784f06
13:12 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_soc22cp91 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_soc22cp91
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
[gw0] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_response_shape_portability[databricks-gpt-oss-20b]: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (15m40.112s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw8_1c5b412e
13:13 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sea229w68 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sea229w68
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:13 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:13 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw8_1c5b412e
13:13 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sea229w68 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sea229w68
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw8] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_zero_config_training: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (18m51.323s)
... (skipped 21807 bytes)
dqx.telemetry] Added User-Agent extra anomaly_num_features=2
13:14 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:14 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw7_ef94e248
13:14 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sdxvzb5bz schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sdxvzb5bz
13:15 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly=train
13:25 INFO [databricks.labs.dqx.anomaly.profiler] Auto-segmentation selected 1 column: [region] (2 segments, ~200 rows/segment)
13:25 INFO [databricks.labs.dqx.anomaly.training_service] Auto-selected 2 columns: ['amount', 'discount']
13:25 INFO [databricks.labs.dqx.anomaly.training_service] Auto-detected 1 segment columns: ['region'] (2 total segments)
13:25 WARNING [databricks.labs.dqx.anomaly.training_service] Segment column 'region' has segments with <1000 rows (min: 200), models may be unreliable.
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:27 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
[gw7] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_checks: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (11m24.629s)
... (skipped 20567 bytes)
ijhvdltv
13:25 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:25 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:25 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:22 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:22 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:22 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw9_afdf4ef9
13:22 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sijhvdltv schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sijhvdltv
13:25 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:25 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:25 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=2
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw9] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata_with_contributions: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (10m18.864s)
... (skipped 20513 bytes)
ema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sokm0yxuo
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:27 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:25 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:25 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:25 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw2_9cd30add
13:25 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sokm0yxuo schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sokm0yxuo
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:27 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw2] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata_with_columns_autodiscovery: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (8m22.401s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw1_ea2c0211
13:27 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sfuizzem5 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sfuizzem5
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw1_ea2c0211
13:27 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sfuizzem5 schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sfuizzem5
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw1] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_explanation_redact_columns_filters_output: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (9m19.056s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042
13:27 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_st2ac4mcz schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_st2ac4mcz
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042
13:27 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_st2ac4mcz schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_st2ac4mcz
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:27 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw6] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_with_criticality_warn: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (10m25.861s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw4_716a28ce
13:28 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_s93shtrpu schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_s93shtrpu
13:29 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:29 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:28 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:28 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:28 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw4_716a28ce
13:28 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_s93shtrpu schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_s93shtrpu
13:29 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:29 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw4] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_response_shape_portability[databricks-gemma-3-12b]: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (11m21.027s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0
13:28 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_saoggemjy schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_saoggemjy
13:29 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:29 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:28 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:28 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:28 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0
13:28 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_saoggemjy schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_saoggemjy
13:29 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:29 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw5] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_explanation_on_by_TEST_SCHEMA: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (11m22.956s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw8_1c5b412e
13:29 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_srhmpof7g schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_srhmpof7g
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:29 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:29 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:29 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw8_1c5b412e
13:29 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_srhmpof7g schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_srhmpof7g
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:32 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw8] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_checks_and_split: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (10m3.018s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw9_afdf4ef9
13:33 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sd3u9ss3r schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sd3u9ss3r
13:34 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:34 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:33 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:33 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:33 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw9_afdf4ef9
13:33 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sd3u9ss3r schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sd3u9ss3r
13:34 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:34 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw9] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata_with_drift_threshold: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (11m12.305s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw2_9cd30add
13:35 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sgag9jdzc schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sgag9jdzc
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw2_9cd30add
13:35 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sgag9jdzc schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sgag9jdzc
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw2] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_by_metadata_with_multiple_checks: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (11m9.728s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw1_ea2c0211
13:35 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_ssjkghymu schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_ssjkghymu
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:35 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:35 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw1_ea2c0211
13:35 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_ssjkghymu schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_ssjkghymu
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw1] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_explanation_one_call_per_group: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (10m14.986s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042
13:36 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_surae7ccm schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_surae7ccm
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:37 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:37 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw6_89277042
13:36 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_surae7ccm schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_surae7ccm
13:36 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:36 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:37 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:37 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw6] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_apply_anomaly_check_info_column_structure: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (9m6.925s)
... (skipped 20387 bytes)
87e/dqx_integration_tests_gw4_716a28ce
13:38 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sobif02ih schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sobif02ih
13:39 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:39 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:38 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:38 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:38 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw4_716a28ce
13:38 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sobif02ih schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sobif02ih
13:39 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:39 INFO [databricks.labs.dqx.anomaly.training_service] Using explicitly set contamination=10.00% (expected_anomaly_rate=2.00% ignored)
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw4] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_ai_query_response_shape_portability[databricks-meta-llama-3-3-70b-instruct]: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (10m14.195s)
... (skipped 20333 bytes)
d: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0
13:39 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sbm08kh5y schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sbm08kh5y
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:39 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:39 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:39 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw5_7c4ee3e0
13:39 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sbm08kh5y schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sbm08kh5y
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw5] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python
❌ test_contribution_percentages_sum_to_hundred: pyspark.errors.exceptions.connect.SparkException: [ISOLATION_STARTUP_FAILURE.GENERIC] Failed to start isolated execution environment. Please contact Databricks support. SQLSTATE: XXKSS (11m5.446s)
... (skipped 20513 bytes)
ema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sosr3fisz
13:44 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:44 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:44 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
13:44 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:44 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 INFO [tests.conftest] Overriding DATABRICKS_CLUSTER_ID with DATABRICKS_DQX_CLUSTER_ID: DATABRICKS_DQX_CLUSTER_ID
13:40 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:40 DEBUG [tests.integration_anomaly.conftest] MLflow configured: experiment=/Users/3fe685a1-96cc-4fec-8cdb-6944f5c9787e/dqx_integration_tests_gw7_ef94e248
13:40 INFO [databricks.labs.pytester.fixtures.baseline] Created dqx.dummy_sosr3fisz schema: https://DATABRICKS_HOST/#explore/data/dqx/dummy_sosr3fisz
13:44 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:44 INFO [databricks.labs.dqx.anomaly.training_service] Using expected_anomaly_rate=2.00% for model training
13:44 DEBUG [databricks.labs.dqx.telemetry] Added User-Agent extra anomaly_num_features=3
13:44 INFO [databricks.sdk] Using Databricks Metadata Service authentication
13:44 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw7] linux -- Python 3.12.3 /home/runner/work/dqx/dqx/.venv/bin/python

Running from anomaly #1585

@mwojtyczka mwojtyczka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice refactor — decoupling rule generation from Spark and reading UC schemas via the SDK is the right shape, and splitting PK detection into DQLLMPrimaryKeyEngine cleanly isolates the one path that genuinely needs Spark. Good test coverage too. A few things worth addressing before merge (most are correctness/consistency around the UC-vs-Spark routing):

  • Special-char UC tables silently force Spark (UC_TABLE_PATTERN). A valid backtick-quoted 3-level table (`my-catalog`.schema.table) is rejected by the pattern and falls through to the Spark path — re-introducing the Spark dependency the PR removes, for exactly the hyphenated/special-char names UC allows. The existing TABLE_PATTERN already handles backticks.
  • type_text vs simpleString() divergence: the SDK and Spark paths format types differently, so the docstring claim that they're interchangeable isn't quite true — same table, different LLM context.
  • Routing by omission: non-UC locations (two-level HMS names, views, invalid strings) fall to Spark implicitly rather than being explicitly classified/validated.
  • DQLLMPrimaryKeyEngine.__init__ eagerly builds Spark, inconsistent with the lazy-property pattern introduced for DQGenerator.
  • Minor: duplicated configurator/dspy-context boilerplate across the two engines; and one PK test asserts an internal final_status value rather than the documented result contract.

Details inline.

STORAGE_PATH_PATTERN = re.compile(r"^(/|s3:/|abfss:/|gs:/)")
# catalog.schema.table or schema.table or database.table (backticks allow special chars like hyphens)
TABLE_PATTERN = re.compile(r"^(?:(?:`[^`]+`|[a-zA-Z0-9_]+)\.)?(?:`[^`]+`|[a-zA-Z0-9_]+)\.(?:`[^`]+`|[a-zA-Z0-9_]+)$")
UC_TABLE_PATTERN = re.compile(r"^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UC_TABLE_PATTERN only accepts [a-zA-Z0-9_], so it rejects valid backtick-quoted 3-level UC tables (e.g. `my-catalog`.schema.table or main.`my-schema`.tbl). Those are legitimate UC tables the tables.get API can resolve, but they'll fail this match and fall through to the Spark path in generator._get_schema_info — re-introducing the Spark session the PR is trying to avoid. The existing TABLE_PATTERN right above already handles backticks; consider reusing/extending that logic (or stripping backticks) so special-char UC names still take the SDK path. The new test_uc_table_pattern_rejects_non_uc_locations currently codifies this as intended — worth reconsidering.

NotFound: If the table does not exist or is not accessible.
"""
table_info = workspace_client.tables.get(table)
columns = [{"name": col.name or "", "type": col.type_text or ""} for col in (table_info.columns or [])]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

col.type_text is the UC DDL type text, which can differ in case/format from Spark's field.dataType.simpleString() used by get_column_metadata (e.g. nested types like ARRAY<INT>/STRUCT<...> vs array<int>/struct<...>). The docstring says the two produce the same shape and are 'interchangeable', but the type values can differ for the same table depending on which path runs, making the LLM prompt context (and thus generated rules) non-deterministic across UC vs Spark. Consider normalizing (e.g. lowercase, or map to Spark's simpleString form) so both paths emit identical type strings.

Returns:
A JSON string containing the column metadata with columns wrapped in a "columns" key.
"""
if UC_TABLE_PATTERN.match(input_config.location):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Routing is by omission: only UC_TABLE_PATTERN is checked, and everything else (two-level HMS name like default.users, a bare view name, or a malformed location) silently goes to the Spark path. For a caller expecting Spark-free operation, a two-level table unexpectedly spins up a session; a truly invalid location defers to read_input_data's generic InvalidConfigError rather than being validated here. Consider explicitly classifying the location (UC 3-level → SDK; storage path / 2-level table → Spark; otherwise raise a clear error) instead of an implicit else-fallback.

spark: Optional Spark session. If None, a new session is created.
detector: Optional primary key detector. If None, one is created using *spark*.
"""
self.spark = SparkSession.builder.getOrCreate() if spark is None else spark

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

__init__ eagerly calls SparkSession.builder.getOrCreate(), so merely constructing DQLLMPrimaryKeyEngine requires Spark — inconsistent with the lazy spark property you introduced for DQGenerator in this same PR. Since the detector can be injected (and the metadata classification path may not need a live session), consider making Spark lazy here too, so construction doesn't force a session before any data scan actually happens.

detector: Optional primary key detector. If None, one is created using *spark*.
"""
self.spark = SparkSession.builder.getOrCreate() if spark is None else spark
self._configurator = LLMModelConfigurator(model_config)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor (DRY): self._configurator = LLMModelConfigurator(model_config) plus the with dspy.settings.context(lm=self._configurator.create_lm()) wrapper are now duplicated between DQLLMEngine and DQLLMPrimaryKeyEngine. The split was to isolate Spark, but the LM-configuration mechanics are copy-pasted; a small shared base/mixin would keep token-handling changes from having to be applied in two places.


assert result["success"] is False
assert result["table"] == "catalog.schema.orders"
assert result["final_status"] == "metadata_error"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This asserts result['final_status'] == 'metadata_error', which couples the test to LLMPrimaryKeyDetector's internal failure taxonomy rather than the engine's documented contract (return a failed result with success/table, don't raise). If the detector's error classification is refactored, this breaks even though the engine behavior is unchanged. Consider asserting on the documented keys (success is False, table == ...) and dropping the internal final_status check.

@mwojtyczka mwojtyczka added the under-review This PR is currently being reviewed by one of DQX maintainers. label Aug 4, 2026

@mwojtyczka mwojtyczka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generally looking good, left some comments

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

under-review This PR is currently being reviewed by one of DQX maintainers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE]: Refactor AI-Assisted Rules Generation to remove dependency on Spark

2 participants