{% extends "base.html" %} {% block body %} {% macro col_links(cols, base_url='') %} {%- for c in cols %}{{ c }}{% if not loop.last %}, {% endif %}{% endfor -%} {% endmacro %}
{{ row_count.filter }}{% endif %}
{{ k.expression }}{% if k.column %} ({{ k.column }}){% endif %}| Determinant | Dependent | Strength |
|---|---|---|
| {{ d.determinant }} | {{ d.dependent }} | {{ (d.strength * 100)|round(1) }}% |
{{ diagram }}
| Column | Type | Class | Null rate | Cardinality | Distribution | Notes |
|---|---|---|---|---|---|---|
|
{{ col.name }}
{% if col.collation %} collation {{ col.collation }} {% endif %}
{% if col.null_companions %}null with: {{ col_links(col.null_companions) }} {% endif %}
{% if col.annotation_note %}{{ col.annotation_note|md }} {% endif %}
{% for value, note in col.annotation_values %}
{{ value }}: {{ note }}
{% endfor %}
{% for stat, predicate in col.annotation_claims %}
claims {{ stat }} {{ predicate }}
{% endfor %}
|
{{ col.sql_type }}{% if not col.nullable %} not null{% endif %} | {{ col.classification|capitalize|nbsp }} | {% if col.cardinality %} {% else %} n/a {% endif %} |
{% if col.distribution %} {{ col.distribution|replace('_', ' ') }} {% endif %}
{% if col.redacted %}redacted ({{ col.redacted }}) {% endif %}
{% if col.value_list %}
{% if col.value_list.bars %}
{% endif %}
{% if col.value_list.coverage is not none %}
{{ (col.value_list.coverage * 100)|round(1) }}% covered
{% if col.value_list.coverage_method == 'bounded' %}clamped{% endif %}
{% endif %}
{% endif %}
{% if col.range %}
{% if col.range.redacted %}
bounds withheld (redacted: {{ col.range.redacted }})
{% else %}
{% if col.range.box %}
{{ col.range.bounds.min|dt }}
{{ col.range.box.p25_value|dt }}
{{ col.range.box.p50_value|dt }}
{{ col.range.box.p75_value|dt }}
{{ col.range.bounds.max|dt }}
{% endif %}
{% if col.range.percentiles %}
{% for k, v in col.range.percentiles %}{{ k }} {{ v|dt }}{% endfor %}
{% endif %}
{% endif %}
{% if col.range.unrepresentable %}
unrepresentable: {{ col.range.unrepresentable|join(', ') }}
{% endif %}
{% if col.range.frequencies %}
top {{ col.range.frequencies.top|human }} · bottom {{ col.range.frequencies.bottom|human }}
· {{ col.range.frequencies.listed }} listed of {{ col.range.frequencies.total|human }}
{% endif %}
{% if col.range.freshness %}
{{ col.range.freshness.classification }} · {{ col.range.freshness.max_age_days }}d old
{% endif %}
{% endif %}
|
{{ col.notes }} {% if col.sketch_available %}sketch{% endif %} |
| Rows | Null together |
|---|---|
| {{ p.count|human }} | {{ col_links(p.columns) if p.columns else '(none - fully populated)' }} |
| Direction | Columns | Table | Columns | Detection | Detail |
|---|---|---|---|---|---|
| refers to | {{ col_links(r.column) }} | {{ r.target_table }} | {{ col_links(r.target_column, url_for('table', conn=conn, table=r.target_table)) }} | {{ r.detection }} |
{% if r.on_delete %} on_delete={{ r.on_delete }} {% endif %}
{% if r.constraint_name %}{{ r.constraint_name }} {% endif %}
{% if r.path %}via {{ r.path|join('.') }}{% if r.target_path %} -> {{ r.target_path|join('.') }}{% endif %} {% endif %}
{% if r.observed %}
fanout avg {{ '%.1f'|format(r.observed.fanout_avg) }}{% if r.observed.fanout_max is not none %} (max {{ r.observed.fanout_max }}){% endif %},
covers {{ (r.observed.target_coverage * 100)|round(1) }}% of target
{% if r.observed.containment is not none %}, {{ (r.observed.containment * 100)|round(1) }}% of referencing values contained{% endif %}
{% if r.observed.coherent == false %}INCOHERENT: referencing cardinality exceeds the target's {% endif %}
{% endif %}
{% if r.rejected %}REJECTED by human annotation{% if r.rejected_note %}: {{ r.rejected_note }}{% endif %} {% endif %}
|
| referenced by | {{ col_links(r.column) }} | {{ r.referencer_table }} | {{ col_links(r.referencer_column, url_for('table', conn=conn, table=r.referencer_table)) }} | {{ r.detection }} |
{% if r.on_delete %} on_delete={{ r.on_delete }} {% endif %}
{% if r.constraint_name %}{{ r.constraint_name }} {% endif %}
{% if r.observed %}
fanout avg {{ '%.1f'|format(r.observed.fanout_avg) }}{% if r.observed.fanout_max is not none %} (max {{ r.observed.fanout_max }}){% endif %},
covers {{ (r.observed.target_coverage * 100)|round(1) }}% of target
{% if r.observed.containment is not none %}, {{ (r.observed.containment * 100)|round(1) }}% of referencing values contained{% endif %}
{% if r.observed.coherent == false %}INCOHERENT: referencing cardinality exceeds the target's {% endif %}
{% endif %}
|
{{ ddl }}