Ingeniería de datos moderna

La Ingeniería de Datos en la Era Moderna

Herramientas específicas de la plataforma y técnicas avanzadas

Foto de Christopher Burns en Unsplash

El ecosistema moderno de datos sigue evolucionando y aparecen nuevas herramientas de datos de vez en cuando. En este artículo, quiero hablar sobre cosas cruciales que afectan a los ingenieros de datos. Discutiremos cómo utilizar este conocimiento para alimentar tuberías de análisis avanzado y excelencia operativa.

  • Ingeniería de datos moderna (DE). ¿Qué es?
  • ¿Tu DE funciona lo suficientemente bien como para impulsar tuberías de datos avanzadas e inteligencia empresarial (BI)?
  • ¿Tus tuberías de datos son eficientes?
  • ¿Qué se requiere desde el punto de vista tecnológico para habilitar la excelencia operativa?

En octubre, escribí sobre la aparición del ingeniero de datos, el papel, sus desafíos, responsabilidades, rutina diaria y cómo tener éxito en este campo. El panorama de la ingeniería de datos está en constante cambio, pero las principales tendencias parecen seguir siendo las mismas.

Cómo convertirse en un ingeniero de datos

Un atajo para principiantes en 2024

towardsdatascience.com

Como ingeniero de datos, se me encarga diseñar procesos de datos eficientes casi todos los días. Así que aquí hay algunas cosas a considerar que pueden ayudarnos a responder estas preguntas.

  • ETL vs ELT
  • Conectores de datos simplificados e integraciones de API
  • Explosión de los marcos ETL
  • Infraestructura de datos como código
  • Malla de datos y gestión de datos descentralizada
  • Democratización de las tuberías de inteligencia empresarial utilizando IA
  • Enfoque en la alfabetización de datos

ELT vs ETL

Herramientas populares de transformación de datos SQL como Dataform y DBT han contribuido significativamente a la popularización del enfoque ELT [1]. Tiene sentido realizar las transformaciones de datos necesarias, como limpieza, enriquecimiento y extracción, en el lugar donde se almacenan los datos. A menudo, es una solución de almacén de datos (DWH) en la parte central de nuestra infraestructura. Los líderes de plataformas en la nube han simplificado realmente la gestión de la infraestructura de DWH (Snowflake, BigQuery, Redshift, Firebolt) y en muchos escenarios superarán a un equipo de gestión de infraestructura dedicado en términos de costo-efectividad y velocidad.

Ejemplo de almacén de datos. Imagen de autor.

También podría ser un lago de datos en el centro y depende del tipo de plataforma de datos y herramientas que utilicemos. En este caso, SQL deja de ser una opción en muchos casos, lo que dificulta la consulta de datos para aquellos usuarios que no están familiarizados con la programación. Herramientas como Databricks, Tabular y Galaxy intentan resolver este problema y realmente se siente como el futuro. De hecho, los lagos de datos pueden almacenar todo tipo de datos, incluidos los no estructurados, y aún así necesitamos poder analizar estos conjuntos de datos.

Ejemplo de lago de datos. Imagen de autor.

Imagina tablas de lago de datos consistentemente transaccionales con aislamiento de instantánea en el tiempo.

Previamente escribí sobre esto en una de mis historias sobre el formato de tabla Apache Iceberg [2].

Introducción a las tablas Apache Iceberg

Algunas Razones Compelentes para Elegir Apache Iceberg para Data Lakes

towardsdatascience.com

Integraciones de datos simplificadas

Las soluciones administradas como Fivetran y Stitch fueron construidas para manejar fácilmente integraciones de API de terceros. En estos días, muchas empresas eligen este enfoque para simplificar las interacciones de datos con sus fuentes de datos externas. Esta sería la forma correcta de proceder para los equipos de análisis de datos que no están familiarizados con la codificación.

De hecho, ¿por qué construir un conector de datos desde cero si ya existe y está siendo administrado en la nube?

