Enriquezca sus conjuntos de datos con contexto empresarial: migración de temas heredados a conjuntos de datos semánticos en Amazon Quick

Si ha estado administrando temas heredados de Amazon Quick junto con sus conjuntos de datos, conoce el desafío: dos activos que deben permanecer perfectamente sincronizados, cada uno con sus propios permisos, linaje y control de versiones. Deriva de sinónimos de columna. Los campos calculados divergen. Un cambio de nombre en el conjunto de datos interrumpe silenciosamente el tema heredado. Ahora puede utilizar Amazon Quick para integrar ese contexto empresarial directamente en el conjunto de datos mediante el enriquecimiento de conjunto de datos en la nueva experiencia de preparación de datos. Descripciones de columnas, sinónimos, campos calculados, instrucciones personalizadas y reglas comerciales conviven con los datos. El enriquecimiento del conjunto de datos integra el contexto empresarial directamente en el conjunto de datos. Todo (permisos, semántica, contexto de IA) viaja con los datos y es heredado automáticamente por cualquier cosa construida sobre ellos. Un activo, una fuente de verdad, un lugar para gobernar.

En esta publicación, analizamos qué es el enriquecimiento de conjuntos de datos, en qué se diferencia de los temas heredados y brindamos tres escenarios de migración con orientación paso a paso para que pueda trasladar su contexto empresarial a la capa del conjunto de datos con confianza.

El tema es ahora la capa semántica y de razonamiento de múltiples conjuntos de datos, la construcción donde se componen múltiples conjuntos de datos, se definen las relaciones, se crean métricas comerciales y se mapea la terminología comercial. En lugar de introducir una construcción completamente nueva, estamos reutilizando el tema para que cumpla esta función de manera más completa. Mover la semántica intrínseca del conjunto de datos a donde pertenece y elevar el tema para que sea dueño de las relaciones entre conjuntos de datos, las métricas y la terminología empresarial que siempre debió contener. Este no es un cambio cosmético. Establece una arquitectura limpia y con visión de futuro que admite flujos de trabajo de BI deterministas y análisis flexibles impulsados ​​por IA desde una base semántica compartida. También establece el marco para la integración del catálogo.

¿Qué son los temas (heredados)?

Legacy Topics proporcionó el enfoque inicial para agregar contexto empresarial a conjuntos de datos en Amazon Quick Sight. Almacenaba sinónimos de columnas, campos calculados, entidades nombradas, filtros e instrucciones personalizadas en un objeto separado que se ubicaba en la parte superior del conjunto de datos, vinculado pero administrado de forma independiente. En el futuro, clasificamos los temas existentes como heredados. La nueva versión de Temas se está elevando a una capa semántica de conjuntos de datos múltiples. Un punto de entrada único para preguntas y respuestas entre conjuntos de datos que permite a los usuarios empresariales y a los flujos de trabajo de IA realizar consultas en múltiples conjuntos de datos enriquecidos en una sola conversación. El enriquecimiento del conjunto de datos es la base que hace esto posible: cada conjunto de datos debe tener su propio contexto semántico antes de que los temas puedan unificarlos a un nivel superior.

Diferencias clave: temas (heredados) frente a enriquecimiento del conjunto de datos (preparación de nuevos datos)

Temas heredados Enriquecimiento del conjunto de datos Dónde residen los metadatos Objeto de tema heredado separado, vinculado a un conjunto de datos Dentro de los metadatos del propio conjunto de datos Sinónimos de columna Definidos en la columna Sinónimos en el tema heredado Definidos en Notas adicionales en la columna Reglas y filtros comerciales Filtros con nombre con condiciones estructuradas Reglas basadas en texto en instrucciones personalizadas Campos calculados Cálculos a nivel de tema heredado (expresiones con nombre) Columna calculada (transformación a nivel de fila) Entidades con nombre Objetos de entidad estructurados con sinónimos Entradas de texto en personalizado Instrucciones (pestaña SALIDA del conjunto de datos) Instrucciones personalizadas Cadena de instrucciones personalizadas en temas heredados Entradas de texto en Instrucciones personalizadas (pestaña SALIDA del conjunto de datos) Gobernanza Dos activos para autorizar y auditar Un activo para autorizar y auditar Tipos semánticos Propiedades del campo Propiedades de la columna Niveles de agregación Propiedades del campo Controles por parte del agente en tiempo de ejecución según la solicitud

Lo que permanece igual durante la migración

