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://. Si no se especifica, los resultados se almacenan en una ubicación predeterminada.amzn-s3-demo-bucket/prefix/ -
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_nameytable_namepara 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.