La desventaja de este enfoque es su modelo de precios, sin embargo.

Muy a menudo es basado en filas y puede volverse bastante caro a nivel empresarial de ingestión de datos, es decir, pipelines de big data. Aquí es donde entran en juego las alternativas de código abierto. Frameworks como Airbyte y Meltano pueden ser una solución rápida y sencilla para implementar un microservicio de integración de origin de datos.

Si no tienes tiempo para aprender un nuevo marco de ETL, puedes crear un conector de datos simple tú mismo. Si tienes conocimientos básicos de Python, sería una tarea trivial. En uno de mis artículos anteriores expliqué lo fácil que es crear un microservicio que obtiene datos de la API de la NASA [3]:

Python para Ingenieros de Datos

Técnicas Avanzadas de ETL para Principiantes

towardsdatascience.com

Considera este fragmento de código para app.py

import requestssession = requests.Session()url="https://api.nasa.gov/neo/rest/v1/feed"apiKey="tu_clave_de_api"requestParams = {    'api_key': apiKey,    'start_date': '2023-04-20',    'end_date': '2023-04-21'}response = session.get(url, params = requestParams, stream=True)print(response.status_code)

Puede ser implementado en cualquier plataforma de proveedores de nube y programarse para ejecutarse con la frecuencia requerida. Siempre es una buena práctica usar algo como Terraform para implementar nuestras aplicaciones de canalización de datos.

Explosión de frameworks de ETL

Podemos presenciar una “explosión cámbrica” de varios frameworks de ETL para extracción y transformación de datos. No es sorprendente que muchos de ellos sean de código abierto y basados en Python.

Luigi [8] es uno de ellos y ayuda a crear pipelines de ETL. Fue creado por Spotify para manejar cargas de trabajo masivas de procesamiento de datos. Tiene una interfaz de línea de comandos y excelentes funciones de visualización. Sin embargo, incluso los pipelines de ETL básicos requerirían un cierto nivel de habilidades de programación en Python. Desde mi experiencia, puedo decir que es genial para pipelines estrictos y directos. Encuentro particularmente difícil implementar lógica de ramificación compleja utilizando Luigi, pero funciona muy bien en muchos escenarios.

Python ETL (PETL) [9] es uno de los frameworks de ETL de código abierto más utilizados para transformaciones de datos directas. Es invaluable trabajar con tablas, extraer datos de fuentes de datos externas y realizar ETL básico en datos. En muchos aspectos, es similar a Pandas, pero este último tiene más capacidades de análisis bajo el capó. PETL es genial para agregación y ETL a nivel de fila.

Bonobo [10] es otra herramienta de procesamiento de datos de código abierto y ligera, perfecta para desarrollo rápido, automatización y ejecución paralela de pipelines de procesamiento de datos por lotes. Lo que me gusta de él es que facilita mucho trabajar con varios formatos de archivo de datos, es decir, SQL, XML, XLS, CSV y JSON. Será una gran herramienta para aquellos con conocimientos mínimos de Python. Entre otros beneficios, me gusta que funcione bien con esquemas de datos semi-complejos. Es ideal para ETL simple y puede ejecutarse en contenedores Docker (tiene una extensión Docker).

Pandas es una auténtica bestia en el mundo de los datos y no es necesario cubrir sus capacidades en esta historia. Vale la pena mencionar que sus transformaciones de marcos de datos se han incluido en uno de los métodos básicos de carga de datos para muchos almacenes de datos modernos. Considera este ejemplo de carga de datos en la solución de almacén de datos BigQuery:

from google.cloud import bigquery
from google.oauth2 import service_account

# Autenticar cliente de BigQuery
servicio_cuenta_str = config.get('BigQuery') # Usar config
credenciales = service_account.Credentials.from_service_account_info(servicio_cuenta_str)
cliente = bigquery.Client(credentials=credenciales, project=credenciales.project_id)