No todo cambia. Estos aspectos de su entorno Quick Sight permanecen sin cambios durante la migración:

Los conjuntos de datos de reglas no requieren migración. La lógica basada en reglas sigue funcionando como antes. El almacenamiento SPICE y el modo de consulta directa no se ven afectados. Sus patrones de acceso a datos siguen siendo los mismos independientemente de si utiliza Temas o Enriquecimiento de conjuntos de datos. Los paneles y análisis no se reconstruyen. Utilizan el conjunto de datos enriquecido. El modelo de interacción de preguntas y respuestas de cara al usuario no cambia. Los usuarios siguen haciendo preguntas en lenguaje natural a través del chat rápido de Amazon. La diferencia es invisible para ellos.

¿Por qué trasladar el contexto empresarial al conjunto de datos?

Cuando los metadatos empresariales se encuentran en un objeto de tema heredado independiente, se administran dos activos que deben permanecer sincronizados. Los permisos, el linaje y la capacidad de descubrimiento se dividen a través de fronteras. El enriquecimiento del conjunto de datos colapsa esto:

Fuente única de verdad. El contexto empresarial viaja con los datos. No hay ningún activo separado que pueda perder la sincronización. Herencia automática. Cualquier panel, análisis, tema heredado o función de chat impulsada por IA creada en el conjunto de datos enriquecido hereda el contexto semántico sin configuración adicional. Gobernanza más sencilla. Un activo para gestionar permisos, auditoría y control de versiones. Preparación para la IA. El conjunto de datos se vuelve autodescriptivo para consultas en lenguaje natural. La experiencia de chat de Amazon Quick puede resolver el lenguaje empresarial ambiguo directamente desde los metadatos del conjunto de datos sin necesidad de un tema independiente.

Qué ha cambiado en la definición del conjunto de datos como parte del enriquecimiento del conjunto de datos

La nueva experiencia de preparación de datos presenta semantic_model_configuration en conjuntos de datos. Tiene dos capas:

Metadatos a nivel de columna (dentro de TableMap):

Propósito de la propiedad Ejemplo Descripción Qué representa el campo "ID único para cada transacción de ventas" Notas adicionales Sinónimos y nombres alternativos que los usuarios podrían decir "ID de pedido, ID de venta, número de recibo"

Metadatos a nivel de conjunto de datos (dentro de SemanticMetadata):

Propiedad Propósito Ejemplo Descripción Resumen general de lo que contiene el conjunto de datos “Tabla de hechos de ventas que cubre transacciones, ingresos y márgenes” Instrucciones personalizadas Lógica empresarial, fórmulas, entidades nombradas y reglas “Ingresos = cantidad * precio_unitario * (1 – descuento_aplicado)”

Asignación de campos de temas heredados al enriquecimiento del conjunto de datos:

Campo de tema heredado Conjunto de datos Destino de modelo semántico Descripción de columna Propiedades de columna.Descripción.Texto Sinónimos de columna[]ColumnProperties.AdditionalNotes.Text (unido por comas) CalculatedFields.Expression DataPrepConfiguration → CreateColumnsStep NamedEntities.EntityName + EntityDescription + Definición CustomInstructions.InlineCustomInstruction.InstructionText (como “Nombre de entidad: definición (campos:…) (sinónimos:…)”) Filtros CustomInstructions.InlineCustomInstruction.InstructionText (como “Regla comercial – Nombre: Nombre de columna de salida EN [valores]”) CustomInstructionsString CustomInstructions.InlineCustomInstruction.InstructionText

Descripción general de la solución

La migración es un proceso de cuatro pasos. Usted identifica su conjunto de datos de destino, localiza el tema heredado de origen y ejecuta un script de Python que extrae los metadatos del tema heredado y los escribe en la configuración SemanticModel del conjunto de datos a través de la API Quick Sight. El script maneja descripciones de columnas, sinónimos, campos calculados, entidades con nombre, filtros e instrucciones personalizadas en una sola pasada. No se requiere trabajo manual en la interfaz de usuario.

Requisitos previos

Antes de comenzar, verifique que tenga lo siguiente en su lugar:

