- Impresión
Integración con AWS - Obtención de todas las tablas Tulip en una función Lambda
Racionalizar la obtención de datos de Tulip a AWS para ampliar las oportunidades de análisis e integración.
Propósito
Esta guía explica paso a paso cómo obtener todos los datos de Tulip Tables AWS a través de una función lambda.
Esto va más allá de la consulta básica de obtención e itera a través de todas las tablas en una instancia dada; esto puede ser ideal para un trabajo ETL semanal (Extraer, Transformar, Cargar).
La función lambda puede activarse a través de diversos recursos, como temporizadores de Event Bridge o una API Gateway.
A continuación se muestra un ejemplo de arquitectura:
Configuración
Este ejemplo de integración requiere lo siguiente
- Uso de la API de Tulip Tables (obtener la clave y el secreto de la API en la configuración de la cuenta)
- Tulip Table (obtener el ID único de la tabla)
Pasos de alto nivel 1. Crear una función AWS Lambda con el activador correspondiente (API Gateway, Event Bridge Timer, etc.). Obtén los datos de la tabla Tulip con el siguiente ejemplo ```python import json import pandas as pd import requests from sqlalchemy import create_engine import os
def lambda_handler(event, context): # inicializar db host = os.getenv('host') user = os.getenv('username') password = os.getenv('password') db = os.getenv('database')
engine_str = f'postgresql://{user}:{password}@{host}/{db}' engine = create_engine(engine_str) api_header = {'Authorization' : os.getenv('tulip_api_basic_auth')} instance = os.getenv('tulip_instance') base_url = f'https://{instance}.tulip.co/api/v3' get_tables_function = '/tables' r = requests.get(base_url+get_tables_function, headers=api_header) df = pd.DataFrame(r.json()) # Función para convertir diccionarios en cadenas def dict_to_str(cell): if isinstance(cell, dict): return str(cell) return cell # Función de consulta de tablas def query_table(table_id, base_url, api_header): offset = 0 function = f'/tables/{table_id}/records?limit=100&offset={offset}&includeTotalCount=false&filterAggregator=all' r = requests.get(base_url+function, headers=api_header) df = pd.DataFrame(r.json()) length = len(r.json()) while length > 0: offset += 100 function = f'/tables/{table_id}/records?limit=100&offset={offset}&includeTotalCount=false&filterAggregator=all' r = requests.get(base_url+function, headers=api_header) length = len(r.json()) df_append = pd.DataFrame(r.json()) df = pd.concat([df, df_append], axis=0) df = df.apply(lambda row: row.apply(dict_to_str), axis=1) return df # create function def write_to_db(row, base_url, api_header): table = row['label'] id = row['id'] df = query_table(id, base_url, api_header) df.to_sql(table,engine, if_exists='replace', index=False) print(f'¡escribió {table} en la base de datos!') # iterar por todas las tablas: df.apply(lambda row: write_to_db(row, base_url, api_header), axis=1) return { 'statusCode': 200, 'body': json.dumps('¡escribió en la base de datos!')}
## Casos de uso y próximos pasos
Una vez que haya finalizado la integración con lambda, puede analizar fácilmente los datos con un cuaderno sagemaker, QuickSight, o una variedad de otras herramientas.
**1. Predicción de defectos**- Identificar los defectos de producción antes de que ocurran y aumentar el acierto a la primera - Identificar los principales impulsores de la calidad en la producción con el fin de implementar mejoras.
**2. Optimización del coste de la**calidad - Identificar oportunidades para optimizar el diseño del producto sin afectar a la satisfacción del cliente.
**3. Optimización**de la energía de producción - Identificar palancas de producción para optimizar el consumo de energía
**4. Predicción y optimización de la entrega y la planificación**- Optimizar el programa de producción en función de la demanda del cliente y el programa de pedidos en tiempo real
**5. Benchmarking global de máquinas / líneas**- Benchmark de máquinas o equipos similares con normalización
**6. Gestión del rendimiento digital global / regional**- Datos consolidados para crear cuadros de mando en tiempo real