def cargar_tabla_desde_dataframe(esquema_tabla, nombre_tabla, id_conjunto_datos):
    # El formato del archivo fuente de datos debe ser un JSON de array externo:
    """
    [
        {"id":"1"},
        {"id":"2"}
    ]
    """
    blob = """
        [
            {"id":"1","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]},
            {"id":"2","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]}
        ]
    """
    cuerpo = json.loads(blob)
    print(pandas.__version__)
    id_tabla = cliente.dataset(id_conjunto_datos).table(nombre_tabla)
    configuracion_tarea = bigquery.LoadJobConfig()
    esquema = crear_esquema_desde_yaml(esquema_tabla)
    configuracion_tarea.schema = esquema
    df = pandas.DataFrame(
        cuerpo,
        # En la tabla cargada, el orden de las columnas refleja el orden de las
        # columnas en el DataFrame.
        columns=["id", "first_name", "last_name", "dob", "addresses"],
    )
    df['addresses'] = df.addresses.astype(str)
    df = df[['id', 'first_name', 'last_name', 'dob', 'addresses']]
    print(df)
    tarea_carga = cliente.load_table_from_dataframe(
        df,
        id_tabla,
        job_config=configuracion_tarea,
    )
    tarea_carga.result()
    print("Trabajo finalizado.")

Apache Airflow, por ejemplo, no es una herramienta ETL en sí misma, pero ayuda a organizar nuestras tuberías ETL en una visualización agradable de gráficos de dependencia (DAG) para describir las relaciones entre tareas. La arquitectura típica de Airflow incluye un programador basado en metadatos, ejecutores, trabajadores y tareas.

Por ejemplo, podemos ejecutar ml_engine_training_op después de exportar datos al almacenamiento en la nube (bq_export_op) y hacer que este flujo de trabajo se ejecute diariamente o semanalmente.

Entrenamiento de modelos de ML usando Airflow. Imagen por el autor.

Considera el siguiente ejemplo.

Crea un gráfico de tubería de datos simple para exportar datos a un depósito de almacenamiento en la nube y luego entrenar el modelo de ML utilizando MLEngineTrainingOperator.

"""Definición del DAG para el entrenamiento del modelo de recomendación_bespoke."""import airflow
from airflow import DAG
from airflow.contrib.operators.bigquery_operator import BigQueryOperator
from airflow.contrib.operators.bigquery_to_gcs import BigQueryToCloudStorageOperator
from airflow.hooks.base_hook import BaseHook
from airflow.operators.app_engine_admin_plugin import AppEngineVersionOperator
from airflow.operators.ml_engine_plugin import MLEngineTrainingOperator
import datetime

def _get_project_id():
    """Obtener el ID del proyecto desde la conexión GCP predeterminada."""
    extras = BaseHook.get_connection('google_cloud_default').extra_dejson
    clave = 'extra__google_cloud_platform__project'
    if clave in extras:
        id_proyecto = extras[clave]
    else:
        raise ('Debe configurar el id_proyecto en la conexión google_cloud_default desde la Consola de Airflow')
    return id_proyecto

ID_PROYECTO = _get_project_id()
# Constantes del conjunto de datos, utilizadas en las tareas de BigQuery. 
# Puedes cambiar estos valores según tus datos.
CONJUNTO_DATOS = 'staging' #'analytics'
NOMBRE_TABLA = 'recommendation_bespoke'
# Nombres del depósito GCS y región, también pueden cambiarse.
DEPOSITO = 'gs://rec_wals_eu'
REGION = 'us-central1' #'europe-west2' #'us-east1'
DIRECTORIO_TRABAJO = DEPOSITO + '/jobs'
default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': airflow.utils.dates.days_ago(2),
    'email': ['[email protected]'],
    'email_on_failure': True,
    'email_on_retry': False,
    'retries': 5,
    'retry_delay': datetime.timedelta(minutes=5)
}
# Intervalo de programación predeterminado utilizando la sintaxis de cronjob - 
# puede personalizarse aquí o en la Consola de Airflow
intervalo_programacion = '00 21 * * *'
dag = DAG('recommendations_training_v6', default_args=default_args, schedule_interval=intervalo_programacion)
dag.doc_md = __doc__