AWS Command Line Interface (AWS CLI) v2 (versión 2.34.50 o posterior) instalada y configurada con credenciales válidas. Ejecute aws sts get-caller-identity para confirmar que su sesión esté activa. Consulte la guía de instalación de AWS CLI para obtener instrucciones de configuración. Verifique con aws –version. Se requiere Python 3.6 o posterior para ejecutar el script de mapeo en el Paso 3. Verifique con python3 –version. Edición Amazon Quick Enterprise con Q habilitado. La migración se basa en las API Quick Sight que solo están disponibles en cuentas Enterprise con el complemento Q activo. Un conjunto de datos de destino que utiliza la nueva experiencia de preparación de datos. El conjunto de datos debe usar DataPrepConfiguration (no LogicalTableMap) y tener ID de columna en todas las InputColumns. Consulte Crear un conjunto de datos en la preparación de datos nuevos para obtener más detalles. Un tema heredado existente (fuente) con columnas, descripciones, sinónimos y, opcionalmente, campos, entidades y filtros calculados que desea migrar. Permisos de AWS Identity and Access Management (IAM) para la identidad de la persona que llama: Quicksight:DescribeDataSet, Quicksight:UpdateDataSet y Quicksight:DescribeTopic. Consulte Acciones de Quick Sight IAM para obtener la referencia completa de la política.

Escenarios de migración

El enfoque correcto depende de su configuración actual. Cubrimos tres escenarios, desde el más simple hasta el más complicado.

Diagrama de los tres escenarios de migración desde temas heredados hasta enriquecimiento de conjuntos de datos

Escenario 1: Conjuntos de datos heredados sin temas heredados

Su conjunto de datos se creó utilizando la experiencia clásica Quick Sight y no tiene capa semántica de ningún tipo. Los usuarios ven nombres de columnas sin formato (TXN_DT, CUST_ID, AMT_USD) en paneles, filtros e información sobre herramientas. Cuando alguien escribe una pregunta en lenguaje natural en el chat rápido de Amazon, el sistema no tiene contexto con el que trabajar: ni descripciones, ni sinónimos, ni reglas comerciales. Una pregunta como "¿cuáles son nuestros ingresos este trimestre?" no devuelve nada porque nada asigna la palabra "ingresos" a ninguna columna del esquema.

Los conjuntos de datos heredados (que utilizan LogicalTableMap en lugar de DataPrepConfiguration) no admiten el enriquecimiento de conjuntos de datos. Actualmente no existe una ruta de actualización implementada. No puede agregar SemanticModelConfiguration a un conjunto de datos heredado y no existe una API de migración que convierta uno en otro. Puede optar por consultar el conjunto de datos directamente con nombres de columnas sin formato utilizando la función Preguntas y respuestas del conjunto de datos.

Escenario 2: Temas heredados con conjuntos de datos heredados

Un tema se ubica sobre un conjunto de datos heredado y proporciona la capa semántica de la que dependen sus usuarios, sinónimos de columna, campos calculados, entidades con nombre, filtros con nombre e instrucciones personalizadas. Los usuarios consultan el tema y obtienen resultados. Pero en el fondo, el conjunto de datos en sí no tiene ningún enriquecimiento. Todavía usa LogicalTableMap y expone nombres de columnas sin formato sin descripciones ni contexto comercial propio.

Al igual que el escenario 1, el conjunto de datos heredado subyacente no admite SemanticModelConfiguration. No hay forma de insertar los metadatos de su tema heredado directamente en el conjunto de datos. El camino a seguir es crear un nuevo conjunto de datos utilizando la nueva experiencia de preparación de datos, migrar los metadatos de su tema heredado a él como enriquecimiento del conjunto de datos, validar los resultados y realizar la transición. Alternativamente, puede utilizar la función Preguntas y respuestas del conjunto de datos con el conjunto de datos heredado.

Escenario 3: Temas heredados con nuevos conjuntos de datos de preparación de datos

Estado actual: ya utiliza la nueva experiencia de preparación de datos para su conjunto de datos. Tiene DataPrepConfiguration con SourceTableMap, TransformStepMap y DestinationTableMap. Pero un tema heredado todavía está superpuesto y proporciona el contexto semántico en el que confían sus usuarios: sinónimos de columna, campos calculados, entidades con nombre, filtros e instrucciones personalizadas. La estructura del conjunto de datos admite el enriquecimiento de forma nativa. Aún no se ha aplicado. Este es el único escenario en el que es posible una migración directa in situ. Su conjunto de datos ya habla el lenguaje API correcto, por lo que no es necesario volver a crearlo.

Debido a que el conjunto de datos usa DataPrepConfiguration, puede pasar SemanticModelConfiguration directamente a la API de actualización del conjunto de datos. Esto significa que también puedes:

