Combinación y optimización de datos

Completado

Las organizaciones suelen intercalar diferentes tipos de información de muchos orígenes. La información se almacena en un gran número de tablas. En ocasiones, es posible que tenga que combinar tablas basadas en relaciones lógicas entre ellas, para realizar análisis o informes más profundos. En el escenario de la empresa minorista, usa tablas para clientes, productos e información de ventas.

En este módulo, aprenderá distintas formas en que puede combinar datos en consultas de Kusto para proporcionar a los miembros de su equipo la información que necesita para aumentar el conocimiento del producto y las ventas.

Comprensión de los datos

Antes de empezar a escribir consultas que combinen información de las tablas, deberá comprender los datos. Al trabajar con consultas de Kusto, quiere pensar en las tablas que pertenecen ampliamente a una de estas dos categorías:

  • Tablas de hechos: tablas cuyos registros son hechos inmutables, como la tabla SalesFact en el escenario de la empresa minorista. En estas tablas, los registros se anexan progresivamente en forma de streaming o en fragmentos grandes. Los registros permanecen en la tabla hasta que se quitan y nunca se actualizan.
  • Tablas de dimensiones: tablas cuyos registros son dimensiones mutables, como las tablas Customers y Products en el escenario de la empresa minorista. Estas tablas contienen datos de referencia, como tablas de búsqueda de un identificador de entidad a sus propiedades. Las tablas de dimensiones no se actualizan regularmente con nuevos datos.

En el caso de nuestra empresa minorista, se usan tablas de dimensiones para enriquecer la tabla SalesFact con información adicional o para proporcionar más opciones para filtrar los datos de las consultas.

También querrá comprender los volúmenes de datos con los que está trabajando y su estructura, o esquema (nombres y tipos de columna). Puede ejecutar las siguientes consultas para obtener esa información reemplazando TABLE_NAME por el nombre de la tabla que está examinando:

  • Para obtener el número de registros de una tabla, use el operador count:

    TABLE_NAME
    | count
    
  • Para obtener el esquema de una tabla, use el operador getschema:

    TABLE_NAME
    | getschema
    

La ejecución de estas consultas en las tablas de hechos y dimensiones en el escenario de la empresa minorista le proporciona información como en el ejemplo siguiente:

Tabla Registros Schema
SalesFact 2 832 193 - SalesAmount (real)
- TotalCost (real)
- DateKey (datetime)
- ProductKey (longitud)
- CustomerKey (longitud)
Clientes 18 484 - CityName (cadena)
- CompanyName (cadena)
- ContinentName (cadena)
- CustomerKey (longitud)
- Education (cadena)
- FirstName (cadena)
- Gender (cadena)
- LastName (cadena)
- MaritalStatus (cadena)
- Occupation (cadena)
- RegionCountryName (cadena)
- StateProvinceName (cadena)
Productos 2517 - ProductName (cadena)
- Manufacturer (cadena)
- ColorName (cadena)
- ClassName (cadena)
- ProductCategoryName (cadena)
- ProductSubcategoryName (cadena)
- ProductKey (longitud)

En la tabla, resaltamos los identificadores únicos CustomerKey y ProductKey que se usan para combinar registros entre tablas.

Descripción de las consultas de varias tablas

Después de analizar los datos, debe comprender cómo combinar tablas para proporcionar la información que necesita. Las consultas de Kusto proporcionan varios operadores que puede usar para combinar datos de varias tablas, incluidos los operadores lookup, join y union.

El operador join combina las filas de dos tablas haciendo coincidir los valores de las columnas especificadas de cada tabla. La tabla resultante depende del tipo de combinación que use. Por ejemplo, si usa una combinación interna, la tabla tiene las mismas columnas que la tabla izquierda (a veces denominada tabla externa), además de las columnas de la tabla derecha (a veces denominada tabla interna). En la siguiente sección, aprenderá más sobre los tipos de combinación. Para obtener el mejor rendimiento, si una tabla siempre es menor que la otra, úsela como lado izquierdo del operador join.

El operador lookup es una implementación especial de un operador join que optimiza el rendimiento de las consultas en las que una tabla de hechos se enriquece con datos de una tabla de dimensión. Extiende la tabla de hechos con valores que se buscan en una tabla de dimensiones. Para obtener el mejor rendimiento, el sistema supone de forma predeterminada que la tabla izquierda es la tabla más grande (hecho) y la tabla derecha es la tabla más pequeña (dimensión). Esta suposición es exactamente lo contrario a la suposición utilizada por el operador join.

El operador union devuelve todas las filas de dos o más tablas. Resulta útil cuando desea combinar datos de varias tablas.

La función materialize() almacena en caché los resultados dentro de una ejecución de consulta para su reutilización posterior en la consulta. Es como tomar una instantánea de los resultados de una subconsulta y usarla varias veces dentro de la consulta. Esta función es útil para optimizar las consultas en escenarios en los que los resultados:

  • Son caros de procesar
  • Son no deterministas

En breve, obtendrá más información sobre los distintos operadores de combinación de tablas y la función materialize(), y cómo usarlos.

Tipos de combinación

Diagram showing query join kinds.

Hay muchos tipos de combinaciones diferentes que se pueden realizar que afectan al esquema y las filas de la tabla resultante. En la tabla siguiente se muestran los tipos de combinaciones admitidas por el Lenguaje de consulta Kusto y el esquema y las filas que devuelven:

Tipo de combinación Descripción Ilustración
innerunique (valor predeterminado) Combinación interna con desduplicación del lado izquierdo
Esquema: todas las columnas de ambas tablas, incluidas las claves coincidentes
Filas: todas las filas desduplicadas de la tabla izquierda que coinciden con las filas de la tabla derecha
inner Combinación interna estándar
Esquema: todas las columnas de ambas tablas, incluidas las claves coincidentes
Filas: solo las filas coincidentes de ambas tablas
leftouter Combinación externa izquierda
Esquema: todas las columnas de ambas tablas, incluidas las claves coincidentes
Filas: todos los registros de la tabla izquierda y solo las filas coincidentes de la tabla derecha
rightouter Combinación externa derecha
Esquema: todas las columnas de ambas tablas, incluidas las claves coincidentes
Filas: todos los registros de la tabla derecha y solo las filas coincidentes de la tabla izquierda
fullouter Combinación externa completa
Esquema: todas las columnas de ambas tablas, incluidas las claves coincidentes
Filas: todos los registros de ambas tablas con celdas no coincidentes rellenadas con null
leftsemi Semicombinación izquierda
Esquema: todas las columnas de la tabla izquierda
Filas: todos los registros de la tabla izquierda que coinciden con los registros de la tabla derecha
leftanti, anti, leftantisemi Left-Anti Join y variante Semi
Esquema: todas las columnas de la tabla izquierda
Filas: todos los registros de la tabla izquierda que no coinciden con los registros de la tabla derecha
rightsemi Semicombinación derecha
Esquema: todas las columnas de la tabla derecha
Filas: todos los registros de la tabla derecha que coinciden con los registros de la tabla izquierda
rightanti, rightantisemi Right-Anti Join y variante Semi
Esquema: todas las columnas de la tabla derecha
Filas: todos los registros de la tabla derecha que no coinciden con los registros de la tabla izquierda

Observe que el tipo de combinación predeterminado es innerunique y no es necesario especificarlo. Pero se recomienda especificar siempre explícitamente el tipo de combinación para mayor claridad.

A medida que avance en este módulo también obtendrá información sobre las funciones de agregación arg_min() y arg_max(), el operador as como alternativa a la instrucción let y la función startofmonth() para ayudar con la agrupación de datos por mes.