### Definición de tareas ###

# Exportar datos de entrenamiento de BigQuery a GCS
archivo_entrenamiento = DEPOSITO + '/data/recommendations_small.csv'  # solo algunos registros para el entorno de preparación
t1 = BigQueryToCloudStorageOperator(
    task_id='bq_export_op',
    source_project_dataset_table='%s.recommendation_bespoke' % CONJUNTO_DATOS,
    destination_cloud_storage_uris=[archivo_entrenamiento],
    export_format='CSV',
    dag=dag
)

# Trabajo de entrenamiento de ML Engine
archivo_entrenamiento = DEPOSITO + '/data/recommendations_small.csv'
id_trabajo = 'recserve_{0}'.format(datetime.datetime.now().strftime('%Y%m%d%H%M'))
directorio_trabajo = DEPOSITO + '/jobs/' + id_trabajo
directorio_salida = DEPOSITO
delimitador = ','
tipo_datos = 'user_groups'
uri_imagen_maestra = 'gcr.io/my-project/recommendation_bespoke_container:tf_rec_latest'
argumentos_entrenamiento = ['--job-dir', directorio_trabajo,
                            '--train-file', archivo_entrenamiento,
                            '--output-dir', directorio_salida,
                            '--data-type', tipo_datos]
configuracion_maestro = {"imageUri": uri_imagen_maestra}
t3 = MLEngineTrainingOperator(
    task_id='ml_engine_training_op',
    project_id=ID_PROYECTO,
    job_id=id_trabajo,
    training_args=argumentos_entrenamiento,
    region=REGION,
    scale_tier='CUSTOM',
    master_type='complex_model_m_gpu',
    master_config=configuracion_maestro,
    dag=dag
)
t3.set_upstream(t1)

Bubbles [11] es otra herramienta de código abierto para ETL en el mundo de Python. Es excelente para el desarrollo rápido y me gusta cómo funciona con metadatos para describir las tuberías de datos. Los creadores de Bubbles lo llaman un “marco abstracto” y dicen que se puede utilizar desde muchos otros lenguajes de programación, no exclusivamente desde Python.

Hay muchas otras herramientas con aplicaciones más específicas, por ejemplo, extraer datos de páginas web (PyQuery, BeautifulSoup, etc.) y procesamiento paralelo de datos. Puede ser tema para otra historia, pero ya escribí sobre algunas de ellas antes, por ejemplo, la biblioteca joblib [12]

Infraestructura de datos como código

Infraestructura como código (IaC) es un enfoque popular y muy funcional para gestionar los recursos de la plataforma de datos. Incluso para los datos, es prácticamente un estándar en este momento, y definitivamente se ve genial en tu CV, lo que le dice a tus posibles empleadores que estás familiarizado/a con los estándares de DevOps. Usando herramientas como Terraform (plataforma agnóstica) y CloudFormation, podemos integrar nuestro trabajo de desarrollo y despliegues (operaciones) con facilidad.

En general, querríamos tener entornos de datos de pruebas y producción para nuestras tuberías de datos. Esto ayuda a probar nuestras tuberías y facilita la colaboración entre los equipos.

Considera este diagrama a continuación. Explica cómo funcionan los entornos de datos.

Entornos de datos. Imagen del autor.

A menudo, podemos necesitar un sandbox adicional para fines de prueba o para ejecutar pruebas unitarias de transformación de datos cuando nuestros servicios de ETL activan flujos de trabajo de CI/CD. Ya escribí sobre esto aquí:

Infraestructura como código para principiantes

Implementa tuberías de datos como un profesional con estas plantillas