Migre descripciones de columnas y sinónimos de su tema heredado a ColumnProperties.Description y ColumnProperties.AdditionalNotes en el conjunto de datos. Cada columna que tenía una matriz ColumnDescription o ColumnSynonyms en el tema heredado obtiene una entrada equivalente en la capa semántica del conjunto de datos. Migre campos calculados desde expresiones heredadas de nivel de tema a entradas CreateColumnsStep en DataPrepConfiguration. Estas se convierten en columnas calculadas de primera clase en el conjunto de datos, visibles en los paneles y disponibles para consultas en lenguaje natural sin un tema heredado. Migre entidades con nombre, filtros e instrucciones personalizadas a CustomInstructions.InlineCustomInstruction.InstructionText. Las definiciones de entidades, las reglas comerciales y la documentación de fórmulas se conservan como texto estructurado que el sistema de chat lee en el momento de la consulta. Mantenga activo el tema heredado durante la migración. Tanto el tema heredado como el enriquecimiento del conjunto de datos pueden coexistir temporalmente. Usted valida el comportamiento de preguntas y respuestas del conjunto de datos enriquecido con el del tema heredado y solo elimina el tema heredado cuando esté listo. Ejecute la migración de temas heredada con un script. Debido a que tanto describe-topic como update-data-set son llamadas API, la transformación se puede automatizar de un extremo a otro. Extraiga metadatos de temas heredados, transfórmelos, aplíquelos al conjunto de datos y verifíquelos. No se requiere trabajo manual en la interfaz de usuario.

El siguiente paso automatiza el enriquecimiento de un conjunto de datos de Amazon Quick Sight con metadatos semánticos extraídos de un tema heredado de Quick Sight. Transfiere contexto empresarial, descripciones de columnas, sinónimos, campos calculados, entidades con nombre, filtros e instrucciones personalizadas de un tema heredado directamente a la configuración del modelo semántico del conjunto de datos.

Resumen de pasos

Necesita cuatro datos antes de ejecutar el script. Obtenga el ID del conjunto de datos y el ID del tema (heredado) de las URL de la consola rápida (que se muestran en los pasos 1 y 2) y confirme el ID de su cuenta de AWS y la región de AWS.

Paso Acción Entrada 1 Obtener ID del conjunto de datos de destino ID del conjunto de datos 2 Obtener ID del tema ID del tema 3 Región de AWS 4 Ejecutar el script de Python Enrich Dataset Tanto los ID como la región

Parámetros requeridos

ACCOUNT_ID = <<0358134xxxxx>> REGIÓN = <> DATASET_ID = <<30c1e26a-e02a-4f2a-ac48-xxa1xxxxx916>> TOPIC_ID = <>

Paso 1: obtener el ID del conjunto de datos de destino

Abra la consola Quick Sight. En el panel de navegación izquierdo, seleccione Datos y luego cambie a la pestaña Conjuntos de datos. Seleccione el conjunto de datos que desea enriquecer. El ID del conjunto de datos es el UUID al final de la URL de su navegador.

Ejemplo:

URL del conjunto de datos de la consola Amazon Quick con el ID del conjunto de datos al final

Paso 2: Obtenga el ID del tema heredado de origen

Abra la consola Quick Sight. En el panel de navegación izquierdo, seleccione Datos y luego cambie a la pestaña Temas. Seleccione el tema heredado de origen desde el que desea migrar. El ID del tema es la cadena al final de la URL de su navegador.

Ejemplo:

URL de temas de la consola rápida de Amazon con el ID del tema heredado al final

Paso 3: código Python para enriquecer un conjunto de datos con información de un tema heredado

El siguiente script se conecta a las API de Quick Sight, recupera los metadatos de tema heredados existentes y el esquema del conjunto de datos de destino y luego asigna de manera inteligente cada parte del contexto empresarial a su nuevo hogar en la configuración del modelo semántico del conjunto de datos. Las descripciones de las columnas y los sinónimos se convierten en ColumnProperties, los campos calculados se inyectan como entradas CreateColumnsStep en su canal de preparación de datos y las entidades con nombre, los filtros y las instrucciones personalizadas se consolidan en un bloque de texto estructurado CustomInstructions. Una vez completada la asignación, aplica la carga útil enriquecida directamente a su conjunto de datos a través de una llamada API firmada por SigV4. Su conjunto de datos se vuelve completamente autodescriptivo en una sola ejecución, sin trabajo manual de interfaz de usuario y sin riesgo de errores de transcripción.

