Integración con AWS - Obtención de todas las tablas de Tulip y escritura en S3
  • 12 Sep 2024
  • 2 Minutos para leer
  • Colaboradores

Integración con AWS - Obtención de todas las tablas de Tulip y escritura en S3


Resumen del artículo

Agilizar la obtención de datos de Tulip a AWS S3 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 mediante una función Lambda y escribirlos en un bucket de S3.

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 una variedad de recursos, como temporizadores de Event Bridge o una API Gateway.

A continuación se muestra un ejemplo de arquitectura:image.png

Configuración

Este ejemplo de integración requiere lo siguiente

  • Uso de la API de Tulip Tables (Obtenga 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 disparador relevante (API Gateway, Event Bridge Timer, etc.)2. Asegurarse de que el 3. Obtener los datos de la tabla Tulip con el siguiente ejemplo``pythonimport jsonimport awswrangler as wrimport boto3from datetime import datetimeimport pandas as pdimport requestsimport os

# Obtener marca de tiempo actual para nombres de archivo únicos

timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

bucket = os.getenv('bucket_name')

# Función para convertir diccionarios en cadenas

def dict_to_str(celda): if isinstance(celda, dict): return str(celda) return celda

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

# crear función

def write_to_s3(fila, base_url, api_header, cubo): tabla = fila['etiqueta'] id = fila['id'] df = consulta_tabla(id, base_url, api_header)

path = f's3://{bucket}/{timestamp}/{table}.csv'# Escribir DataFrame a S3 como CSVwr.s3.to_csv( df=df, path=path, index=False)print(f "Escribió {table} en {path}")return f "Escribió {table} en {path}"

def lambda_handler(event, context): 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) table_names = pd.DataFrame(r.json())

# tabla de consulta functiontable_names.apply(lambda fila: write_to_s3(fila, base_url, api_header, bucket), axis=1)return { 'statusCode': 200, 'body': json.dumps('¡escrito a s3!')}


## 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-** Identifique los defectos de producción antes de que se produzcan y aumente el acierto a la primera.Identifique 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.** Optimización del programa de producción basado en 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.


¿Te ha sido útil este artículo?