levelup.gitconnected.com

Usando archivos de plantilla de AWS CloudFormation, podemos describir los recursos requeridos y sus dependencias para poder lanzar y configurarlos juntos como una sola pila.

Si eres un/a profesional de datos, este enfoque definitivamente te ayudará a trabajar con diferentes entornos de datos y replicar recursos de plataforma de datos de manera más rápida y consistente sin errores.

El problema es que muchos practicantes de datos no están familiarizados con IaC y esto crea muchos errores durante el proceso de desarrollo.

Malla de datos y gestión de datos descentralizada

El espacio de datos ha evolucionado significativamente durante la última década y ahora tenemos muchas herramientas y marcos de datos. Data Mesh define el estado cuando tenemos diferentes dominios de datos (departamentos de la empresa) con sus propios equipos y recursos de datos compartidos. Cada equipo tiene sus propias metas, KPIs, roles y responsabilidades de datos.

Durante mucho tiempo, la burocracia de datos ha sido un gran problema para muchas empresas.

Este tipo de plataforma de datos [4] puede parecer un poco caótico, pero se planeó para convertirse en una elección exitosa y eficiente para empresas donde la descentralización permite que diferentes equipos accedan a conjuntos de datos transversales y realicen análisis o tareas de ETL por sí mismos.

De hecho, Snowflake podría ser tu solución de almacén de datos favorita si eres analista de datos y no estás familiarizado/a con Spark. Sin embargo, a menudo es un problema trivial cuando quieres leer datos del datalake sin ayuda de ingeniería de datos. En este escenario, un montón de registros de metadatos sobre conjuntos de datos podría ser extremadamente útil, y eso es por qué Data Mesh es tan exitoso.

Permite a los usuarios con conocimiento sobre datos, sus orígenes y cómo otros equipos pueden aprovechar al máximo esos conjuntos de datos de los que no estaban conscientes previamente.

A veces, los conjuntos de datos y las conexiones de origen de datos se vuelven muy complicados y siempre es una buena práctica tener un único repositorio o silo de datos de la verdad con metadatos y descripciones de conjuntos de datos.

En una de mis historias anteriores [5], escribí sobre el papel de SQL como un lenguaje de consulta unificado para equipos y datos. De hecho, es analítico, auto-descriptivo e incluso puede ser dinámico, lo que lo convierte en una herramienta perfecta para todos los usuarios de datos.

A menudo, se convierte en un lío grande

Este hecho hace que motores de plantillas basados en SQL como DBT, Jinja y Dataform sean muy populares. Imagínate tener una plataforma similar a SQL donde todos los conjuntos de datos y sus transformaciones están descritos y definidos minuciosamente [6].

Gráfica de dependencia y metadatos de Dataform. Imagen por el autor.

Puede ser todo un desafío entender cómo los equipos de datos se relacionan con las fuentes y esquemas de datos. Muy a menudo, todo está enredado en una maraña de dependencias de conjuntos de datos y transformaciones ETL. La ingeniería de datos juega un papel crítico en la tutoría, mejora de la alfabetización en datos y empoderamiento del resto de la empresa con técnicas de procesamiento de datos de última generación y mejores prácticas.

Democratización de las tuberías de inteligencia empresarial mediante IA

Mejorar la accesibilidad a los datos siempre ha sido un tema popular en el espacio de los datos, pero es interesante ver cómo el proceso de diseño de toda la tubería de datos se está volviendo cada vez más accesible para los equipos que antes no estaban familiarizados con los datos. Ahora casi todos los departamentos pueden utilizar capacidades de IA incorporadas para crear transformaciones BI complejas en los datos.

Todo lo que necesitan es describir lo que desean en términos de BI

Por ejemplo, herramientas de BI como Thoughspot utilizan IA con una “interfaz de búsqueda similar a Google” intuitiva [7] para obtener información de los datos almacenados en cualquier solución moderna de DWH, como Google Big Query, Redshift, Snowflake o Databricks.

