Intégration AWS - Récupérer toutes les tables Tulip et les écrire sur S3
  • 12 Sep 2024
  • 2 Minutes à lire
  • Contributeurs

Intégration AWS - Récupérer toutes les tables Tulip et les écrire sur S3


Résumé de l’article

Rationaliser la récupération des données de Tulip vers AWS S3 pour élargir les possibilités d'analyse et d'intégration.

Objectif

Ce guide explique étape par étape comment récupérer toutes les données de Tulip Tables via une fonction Lambda et les écrire dans un bucket S3.

Cela va au-delà de la requête de base de récupération et itère à travers toutes les tables dans une instance donnée ; cela peut être utile pour un travail ETL hebdomadaire (Extraire, Transformer, Charger).

La fonction lambda peut être déclenchée par l'intermédiaire de diverses ressources telles que des minuteries Event Bridge ou une passerelle API.

Voici un exemple d'architecture :image.png

Configuration

Cet exemple d'intégration nécessite les éléments suivants

  • Utilisation de l'API Tulip Tables (Obtenir la clé API et le secret dans les paramètres du compte)
  • Tulip Table (Obtenir l'ID unique de la table)

Etapes de haut niveau:1. créer une fonction AWS Lambda avec le déclencheur approprié (API Gateway, Event Bridge Timer, etc.)2. s'assurer que la fonction AWS Lambda est bien activée 3. récupérer les données de la table Tulip avec l'exemple ci-dessous``pythonimport jsonimport awswrangler as wrimport boto3from datetime import datetimeimport pandas as pdimport requestsimport os

# Obtenir l'horodatage actuel pour les noms de fichiers uniques

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

bucket = os.getenv('bucket_name')

# Fonction permettant de convertir des dictionnaires en chaînes de caractères

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

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

# créer une fonction

def write_to_s3(row, base_url, api_header, bucket) : table = row['label'] id = row['id'] df = query_table(id, base_url, api_header)

path = f's3://{bucket}/{timestamp}/{table}.csv'# Write DataFrame to S3 as CSVwr.s3.to_csv( df=df, path=path, index=False)print(f "Wrote {table} to {path}")return f "Wrote {table} to {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())

# interrogation de la table functiontable_names.apply(lambda row : write_to_s3(row, base_url, api_header, bucket), axis=1)return { 'statusCode' : 200, 'body' : json.dumps('written to s3!')}


## Cas d'utilisation et prochaines étapes


Une fois que vous avez finalisé l'intégration avec lambda, vous pouvez facilement analyser les données avec un sagemaker notebook, QuickSight, ou une variété d'autres outils.


**1. Prédiction des défauts -** Identifier les défauts de production avant qu'ils ne se produisent et augmenter la qualité dès la première fois - Identifier les principaux facteurs de production de la qualité afin de mettre en œuvre des améliorations.


**2. Optimisation du coût de la qualité -** Identifier les possibilités d'optimisation de la conception des produits sans impact sur la satisfaction du client.


**3. Optimisation de l'énergie de production -** Identifier les leviers de production pour optimiser la consommation d'énergie


**4. Prévision et optimisation des livraisons et de la planification -** Optimiser le calendrier de production en fonction de la demande du client et du calendrier des commandes en temps réel**.**


**5. Benchmarking global des machines / lignes -** Benchmarker des machines ou équipements similaires avec normalisation.


**6. Gestion de la performance numérique mondiale / régionale -** Consolidation des données pour créer des tableaux de bord en temps réel**.**


Cet article vous a-t-il été utile ?