View a markdown version of this page

Escritura de resultados de calidad de los datos en las tablas del Catálogo de datos - AWS Glue

Escritura de resultados de calidad de los datos en las tablas del Catálogo de datos

Puede configurar las ejecuciones de evaluación de Calidad de datos de AWS Glue para que escriban automáticamente los resultados en las tablas de Apache Iceberg del Catálogo de datos de AWS Glue. Una vez que active la salida de resultados, podrá consultar directamente los resultados de calidad de datos, crear paneles con herramientas de visualización y mantener un historial centralizado de los resultados de calidad de datos en toda su cuenta.

Puede escribir los siguientes tipos de resultados de calidad de datos en las tablas del Catálogo de datos:

  • Resultados de las reglas: el resultado de aprobación o rechazo de cada regla del conjunto de reglas, incluidas las métricas evaluadas y los motivos del error

  • Resultados de la creación de perfiles: estadísticas recopiladas por los analizadores, incluidos los valores escalares (como la media y la desviación estándar) y los datos de distribución (histogramas y distribuciones de valores)

  • Resultados a nivel de fila: resultados de evaluación por registro que identifican qué filas específicas del conjunto de datos han aprobado o no cada regla

  • Resultados de la observación: predicciones de detección de anomalías, incluidos los valores esperados, los límites de la predicción y si el valor real se marcó como una anomalía

Requisitos previos

Para escribir los resultados de la calidad de datos en las tablas del Catálogo de datos, el rol de IAM que utilice para la ejecución de la evaluación debe tener los siguientes permisos:

  • Permiso para crear y actualizar bases de datos y tablas en el Catálogo de datos de AWS Glue

  • Permiso para escribir en la ubicación de Amazon S3 donde se almacenan los datos de la tabla de Iceberg

La ejecución de la evaluación utiliza el rol de IAM que especifique para escribir en las tablas de resultados. Este es el mismo rol que tiene acceso a la tabla de datos de origen.

Configuración de la salida de los resultados

La salida de los resultados de la calidad de datos se configura mediante el parámetro --additional-run-options de la API StartDataQualityRulesetEvaluationRun o el parámetro additional_options de los trabajos de ETL de AWS Glue. De forma predeterminada, Calidad de datos de AWS Glue no escribe los resultados en las tablas del Catálogo de datos. Debe activar explícitamente cada tipo de resultado que desee escribir.

Cada tipo de resultado tiene su propio bloque de configuración con una estructura CatalogTableConfig compartida. Si no proporciona un elemento CatalogTableConfig, Calidad de datos de AWS Glue obtiene automáticamente los valores predeterminados, incluidos el nombre de la tabla y la ruta de Amazon S3.

La estructura CatalogTableConfig contiene los siguientes campos:

  • DatabaseName (opcional): nombre de la base de datos del catálogo para la tabla de destino. Si no se especifica, se crea una base de datos predeterminada.

  • TableName (opcional): nombre de la tabla de destino. Si no se especifica, se usa un nombre de tabla predeterminado.

  • S3Location (opcional): ubicación de Amazon S3 donde se almacenan los datos de las tablas. Formato: s3://amzn-s3-demo-bucket/prefix/. Si no se especifica, los resultados se almacenan en una ubicación predeterminada.

  • CatalogId (opcional): ID del Catálogo de datos de AWS Glue donde se crea la tabla. Si no se especifica ninguno, se usa el ID de cuenta de AWS de forma predeterminada.

Ejemplo: configuración de los resultados de las reglas y los resultados de la creación de perfiles

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "DataQualityRuleResults": { "WriteDataQualityRuleResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "rule_results" } }, "ProfilingResults": { "WriteProfilingResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "profiles" } } }'

Ejemplo: configuración de los resultados a nivel de fila