Guarde el siguiente script como enrich_dataset.py.

""" enrich_dataset_local.py — Enriquece un conjunto de datos Quick Sight con metadatos de temas heredados. Uso: python enrich_dataset_local.py NOTA: utiliza una llamada API SigV4 sin procesar para omitir la validación de botocore (requiere botocore >= 1.43.11). """ import json import sys import boto3 import botocore.session from botocore.auth import SigV4Auth from botocore.awsrequest import AWSRequest import urllib3 http = urllib3.PoolManager() def raw_update_data_set(aws_account_id, dataset_id, payload, region): """Llame a UpdateDataSet a través de una solicitud SigV4 sin procesar, sin pasar por la validación de botocore.""" sesión = botocore.session.get_session() credenciales = session.get_credentials().get_frozen_credentials() url = f"https://quicksight.{region}.amazonaws.com/accounts/{aws_account_id}/data-sets/{dataset_id}" body = json.dumps(payload) headers = {"Content-Type": "application/json"} request = AWSRequest(method="PUT", url=url, datos=cuerpo, encabezados=encabezados) SigV4Auth(credenciales, "quicksight", región).add_auth(solicitud) respuesta = http.request("PUT", request.url, encabezados=dict(request.headers), cuerpo=request.body) respuesta_cuerpo = json.loads(response.data.decode("utf-8")) si respuesta.status >= 400: aumentar Excepción (f"UpdateDataSet falló ({response.status}): {json.dumps(response_body, indent=2)}") devuelve respuesta_body def enrich_dataset(topic_id, dataset_id, aws_account_id, aws_region): qs = boto3.client("quicksight", nombre_región=aws_region) print(f"n{'='*60}") print(f" Enriquecimiento del conjunto de datos") print(f"{'='*60}") print(f" ID del tema: {topic_id}") print(f" ID del conjunto de datos: {dataset_id}") print(f" Cuenta: {aws_account_id}") print(f" Región: {aws_region}") print(f"{'='*60}n") # — Obtener entradas de las API Quick Sight — print("[1/5] Obteniendo esquema de conjunto de datos…") ds_response = qs.describe_data_set(AwsAccountId=aws_account_id, DataSetId=dataset_id) ds = ds_response["DataSet"] print(f" Conjunto de datos: {ds['Name']}") print(f" ARN: {ds['Arn']}") print("[2/5] Obteniendo metadatos del tema…") topic_response = qs.describe_topic(AwsAccountId=aws_account_id, TopicId=topic_id) topic_raw = topic_response print(f" Tema: {topic_raw['Topic'].get('Name', topic_id)}") print(f" Conjuntos de datos en el tema: {len(topic_raw['Topic']['DataSets'])}") # — Coincide con el conjunto de datos del tema por ARN — target_arn = ds["Arn"] topic_datasets = topic_raw["Topic"]["DataSets"] topic = Ninguno para td en topic_datasets: if td.get("DatasetArn") == target_arn: topic = td break si el tema es Ninguno: print(f" ADVERTENCIA: No El conjunto de datos del tema coincidió con el ARN {target_arn}. Volviendo al índice 0.") topic = topic_datasets.[0]else: print(f" Conjunto de datos de tema coincidente por ARN ✓") custom_instructions_str = topic_raw.get("CustomInstructions", {}).get("CustomInstructionsString", "") # — Extraer estructura del conjunto de datos — Physical_table_map = ds["PhysicalTableMap"] import_mode = ds.get("ImportMode", "SPICE") uses_new_experience = "DataPrepConfiguration" en ds print(f" Experiencia: {'NUEVO (DataPrepConfiguration)' si usa_nueva_experiencia más 'VIEJO (LogicalTableMap)'}") si usa_nueva_experiencia: data_prep = ds["DataPrepConfiguration"] más: logic_table_map = ds["LogicalTableMap"] ptable_key = list(physical_table_map.keys())[0]# Detectar automáticamente el tipo de fuente source_entry = Physical_table_map[ptable_key] si "RelationalTable" en source_entry: input_columns = source_entry["RelationalTable"]["InputColumns"] source_type = "RelationalTable" elif "S3Source" en source_entry: input_columns = source_entry["S3Source"]["InputColumns"] source_type = "S3Source" elif "CustomSql" en source_entry: input_columns = source_entry["CustomSql"]["Columns"] source_type = "CustomSql" else: rise ValueError(f"Tipo de tabla física desconocida: {list(source_entry.keys())}") print(f" Tipo de fuente: {source_type}") print(f" Columnas de entrada: {len(input_columns)}") col_id_map = {col["Name"]: col.get("Id", col["Name"]) for col in input_columns} # — 1. Descripciones y sinónimos de las columnas del mapa — print("n[3/5] Enriquecimiento de edificios…") column_metadata =[]para tc en tema["Columnas"]: col_id = col_id_map.get(tc["ColumnName"]) si no es col_id: continúe column_metadata.append({ "ColumnNames": [tc["ColumnName"]], "ColumnProperties": [{ "Descripción": {"Text": tc.get("ColumnDescription", "")}, "AdditionalNotes": {"Text": ("El sinónimo de la columna es " + ", ".join(tc.get("ColumnSynonyms",[]))) if tc.get("ColumnSynonyms") else ""} }] }) # — 2. Agregar campos calculados — if uses_new_experience: dest_key = list(data_prep["DestinationTableMap"].keys())[0]last_step = data_prep["DestinationTableMap"][dest_key]["Source"]["TransformOperationId"] para step_id, paso en data_prep["TransformStepMap"].items(): si "CastColumnTypesStep" en el paso: para operación en el paso["CastColumnTypesStep"].get("CastColumnTypeOperations",[]): op.pop("SubType", Ninguno) para i, calc en enumerate(topic.get("CalculatedFields",[])): col_name = calc["CalculatedFieldName"].upper().replace(" ", "_") col_id = f"col-{col_name.lower().replace('_', '-')}" step_id = f"topic-calc-step-{i}" data_prep["TransformStepMap"][step_id] = { "CreateColumnsStep": { "Alias": f"Agregar {calc['CalculatedFieldName']}", "Columnas": [{"ColumnName": col_name, "ColumnId": col_id, "Expression": calc["Expression"]}], "Fuente": {"TransformOperationId": last_step} } } last_step = step_id column_metadata.append({ "ColumnNames": [col_name], "ColumnProperties": [{ "Description": {"Text": calc.get("CalculatedFieldDescription", "")}, "AdditionalNotes": {"Text": ("El sinónimo de la columna es " + ", ".join(calc.get("CalculatedFieldSynonyms",[]))) if calc.get("CalculatedFieldSynonyms") else ""} }] }) data_prep["DestinationTableMap"][dest_key]["Source"]["TransformOperationId"] = último_paso else: lt_key = list(logic_table_map.keys())[0]lt = logic_table_map[lt_key] si "DataTransforms" en lt: para transformar en lt["DataTransforms"]: si "CastColumnTypeOperation" en transformar: transformar["CastColumnTypeOperation"].pop("SubType", Ninguno) para i, calcular en enumerate(topic.get("CalculatedFields",[])): col_name = calc["CalculatedFieldName"].upper().replace(" ", "_") col_id = f"col-{col_name.lower().replace('_', '-')}" create_op = {"CreateColumnsOperation": {"Columns": [{"ColumnName": col_name, "ColumnId": col_id, "Expresión": calc["Expresión"]}]}} insert_idx = len(lt.get("DataTransforms",[])) para idx, t en enumerate(lt.get("DataTransforms",[])): si "ProjectOperation" en t: insert_idx = idx break lt.setdefault("DataTransforms",[]).insert(insert_idx, create_op) para t en lt.get("DataTransforms",[]): si "ProjectOperation" en t: t["ProjectOperation"]["ProjectedColumns"].append(col_name) break column_metadata.append({ "ColumnNames": [col_name], "ColumnProperties": [{ "Description": {"Text": calc.get("CalculatedFieldDescription", "")}, "AdditionalNotes": {"Text": ("El sinónimo de la columna es " + ", ".join(calc.get("CalculatedFieldSynonyms",[]))) if calc.get("CalculatedFieldSynonyms") else ""} }] }) # — 3. Crear texto de instrucciones personalizadas — líneas =[]si custom_instructions_str: líneas.append(custom_instructions_str) para la entidad en topic.get("NamedEntities",[]): sinónimos = ", ".join(entidad.get("EntitySynonyms",[])) campos = ", ".join(d.get("Nombre de campo", "") para d en entidad.get("Definición",[])) entrada = f"Entidad {entidad['EntityName']}: {entity.get('EntityDescription', '')}" if campos: entrada += f" (campos: {campos})" if sinónimos: entrada += f" (sinónimos: {sinónimos})"lines.append(entry) for f in topic.get("Filtros",[]): fname = f.get("FilterName", "Unnamed") field = f.get("OperandFieldName", "") ftype = f.get("FilterType", "") if ftype == "CATEGORY_FILTER": cf = f.get("CategoryFilter", {}) func = cf.get("CategoryFilterFunction", "") valores = cf.get("Constant", {}).get("CollectiveConstant", {}).get("ValueList",[]) inverse = cf.get("Inverse", False) op = "NO EN" si es inverso sino "EN" líneas.append(f"Regla comercial – {fname}: Filtrar donde {campo} {func} {op} [{', '.join(values)}].") elif ftype == "NUMERIC_RANGE_FILTER": nrf = f.get("NumericRangeFilter", {}) agg = nrf.get("Aggregation", "") inclusive = nrf.get("Inclusive", False) mínimo = nrf.get("Constant", {}).get("RangeConstant", {}).get("Minimum", "") máximo = nrf.get("Constant", {}).get("RangeConstant", {}).get("Maximum", "") si es mínimo: op2 = ">=" si es inclusivo else ">"lines.append(f"Regla comercial – {fname}: Filtrar donde {agg}({campo}) {op2} {mínimo}.") elif máximo: op2 = "<=" if inclusive else "<"lines.append(f"Regla comercial – {fname}: Filtrar donde {agg}({campo}) {op2} {máximo}.") texto_instrucción = "n".join(lines) # — 4. Ensamblar SemanticModelConfiguration — topic_desc = topic_raw["Tema"].get("Descripción", "") si usa_nueva_experiencia: dest_key = list(data_prep["DestinationTableMap"].keys())[0]else: dest_key = lt_key semantic_model_config = { "TableMap": { "semantic-table": { "Alias": "Semantic Table", "DestinationTableId": dest_key, "SemanticMetadata": {"ColumnMetadata": column_metadata} } }, } if topic_desc o instrucción_text: semantic_entry = {} if topic_desc: semantic_entry["Descripción"] = {"Texto": topic_desc} if instrucción_texto: semantic_entry["CustomInstructions"] = [{"InlineCustomInstruction": {"InstrucciónText": instrucción_texto}}] semantic_model_config["Sema

