Skip to main content

Command Palette

Search for a command to run...

Análisis del precio de las criptomonedas en tiempo real con Microsoft Fabric – Parte 2: Transformación y preparación analítica de datos

Updated
7 min read
Análisis del precio de las criptomonedas en tiempo real con Microsoft Fabric – Parte 2: Transformación y preparación analítica de datos

🎯 Objetivo

En esta fase abordaremos la transformación, limpieza y preparación analítica de los datos obtenidos en la capa Bronze.
El propósito es construir las capas Silver y Gold dentro de nuestra arquitectura Medallion, garantizando datos consistentes, enriquecidos y optimizados para el análisis.

🥈 Capa Silver - Transformación y enriquecimiento de datos

La capa Silver representa el siguiente paso tras la ingestión de datos crudos en la base de datos KQL. Su objetivo es transformar, limpiar, enriquecer y estructurar los datos provenientes de la capa RAW para que estén listos para análisis más complejos o visualizaciones.

En esta etapa se aplican transformaciones como:

  • Conversión de formatos de fecha/hora.

  • Extracción de campos anidados (por ejemplo, desde JSON).

  • Tipado correcto de columnas (por ejemplo, price como real).

  • Enriquecimiento de datos con campos adicionales.

  • Eliminación de duplicados.

Además, gracias a las Update Policies, estas transformaciones se ejecutan de forma automática y en tiempo real, cada vez que nuevos datos se insertan en la tabla RAW.

🔁 Transformaciones en tiempo real con Update Policies

🧠 ¿Qué son las Update Policies?

Las Update Policies en KQL permiten definir reglas que se ejecutan automáticamente cuando una tabla origen recibe nuevos datos. Estas reglas aplican transformaciones predefinidas y almacenan los resultados en una tabla destino, facilitando la creación de capas como Silver o Gold.

Son especialmente útiles para:

  • Automatizar procesos de transformación.

  • Aplicar lógica de negocio sin depender de pipelines externos.

  • Mantener capas sincronizadas sin esfuerzo adicional.

📚 Documentación oficial

Diagram shows an overview of the update policy.


Para poder lanzar consultas kql, utilizaremos un nuevo artefacto llamado KQL Queryset. Este artefacto lo podemos crear en nuestra área de trabajo o utilizar el que viene por defecto cuando creamos el Eventhouse.

1. Crear la tabla destino (Crypto_Silver)

.create table Crypto_Silver (
    serverTime: datetime,
    symbol: string,
    price: real
) 
with (folder = "Silver")

2. Crear una función de transformación

Esta función convierte el serverTime desde milisegundos Unix a datetime, analiza el campo JSON tickerInfo y extrae el symbol y el price como columnas limpias.

.create-or-alter function LoadCryptoToSilver {
    Crypto_RAW
    | extend serverTime = unixtime_milliseconds_todatetime(serverTime), j = parse_json(tickerInfo)
    | extend symbol = tostring(j.symbol), price = toreal(j.price)
    | project serverTime, symbol, price
}

3. Crear y activar la Update Policy

Con esta política, cualquier nuevo dato que entre en Crypto_RAW activará automáticamente la función anterior y los resultados se escribirán en Crypto_Silver.

.alter table Crypto_Silver policy update 
```[
    {
        "IsEnabled": true,
        "Source": "Crypto_RAW",
        "Query": "LoadCryptoToSilver",
        "IsTransactional": true,
        "PropagateIngestionProperties": false
    }
]```

✅ Validación

Una vez configurado:

  • Puedes consultar la tabla Crypto_Silver para ver los datos limpios, convertidos y estructurados.

  • La transformación ocurre en tiempo real sin intervención manual.


🥇 Capa Gold - Agregación y preparación analítica

La capa Gold representa la última fase de nuestra arquitectura Medallion, enfocada en proveer datos listos para análisis, visualización y toma de decisiones.

En esta etapa, trabajamos sobre los datos transformados y enriquecidos de la capa Silver, y generamos entidades optimizadas para responder a necesidades analíticas específicas.

En nuestro proyecto, vamos a seguir un doble enfoque:

  1. Vista materializada → para obtener de forma optimizada el último valor de cada criptomoneda cuyo precio sea mayor a 0.

  2. Función y tabla silver → para consultar el histórico filtrado y así poder analizar la evolución de precios y tendencias.


¿Qué es una vista materializada?

Una vista materializada en Kusto (KQL) es una estructura optimizada que almacena físicamente los resultados de una consulta. A diferencia de una vista tradicional —que recalcula los datos en cada ejecución—, la vista materializada mantiene los resultados precalculados y actualizados automáticamente según los cambios en la tabla origen.

✅ Ventajas

  • Rendimiento optimizado en consultas frecuentes o complejas.

  • Datos precalculados listos para su uso en dashboards o KPIs.

  • Menor carga de procesamiento sobre las tablas base.

📚 Documentación oficial - Vista materializada


Vista materializada: Último valor por criptomoneda

