{% extends "base.html" %} {% from "_context.html" import context_panel %} {% block body %} {% macro col_links(cols, base_url='') %} {%- for c in cols %}{{ c }}{% if not loop.last %}, {% endif %}{% endfor -%} {% endmacro %}
Connection notes for {{ conn }} apply to this table.
{% endif %} {% if unprofiled_notice %}{{ row_count.filter }}{% endif %}
{{ name }}: {{ note|md }}| Start | Count |
|---|---|
| {{ b.start }} | {{ b.count }} |
{{ k.expression }}{% if k.column %} ({{ k.column }}){% endif %}{{ k.expression }}{% if k.column %} ({{ k.column }}){% endif %}unmeasured list: {{ unmeasured['physical_layout'] }}
| Determinant | Dependent | Strength |
|---|---|---|
| {{ d.determinant }} | {{ d.dependent }} | {{ d.strength|percent }} |
unmeasured list: {{ unmeasured['dependencies'] }}
{{ name }}unmeasured list: {{ message }}{{ name }}disabled list: {{ message }}{{ 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.zero_count or col.negative_count or col.empty_count %}
{% if col.zero_count %}{{ col.zero_count|number }} zero{% endif %}
{% if col.zero_count and col.negative_count %}·{% endif %}
{% if col.negative_count %}{{ col.negative_count|number }} negative{% endif %}
{% if (col.zero_count or col.negative_count) and col.empty_count %}·{% endif %}
{% if col.empty_count %}{{ col.empty_count|number }} empty{% endif %}
{% endif %}
|
{% if col.cardinality %} {% else %} n/a {% endif %} |
{% if col.distribution %} {{ col.distribution|replace('_', ' ') }} {% endif %}
{% if col.redacted %}redacted ({{ col.redacted }}) {% endif %}
{% if col.unmeasured %}unmeasured: {{ col.unmeasured|join(', ') }} {% endif %}
{% if col.value_list %}
{% if col.value_list.bars %}
{% endif %}
{% if col.value_list.coverage is not none %}
{{ col.value_list.coverage_text }}
{% if col.value_list.coverage_method == 'bounded' %}bounded{% 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.mean is not none or col.range.sum is not none %}
{% if col.range.mean is not none %}mean {{ col.range.mean|number }}{% endif %}
{% if col.range.mean is not none and col.range.sum is not none %}·{% endif %}
{% if col.range.sum is not none %}sum {{ col.range.sum|number }}{% endif %}
{% endif %}
{% if col.range.frequencies %}
top {{ col.range.frequencies.top|number }} · bottom {{ col.range.frequencies.bottom|number }}
· {{ col.range.frequencies.listed }} listed of {{ col.range.frequencies.total|number }}
{% endif %}
{% if col.range.freshness %}
{{ col.range.freshness.classification }} · {{ col.range.freshness.max_age_days }}d old{% if col.range.freshness_clause %} · {{ col.range.freshness_clause }}{% endif %}
{% endif %}
{% endif %}
{% if col.length %}
length {{ col.length.min|number }}-{{ col.length.max|number }} · avg {{ col.length.avg|number }} · p95 {{ col.length.p95|number }}
{% endif %}
{% for p in col.parts %}
{{ p.label }} · {{ p.classification }} · {{ p.notes }} |
{{ col.notes }} {% if col.sketch_available %}sketch{% endif %} |
| Rows | Null together |
|---|---|
| {{ p.count|number }} | {{ col_links(p.columns) if p.columns else '(none - fully populated)' }} |
unmeasured list: {{ unmeasured['null_patterns'] }}
| 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 or r.target_path %}via {{ (r.path or ['(column)'])|join('.') }} -> {{ (r.target_path or ['(column)'])|join('.') }} {% endif %}
{% if r.note %}{{ r.note }} {% endif %}
{% if r.observed %}
{% if r.observed.scope_compatible == false %}
scopes not comparable
{% else %}
fanout avg {{ r.observed.fanout_avg|number }}{% if r.observed.fanout_max is not none %} (max {{ r.observed.fanout_max|number }}){% endif %},
covers {{ r.observed.target_coverage|percent }} of target
{% if r.observed.containment is not none %}, {{ r.observed.containment|percent }} of referencing values contained{% endif %}
{% if r.observed.containment is not none and r.observed.answerable_count is not none %}({{ r.observed.answerable_count|number }} answerable){% endif %}
{% if r.observed.coherent == false %}INCOHERENT: referencing cardinality exceeds the target's {% endif %}
{% 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.referencer_path or r.path %}via {{ (r.referencer_path or ['(column)'])|join('.') }} -> {{ (r.path or ['(column)'])|join('.') }} {% endif %}
{% if r.note %}{{ r.note }} {% endif %}
{% if r.observed %}
{% if r.observed.scope_compatible == false %}
scopes not comparable
{% else %}
fanout avg {{ r.observed.fanout_avg|number }}{% if r.observed.fanout_max is not none %} (max {{ r.observed.fanout_max|number }}){% endif %},
covers {{ r.observed.target_coverage|percent }} of target
{% if r.observed.containment is not none %}, {{ r.observed.containment|percent }} of referencing values contained{% endif %}
{% if r.observed.containment is not none and r.observed.answerable_count is not none %}({{ r.observed.answerable_count|number }} answerable){% endif %}
{% if r.observed.coherent == false %}INCOHERENT: referencing cardinality exceeds the target's {% endif %}
{% endif %}
{% endif %}
{% if r.rejected %}REJECTED by human annotation{% if r.rejected_note %}: {{ r.rejected_note }}{% endif %} {% endif %}
|
{{ ddl }}