El conjunto de herramientas de datos moderno incluye herramientas de BI que ayudan con la modelización y visualización de datos. Muchas de ellas ya tienen estas capacidades de IA incorporadas para obtener información de los datos más rápidamente basándose en el comportamiento del usuario.

Creo que integrar GPT y BI es una tarea bastante fácil. En los próximos años, veremos muchos productos nuevos utilizando esta tecnología.

GPT puede preprocesar datos de texto para generar una consulta SQL que comprenda tu intención y responda tu pregunta.

Conclusión

En este artículo, intenté dar una visión general de alto nivel de las principales tendencias de datos que afectan el rol de ingeniería de datos en estos días. Data Mesh y SQL plantilla con gráficos de dependencia facilitan la democratización de todo el proceso analítico. Las tuberías de datos avanzadas con técnicas y transformaciones ETL intrincadas pueden ser transparentes para todos en la organización ahora. Las tuberías de datos se vuelven cada vez más accesibles para otros equipos y no necesitan conocer programación para aprender y comprender la complejidad de ETL. Data Mesh y metadatos ayudan a resolver este problema. Desde mi experiencia, puedo decir que cada vez veo a más personas aprendiendo SQL para contribuir a la capa de transformación. Las empresas nacidas durante la era de la “analítica de datos avanzada” tienen la ventaja de acceder fácilmente a los productos de proveedores de la nube y sus servicios gestionados. Sin duda, esto ayuda a adquirir las habilidades de datos necesarias y mejorarlas para obtener una ventaja competitiva.

[1] https://medium.com/towards-data-science/data-pipeline-design-patterns-100afa4b93e3

[2] https://towardsdatascience.com/introduction-to-apache-iceberg-tables-a791f1758009

[3] https://towardsdatascience.com/python-for-data-engineers-f3d5db59b6dd

[4] https://medium.com/towards-data-science/data-platform-architecture-types-f255ac6e0b7

[5] https://medium.com/towards-data-science/advanced-sql-techniques-for-beginners-211851a28488

[6] https://medium.com/towards-data-science/easy-way-to-create-live-and-staging-environments-for-your-data-e4f03eb73365

[7] https://docs.thoughtspot.com/cloud/latest/search-sage

[8] https://github.com/spotify/luigi

[9] https://petl.readthedocs.io/en/stable/

[10] https://www.bonobo-project.org

[11] http://bubbles.databrewery.org/

[12] https://medium.com/towards-data-science/how-to-become-a-data-engineer-c0319cb226c2

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Cómo las industrias están cumpliendo las expectativas de los consumidores con la IA de voz

Gracias a los rápidos avances tecnológicos, los consumidores se han acostumbrado a un nivel sin precedentes de comodi...

Inteligencia Artificial

Investigadores de NTU Singapur proponen OtterHD-8B un innovador modelo de IA multimodal evolucionado a partir de Fuyu-8B

Investigadores de S-Lab, Universidad Tecnológica de Nanyang, Singapur, presentan OtterHD-8B, un innovador modelo mult...

Inteligencia Artificial

NVIDIA AI ahora disponible en el Oracle Cloud Marketplace

Entrenar modelos de IA generativa se ha vuelto más fácil. La plataforma de supercomputación AI de NVIDIA DGX Cloud y ...

Inteligencia Artificial

Una introducción práctica a los LLMs

Este es el primer artículo de una serie sobre el uso de Modelos de Lenguaje Grande (LLMs) en la práctica. Aquí daré u...

Inteligencia Artificial

La cámara detiene los deepfakes al disparar

Las credenciales de contenido integradas verifican la autenticidad de las fotos.

Inteligencia Artificial

ChatGPT Plugins Todo lo que necesitas saber

Aprenda más sobre los complementos de terceros que OpenAI ha lanzado para comprender ChatGPTs en uso en el mundo real.