3.3 Resultados esperados

Una vez que se complete el script, confirme que el enriquecimiento se aplicó correctamente inspeccionando el conjunto de datos a través de la API Quick Sight o en la consola Quick Sight:

Metadatos semánticos del conjunto de datos enriquecidos que se muestran en la consola después de ejecutar el script.

3.4 Verificar el archivo de salida

# Verifique que existan las tres secciones: python -c "import json; d=json.load(open('enriched-payload.json')); print(list(d.keys()))" # Esperado: ['physical_table_map', 'data_prep_configuration', 'semantic_model_configuration']

Physical_table_map: sin cambios con respecto al conjunto de datos de origen. data_prep_configuration: con un CreateColumnsStep agregado para los campos calculados. semantic_model_configuration: con descripciones de columnas, sinónimos e instrucciones personalizadas (fórmulas, entidades y reglas de negocio).

Mejores prácticas de validación

En todos los escenarios, recomendamos el siguiente enfoque de validación:

Cree un conjunto de preguntas de validación. Antes de la migración, documente entre 10 y 20 preguntas en lenguaje natural que funcionen correctamente con su tema heredado actual. Estos se convierten en su conjunto de pruebas de regresión. Realice comparaciones en paralelo. Haga las mismas preguntas sobre el tema heredado (antes de eliminarlo) y sobre el conjunto de datos enriquecido. Los resultados deben coincidir. Pruebe casos extremos. Pruebe preguntas ambiguas, variaciones de sinónimos y consultas de varios pasos. El conjunto de datos enriquecido debería manejarlos tan eficazmente (o mejor que) que lo hizo el tema heredado. Validar con usuarios reales. Haga que entre 2 y 3 usuarios empresariales prueben la experiencia de chat del conjunto de datos enriquecido antes de retirar el tema heredado. Su redacción natural puede revelar lagunas en su sinónimo o cobertura de entidad. Documente las diferencias de comportamiento. Algunos comportamientos diferirán entre las consultas heredadas basadas en temas y las consultas de enriquecimiento de conjuntos de datos: los filtros de temas heredados están predefinidos y se pueden seleccionar; Las reglas comerciales en instrucciones personalizadas requieren que el usuario haga referencia a ellas por su nombre o intención. Los campos calculados de Tema heredado admiten expresiones a nivel de agregación; Los campos calculados del conjunto de datos funcionan fila por fila (las agregaciones ocurren en el momento de la consulta). Las entidades nombradas en temas heredados tienen metadatos estructurados; en el enriquecimiento de conjuntos de datos, son instrucciones basadas en texto.

