Skip to content

databricks: case-sensitive cascade-drop leaves metric views referencing dropped fields #422

Description

@christianeu-db

Summary

When a field is dropped (e.g. no DATABRICKS dialect), cascade-drop fails to detect a metric that references it in a different case. Databricks SQL identifiers are case-insensitive, but the cascade-drop regexes are case-sensitive, so a metric like COUNT(DISTINCT REGION_NAME) survives referencing a dropped region_name.

Root cause

converters/databricks/src/ossie_databricks/ossie_to_metric_view.py (_references_dropped):

if re.search(r"measure\(\s*" + re.escape(m) + r"\s*\)", expr):          # no re.IGNORECASE
    return m
if d != self_name and re.search(r"(?<![\w.])" + re.escape(d) + r"(?![\w.])", expr):  # no re.IGNORECASE
    return d

The converter normalizes identifier case elsewhere (L99-101, 158-164, 545-549) but not here.

Repro (real converter, HEAD ab8fc1a — EXECUTED)

Model: region_name (T_SQL-only → dropped) + metric region_count = COUNT(DISTINCT REGION_NAME) (DATABRICKS). Actual output:

measures:
- name: region_count
  expr: COUNT(DISTINCT REGION_NAME)   # dangling reference to a dropped field

Warning emitted: [field 'region_name'] no DATABRICKS/ANSI_SQL dialect; dropping field. The metric should have been cascade-dropped.

Suggested fix

Add re.IGNORECASE to both patterns in _references_dropped.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions