{% extends "base.html" %} {% block title %}Data Profile - {{ config.name }} - engineer_kit{% endblock %} {% block content %}

Data Profile

{{ config.name }} · análise agregada antes da Bronze

Voltar ao pipeline
O profiling é somente leitura: não grava dados na Bronze e não avança checkpoint. A primary_key configurada é reutilizada na análise mesmo com deduplicação desligada; você também pode informar uma PK candidata temporária abaixo. O modo sample é o padrão seguro da UI; escolha full explicitamente para percorrer toda a fonte configurada.

Escopo

Opcional. Com PK, duplicates compara a identidade do registro; sem PK configurada/candidata, compara a linha completa.

Métricas

Sem seleção = perfil completo. Selecione apenas o que quer calcular para reduzir trabalho.

{% for metric in metrics %} {% endfor %}
{% if error %}
{{ error }}
{% endif %} {% if report %}

Profile Report v{{ report.version }}

scope={{ report.scope }} · {{ "{:,}".format(report.records_analyzed) }} registros analisados · {{ report.requested_metrics | join(', ') }}

{% set q = report.quality %}

Registros analisados

{{ "{:,}".format(report.records_analyzed) }}

Campos observados

{{ report.fields | length }}
{% if report.duplicates %}

Modo de duplicidade

{{ "PK: " ~ (report.duplicates.key_fields | join(', ')) if report.duplicates.key_fields else "linha completa" }}

Únicos

{{ "{:,}".format(report.duplicates.unique_rows) }}

Duplicatas

{{ "{:,}".format(report.duplicates.duplicate_rows) }}
{% if report.duplicates.key_fields %}

PK inválida

{{ "{:,}".format(report.duplicates.invalid_key_rows) }}
{% endif %} {% endif %}

Campos com missing

{{ "não calculado" if q.fields_with_missing is none else q.fields_with_missing }}

Campos com null

{{ "não calculado" if q.fields_with_nulls is none else q.fields_with_nulls }}

Campos com empty

{{ "não calculado" if q.fields_with_empty is none else q.fields_with_empty }}

Campos com tipos mistos

{{ "não calculado" if q.mixed_type_fields is none else q.mixed_type_fields }}

Data Quality / Fields

{% if report.fields %} {% for path, field in report.fields.items() %} {% endfor %}
CampoPresentMissingNullEmptyUniqueTipos
{{ path }} {{ "{:,}".format(field.records_present) }} {{ "—" if field.missing is none else "{:,}".format(field.missing) }} {{ "—" if field.nulls is none else "{:,}".format(field.nulls) }} {{ "—" if field.empty is none else "{:,}".format(field.empty) }} {% if field.cardinality %}{{ "{:,}".format(field.cardinality.count) }} {{ field.cardinality.precision }}{% else %}—{% endif %} {% if field.types %}{% for kind, count in field.types.items() %}{{ kind }}={{ count }}{% if not loop.last %}, {% endif %}{% endfor %}{% else %}—{% endif %}
{% else %}
As métricas solicitadas não exigem análise por campo.
{% endif %} {% if report.warnings %}

Warnings

{% endif %} {% endif %} {% endblock %}