Consideraciones clave

La API de actualización del conjunto de datos requiere un reemplazo completo de toda la configuración en cada llamada. No se admiten actualizaciones incrementales de columnas individuales. Las entidades y filtros con nombre no tienen campos API dedicados en SemanticModelConfiguration. Deben expresarse como texto dentro de CustomInstructions. No todas las expresiones de cálculo de temas heredadas se traducen directamente en expresiones a nivel de conjunto de datos. Es posible que sea necesario reestructurar los cálculos basados ​​en agregaciones. Actualmente, no es posible actualizar conjuntos de datos heredados localmente. Debe crear un nuevo conjunto de datos con la nueva experiencia de preparación de datos para enriquecerlo.

Limpiar

Para evitar incurrir en cargos continuos, elimine los recursos de AWS (roles de IAM, fuentes de datos de Quick Sight, políticas) que creó como parte de la experimentación. Para obtener instrucciones, consulte la documentación de Amazon Quick.

Conclusión

El enriquecimiento de conjuntos de datos en Amazon Quick traslada los metadatos de inteligencia empresarial de una capa de temas heredada independiente al propio conjunto de datos. Un activo tiene su propio significado comercial: descripciones de columnas, sinónimos, lógica de cálculo, definiciones de entidades y reglas comerciales, todo gobernado en un solo lugar.