Para optimizar el acceso a los precios más recientes, creamos una vista materializada llamada mvCryptoGoldLatest que devuelve el último registro disponible de cada criptomoneda con precio superior a 0.

.create-or-alter materialized-view with (backfill = true) mvCryptoGoldLatest on table Crypto_Silver
{
    Crypto_Silver
    | where price > 0
    | summarize arg_max(serverTime, *) by symbol
}
  • backfill=true: rellena la vista con los datos históricos existentes.

  • arg_max(serverTime, *): selecciona el registro con la fecha más reciente (serverTime) para cada símbolo (symbol).

🔹 Casos de uso:

  • Obtener la foto actual del mercado de criptomonedas.

  • Mostrar los últimos valores en tarjetas o KPIs dentro de dashboards.

  • Evitar valores nulos o sin precio.


Función: Histórico filtrado

Para análisis históricos y estudios de tendencias, creamos una vista normal llamada vwCrypto que devuelve todas las criptomonedas cuyo precio sea mayor a 0.

.create-or-alter function with(view=true) vwCrypto()
{
    Crypto_Silver
    | where price > 0
}

🔹 Casos de uso:

  • Analizar la evolución temporal del precio de una criptomoneda.

  • Calcular métricas de volatilidad, medias móviles o comparativas históricas.


📊 Consultando los datos en tiempo real

En la capa Gold, disponemos de tres formas principales de acceder a los datos:

  • Directamente desde la tabla Silver

  • Mediante vista materializada (mvCryptoGoldLatest)

  • A través de la función (vwCrypto)

🔍 Formas de consultar una vista materializada

En Kusto, existen dos maneras de consultar una vista materializada, dependiendo de tus necesidades de rendimiento o consistencia de datos:

Consultar toda la vista

Puedes consultar la vista materializada directamente por su nombre, como si fuera una tabla normal:

mvCryptoGoldLatest

Esta consulta combina automáticamente:

  • La parte materializada (ya precalculada y almacenada).

  • Los registros recientes de la tabla de origen que aún no han sido materializados (.delta).

✅ Ventajas:

  • Siempre devuelve los datos más actualizados, incluyendo los registros recién ingeridos.

⚠️ Consideraciones:

  • Puede tener menor rendimiento, ya que necesita materializar parte del delta en tiempo de consulta.

  • El rendimiento depende de la antigüedad de la vista y de los filtros aplicados.

Consultar solo la parte materializada

También puedes usar la función materialized_view() para consultar únicamente la parte ya materializada:

materialized_view('mvCryptoGoldLatest')

✅ Ventajas:

  • Ofrece el mejor rendimiento posible, al leer solo los datos ya materializados.

  • Ideal para dashboards en tiempo real o escenarios de telemetría, donde prima la rapidez.

⚠️ Consideraciones:

  • No garantiza que se incluyan los registros más recientes aún no materializados.

  • Puede haber una ligera latencia entre la ingesta de datos y su aparición en los resultados.

📚 Documentación oficial - Consultas sobre vistas materializadas


Vista normal para histórico

La vista vwCrypto() permite consultar todo el histórico de precios de criptomonedas con un valor mayor a 0. Es ideal para analizar la evolución temporal, tendencias o realizar cálculos estadísticos como variaciones porcentuales, medias móviles o volatilidad

vwCrypto

🔍 Formas de consultar una vista normal (función KQL)

A diferencia de las vistas materializadas, las vistas normales o funciones con view=true no almacenan físicamente los datos, sino que ejecutan la consulta en tiempo real cada vez que se utilizan.

Esto las hace muy útiles para escenarios donde se requiere flexibilidad y actualización continua, aunque con un pequeño coste en rendimiento frente a las materializadas.

Consultar directamente la vista

Puedes invocar la vista simplemente escribiendo su nombre o función, como cualquier tabla:

vwCrypto

o

vwCrypto()

✅ Ventajas:

  • Siempre devuelve los datos más recientes desde la tabla de origen.

  • Permite aplicar filtros, joins o agregaciones de forma dinámica.

  • Ideal para análisis exploratorios o consultas personalizadas en dashboards.

⚠️ Consideraciones:

  • Cada ejecución vuelve a procesar la lógica definida en la vista.

  • Puede tener un mayor coste computacional en vistas con transformaciones complejas.

Integrar la vista dentro de otras consultas KQL

Una práctica muy común es usar la vista vwCrypto() como fuente de datos dentro de consultas más complejas o cálculos derivados:

vwCrypto()
| where symbol == "BTCEUR"
| summarize avgPrice = avg(price) by bin(serverTime, 1h)

✅ Ventajas:

  • Permite encadenar transformaciones y análisis sobre los datos ya filtrados.

  • Simplifica la lectura del código al reutilizar lógica definida en una única vista.

⚠️ Consideraciones:

  • Al no estar materializada, cada ejecución recalcula los resultados.

  • En escenarios de alto volumen de datos o consultas frecuentes, puede ser preferible usar una vista materializada.

More from this blog

D

DataGym | Microsoft Fabric

36 posts