Para obtener resultados a nivel de fila, también puede especificar el tipo de registros que se van a incluir y el número máximo de filas que se van a escribir.

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "RowLevelResults": { "MaxRowsToWrite": 5000, "ResultType": "FAILED_ONLY", "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "row_level_results" } } }'

El parámetro ResultType acepta los siguientes valores:

  • FAILED_ONLY: escriba solo las filas que no cumplan al menos una regla de calidad de datos.

  • PASSED_ONLY: escriba solo las filas que cumplieron todas las reglas de calidad de datos.

  • ALL: escriba todas las filas con sus resultados de evaluación.

Ejemplo: configuración de trabajos de ETL de AWS Glue

En los trabajos de ETL de AWS Glue, se configura la salida de resultados mediante el parámetro additional_options con claves de notación de puntos:

result = EvaluateDataQuality.process_rows( frame=dynamic_frame, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "my_context", "enableDataQualityResultsPublishing": True }, additional_options={ "observations.scope": "ALL", "dataQualityResultsPublishing.strategy": "BEST_EFFORT", "dataQualityResultsPublishing.resultsFormat.profilingResults.writeProfilingResultsEnabled": "true", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.databaseName": "my_db", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.tableName": "profiling_results", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.s3Location": "s3://amzn-s3-demo-bucket/profiling/", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.catalogId": "123456789012" } )

Ejemplo: configuración de los resultados de la observación

Puede configurar los resultados de la observación de la misma manera que otros tipos de resultados. Los resultados de la observación requieren que la detección de anomalías esté activada (ObservationScope: ALL):

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "ObservationScope": "ALL", "ObservationResults": { "WriteObservationResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "observation_results" } } }'

Esquemas de tabla

Calidad de datos de AWS Glue escribe cada tipo de resultado en una tabla de Iceberg independiente. Los resultados de las reglas, los resultados de la creación de perfiles (incluida la tabla de resultados de distribución independiente) y las tablas de resultados de las observaciones se dividen según catalog_id, database_name, table_name y day(stored_on) para permitir consultas eficientes. Puede filtrar en stored_on directamente para las consultas basadas en el tiempo e Iceberg se encarga de reducir las particiones automáticamente.

Tabla de resultados de las reglas

La tabla de resultados de las reglas almacena el resultado de aprobación o rechazo de cada regla evaluada durante una ejecución de calidad de datos.

Columna Tipo Descripción
dq_result_id STRING Identificador único del resultado de calidad de datos.
rule_name STRING Nombre de la regla (por ejemplo, Rule_1).
rule_description STRING Expresión DQDL para la regla.
rule_result STRING Resultado de la evaluación: PASS o FAIL.
evaluation_message STRING Un mensaje que describe el motivo del error, si procede.
evaluated_metrics MAPA<CADENA, DOBLE> Las métricas evaluadas por la regla.
catalog_id STRING ID de catálogo de la tabla de origen.
database_name STRING Nombre de la base de datos de la tabla de origen.
table_name STRING El nombre de la tabla de origen.
ruleset_evaluation_run_id STRING ID de la ejecución de la evaluación.
started_on TIMESTAMP Cuándo comenzó la evaluación.
completed_on TIMESTAMP Cuándo se completó la evaluación.
evaluated_rule STRING Expresión de la regla evaluada tras la resolución del operando.
ruleset_name STRING Nombre del conjunto de reglas que produjo este resultado.

Tabla de resultados de la creación de perfiles

En la siguiente tabla se describen las columnas de la tabla de resultados de la creación de perfiles. Esta tabla almacena las estadísticas escalares recopiladas por los analizadores y las reglas (como Mean, StandardDeviation y Completeness). AWS Calidad de datos de Glue almacena las estadísticas de distribución en una tabla de resultados de distribución independiente.

Columna Tipo Descripción
profile_id STRING Identificador único del perfil de calidad de datos.
statistic_id STRING Identificador único de la estadística.
statistic_name STRING Nombre de la estadística (por ejemplo, Mean, Completeness)
evaluation_level STRING Nivel en el que se evalúa la estadística: Dataset, Column o Multicolumn.
statistics_value DOUBLE Valor escalar de la estadística.
statistic_properties MAPA<CADENA, CADENA> Propiedades adicionales de la estadística.
columns_referenced MATRIZ<CADENA> Las columnas a las que hace referencia la estadística.
referenced_datasets MATRIZ<CADENA> Conjuntos de datos a los que se hace referencia para la estadística.
column_name STRING Nombre de la columna de destino.
dq_result_id STRING Identificador de resultados de calidad de datos.
started_on TIMESTAMP Cuándo comenzó la evaluación.
completed_on TIMESTAMP Cuándo se completó la evaluación.
stored_on TIMESTAMP La hora en que se escribió el registro en la tabla.
catalog_id STRING ID de catálogo de la tabla de origen.
database_name STRING Nombre de la base de datos de la tabla de origen.
table_name STRING Nombre de la tabla de origen.
region STRING Región de AWS.
account_id STRING ID de la cuenta de AWS.
ruleset_evaluation_run_id STRING ID de la ejecución de la evaluación.

Tabla de resultados de la distribución

En la siguiente tabla se describen las columnas de la tabla de resultados de la distribución. Los resultados de la distribución se almacenan por separado de las estadísticas de creación de perfiles escalares, con una fila por intervalo o categoría. Puede configurar esta tabla dentro del bloque ProfilingResults.DistributionResults.

Columna Tipo Descripción
statistic_id STRING Identificador único de la estadística de distribución.
column_name STRING Columna de origen (por ejemplo, “age” o “department”).
data_type STRING Tipo de datos de la columna (por ejemplo, “LongType”, “StringType”).
num_bins INT Número de intervalos utilizados para la distribución.
bin_index INT Posición del contenedor basada en 0.
bin_label STRING Para las columnas categóricas: el valor distintivo. NULL para columnas numéricas.
bin_lower_bound STRING Para columnas numéricas: el borde inferior del intervalo. NULL para las columnas categóricas.
bin_upper_bound STRING Para columnas numéricas: el borde superior del intervalo. NULL para las columnas categóricas.
bin_count BIGINT Recuento de frecuencias para este intervalo.
null_count INT Número de valores NULL excluidos de la distribución. El mismo valor en cada fila para una estadística determinada dentro de una ejecución. NULL cuando no hay valores nulos.
tail_count INT Frecuencia agregada de valores categóricos más allá de los 20 primeros. El mismo valor en cada fila para una estadística determinada dentro de una ejecución. NULL para histogramas numéricos.
profile_id STRING Identificador de perfil.
dq_result_id STRING Identificador de resultados de calidad de datos.
ruleset_evaluation_run_id STRING Identificador de ejecución de la evaluación.
started_on TIMESTAMP Cuándo comenzó la evaluación.
completed_on TIMESTAMP Cuándo se completó la evaluación.
stored_on TIMESTAMP La hora en que se escribió el registro en la tabla.
catalog_id STRING ID de catálogo de la tabla de origen.
database_name STRING Nombre de la base de datos de la tabla de origen.
table_name STRING Nombre de la tabla de origen.
region STRING Región de AWS.
account_id STRING ID de la cuenta de AWS.

Tabla de resultados a nivel de fila

En la siguiente tabla se describen las columnas de la tabla de resultados a nivel de fila. Puede usar esta tabla para identificar los registros específicos que no cumplieron con las reglas de calidad de datos.

Columna Tipo Descripción
Columnas de origen Varía Todas las columnas de los datos de origen originales.
data_quality_rules_pass MATRIZ<CADENA> Reglas aprobadas para este registro.
data_quality_rules_fail MATRIZ<CADENA> Reglas no aprobadas para este registro.
data_quality_rules_skip MATRIZ<CADENA> Reglas omitidas para este registro.
data_quality_evaluation_result STRING Resultado de la evaluación general de este registro: Passed o Failed.
dq_result_id STRING Identificador único del resultado de calidad de datos.
ruleset_evaluation_run_id STRING ID de la ejecución de la evaluación.
started_on TIMESTAMP Cuándo comenzó la evaluación.
completed_on TIMESTAMP Cuándo se completó la evaluación.
stored_on TIMESTAMP La hora en que se escribió el registro en la tabla.
catalog_id STRING ID de catálogo de la tabla de origen.
database_name STRING Nombre de la base de datos de la tabla de origen.
table_name STRING Nombre de la tabla de origen.
region STRING Región de AWS.
account_id STRING ID de la cuenta de AWS.

Tabla de resultados de observación

La tabla de resultados de observación almacena las predicciones de detección de anomalías para cada estadística en cada ejecución de evaluación. La tabla incluye todos los resultados de las predicciones: anomalías, valores normales y predicciones omitidas. Esto le permite renderizar gráficos de tendencias continuos con bandas de predicción.

Columna Tipo Descripción
statistic_id STRING Identificador de la estadística que se está supervisando.
statistic_name STRING Nombre de la estadística supervisada.
prediction_outcome STRING Resultado de la detección de anomalías: ANOMALY, NOT_ANOMALY o SKIPPED.
expected_value DOUBLE Valor esperado previsto. NULL cuando se omite la predicción.
lower_bound DOUBLE Límite inferior del intervalo previsto. NULL cuando se omite la predicción.
upper_bound DOUBLE Límite superior del intervalo previsto. NULL cuando se omite la predicción.
observation_message STRING Una descripción de la anomalía, si se detecta.
training_input STRING Si este punto de datos está incluido en el modelo de detección de anomalías: INCLUDED o EXCLUDED.
ruleset_evaluation_run_id STRING ID de la ejecución de la evaluación.
recorded_on TIMESTAMP La hora en que se registró la observación.
stored_on TIMESTAMP La hora en que se escribió el registro en la tabla.
actual_value DOUBLE Valor observado real de la estadística.
training_status STRING Estado del entrenamiento del modelo de detección de anomalías (por ejemplo, PENDING, COMPLETED).
recommended_rules STRING Reglas recomendadas basadas en la predicción de detección de anomalías.
modified_rules STRING Reglas modificadas con umbrales actualizados en función de las predicciones.
catalog_id STRING ID de catálogo de la tabla de origen.
database_name STRING Nombre de la base de datos de la tabla de origen.
table_name STRING Nombre de la tabla de origen.
nota

La tabla de resultados de la observación utiliza un modelo de escritura de solo anexión. Al excluir un punto de datos mediante la API BatchPutDataQualityStatisticAnnotation, se anexa una nueva fila con training_input establecido en EXCLUDED. Para consultar el estado más reciente de cada observación, use la marca de tiempo stored_on para identificar la fila más reciente de cada combinación de estadística y ejecución.

nota

Esta tabla también almacena las observaciones de desbordamiento de distribución, que se generan cuando más del 2 % de los valores se encuentran fuera de los límites de los intervalos fijos. Estas filas tienen statistic_name = 'Distribution' y prediction_outcome es NULL. El campo observation_message contiene la descripción del desbordamiento.

Consulta de los resultados con

Una vez finalizada la evaluación de la calidad de los datos, puede consultar las tablas de resultados directamente. En los siguientes ejemplos se muestran patrones de consulta frecuentes.

Ejemplo: búsqueda de reglas con errores para una ejecución específica

SELECT rule_name, rule_description, evaluation_message, evaluated_metrics FROM quality_results.rule_results WHERE ruleset_evaluation_run_id = 'dqr-12345678' AND rule_result = 'FAIL' ORDER BY rule_name;

Ejemplo: visualización de las estadísticas de creación de perfiles a lo largo del tiempo

SELECT stored_on, statistics_value FROM quality_results.profiles WHERE database_name = 'my_database' AND table_name = 'my_table' AND statistic_name = 'Mean' AND columns_referenced = ARRAY['salary'] ORDER BY stored_on;

Ejemplo: identificación de las filas que no cumplieron una regla específica

SELECT * FROM quality_results.row_level_results WHERE data_quality_evaluation_result = 'Failed' AND contains(data_quality_rules_fail, 'IsComplete "email"');

Ejemplo: visualización de un histograma numérico

SELECT bin_index, bin_lower_bound, bin_upper_bound, bin_count FROM quality_results.distributions WHERE column_name = 'salary' AND ruleset_evaluation_run_id = 'dqrun-abc123' ORDER BY bin_index;

Ejemplo: visualización de una distribución de valores categóricos

SELECT bin_label, bin_count FROM quality_results.distributions WHERE column_name = 'department' AND ruleset_evaluation_run_id = 'dqrun-abc123' ORDER BY bin_count DESC;

Ejemplo: seguimiento de la frecuencia de las categorías a lo largo del tiempo

SELECT started_on, bin_count FROM quality_results.distributions WHERE column_name = 'status' AND bin_label = 'active' ORDER BY started_on;

Ejemplo: visualización de las tendencias de detección de anomalías con bandas de predicción

SELECT o.recorded_on, p.statistics_value AS actual_value, o.expected_value, o.lower_bound, o.upper_bound, o.prediction_outcome FROM quality_results.profiles p JOIN quality_results.observation_results o ON p.statistic_id = o.statistic_id AND p.ruleset_evaluation_run_id = o.ruleset_evaluation_run_id WHERE p.database_name = 'my_database' AND p.table_name = 'my_table' AND p.statistic_name = 'RowCount' AND p.stored_on >= DATE '2025-03-01' ORDER BY p.stored_on;

Ejemplo: consulta del estado de observación más reciente después de las anotaciones

Como la tabla de resultados de la observación utiliza un modelo de solo anexión, las anotaciones de exclusión agregan nuevas filas. Utilice una consulta de deduplicación para obtener el estado más reciente de cada observación:

SELECT statistic_id, statistic_name, prediction_outcome, expected_value, lower_bound, upper_bound, training_input, stored_on FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY statistic_id, ruleset_evaluation_run_id ORDER BY stored_on DESC ) AS rn FROM quality_results.observation_results WHERE database_name = 'my_database' AND table_name = 'my_table' ) WHERE rn = 1 ORDER BY stored_on;

Consideraciones

Tenga en cuenta las siguientes consideraciones al escribir resultados de calidad de datos en las tablas del Catálogo de datos:

  • Calidad de datos de AWS Glue almacena los resultados en formato Apache Iceberg, que permite realizar consultas de viaje en el tiempo y reducir particiones de forma eficiente.

  • Una sola tabla de resultados puede almacenar los resultados de varias tablas de origen. Utilice las columnas de partición catalog_id, database_name y table_name para filtrar los resultados de un origen específico.

  • Calidad de datos de AWS Glue escribe los resultados de las observaciones de forma asíncrona una vez finalizada la ejecución de la evaluación. Es posible que haya un breve retraso antes de que las observaciones aparezcan en la tabla.

  • En el caso de las estadísticas de distribución de la tabla de resultados de distribución, cada intervalo o categoría se almacena como una fila independiente. Por ejemplo, un histograma con 20 intervalos genera 20 filas en la tabla para esa estadística.