Para comenzar, identifique su conjunto de datos de mayor valor, aplique enriquecimiento utilizando los patrones de esta publicación y pruébelo en el chat rápido de Amazon. Para obtener la referencia completa de la API SemanticModelConfiguration, consulte la documentación de Amazon Quick. Para preguntas y debates comunitarios, visite Amazon Quick Community.

Sobre los autores

Ramón López

Ramón López

Ramon es arquitecto principal de soluciones de Amazon Quick. Con muchos años de experiencia en la creación de soluciones de BI y experiencia en contabilidad, le encanta trabajar con clientes, crear soluciones y ofrecer servicios de clase mundial. Cuando no está trabajando, prefiere estar al aire libre en el océano o en la montaña.

Ashok Dasineni

Ashok Dasineni

Ashok es arquitecto de soluciones para Amazon Quick Suite. Antes de unirse a AWS, Ashok trabajó con clientes y organizaciones del ámbito bancario y financiero, centrándose en la investigación y prevención del fraude. Diseñó e implementó soluciones innovadoras para mejorar los procesos comerciales, reducir costos y aumentar los ingresos, ayudando a empresas de todo el mundo a alcanzar su máximo potencial a través de los datos.

Neeraj Kumar

Neeraj Kumar

Neeraj es arquitecto sénior de soluciones mundiales en AWS y diseña soluciones a escala empresarial que transforman la forma en que las organizaciones utilizan los datos. Con más de dos décadas en datos y análisis en los sectores automotriz, manufacturero y de telecomunicaciones, guía a los clientes globales para obtener conocimientos más profundos utilizando Amazon Quick y análisis impulsados ​​por IA, ayudándolos a modernizar su panorama unificado de IA/BI y acelerar sus iniciativas basadas en datos.

Salim Khan

Salim Khan

Salim es arquitecto senior de soluciones de IA generativa a nivel mundial para Amazon Quick en AWS. Tiene más de 16 años de experiencia implementando soluciones de inteligencia empresarial empresarial. En AWS, Salim trabaja con clientes de todo el mundo para diseñar e implementar capacidades de BI impulsadas por IA y de IA generativa en Amazon Quick. Antes de AWS, trabajó como consultor de BI en sectores verticales como el de automoción, atención sanitaria, entretenimiento, consumo, publicaciones y servicios financieros, ofreciendo soluciones de inteligencia empresarial, almacenamiento de datos, integración de datos y gestión de datos maestros.

Vignessh Baskaran

Vignessh es gerente técnico de productos sénior en Amazon Quick, donde posee productos de datos basados ​​en inteligencia artificial para conectividad, catálogos y semántica, y preparación de datos. Tiene más de una década de experiencia en el desarrollo de soluciones de análisis y datos a gran escala. Fuera del trabajo, le gusta ver Cricket, jugar Racquetball y explorar diferentes cocinas en Seattle.