Le external functions di Snowflake permettono di chiamare un servizio esterno direttamente da SQL, restando dentro il warehouse. Fivetran racconta come le usa per il data enrichment dei propri dati cliente, combinando Snowflake, l’API di Clearbit e dbt. È un pattern utile a chi vuole aggiungere contesto ai record — mappare un dominio email a un’azienda, un IP a una geolocalizzazione — senza costruire worker esterni che girano periodicamente contro il warehouse.
Come funziona il meccanismo
Una external function è simile a una user-defined function, ma invece di calcolare il risultato nel sandbox del database chiama un handler esterno. In Snowflake la chiamata passa da un endpoint AWS API Gateway, che la inoltra a un handler come una Lambda. Le chiamate SQL vengono raggruppate in richieste HTTP JSON in batch: l’handler spacchetta gli elementi, calcola i valori e restituisce un batch di risultati. Una volta configurata l’API integration, la funzione si invoca come qualsiasi altra funzione SQL.
Freschezza e costi: il ruolo del caching
Chiamare l’API a ogni run della pipeline consuma quota e rallenta l’esecuzione. La soluzione descritta è il caching dei risultati con dbt: una tabella incrementale conserva i dati Clearbit per ogni email con il timestamp di fetch, una vista filtra la versione più fresca, un’altra unisce i record arricchiti e una calcola gli indirizzi non ancora presenti, così da interrogare l’API solo per i nuovi.
C’è un dettaglio che chi usa dbt riconoscerà: il passaggio di diff introduce un ciclo, non ammesso in un DAG. Fivetran lo aggira usando un riferimento source (invece di ref) alla tabella di enrichment, di fatto dicendo a dbt “usa il contenuto così com’è” invece di “ricalcola questa dipendenza”. È un hack dichiarato, con lo svantaggio di dover mantenere allineate due definizioni.
Il punto pratico: integrare risposte di API dentro flussi ELT dichiarativi in SQL e dbt può sostituire i worker esterni che interrogano periodicamente il warehouse, ma richiede di essere a proprio agio con i componenti dello stack — Gateway, handler, materializzazioni incrementali — prima di portarlo in produzione.
In sintesi
- Le external functions di Snowflake chiamano un handler esterno via AWS API Gateway direttamente da SQL.
- Il caching con tabelle incrementali dbt riduce consumo di quota e tempi, interrogando l’API solo per i record nuovi.
- Il ciclo nel grafo dbt si evita con un riferimento source alla tabella di enrichment, un compromesso da tenere allineato.
Fonte: Enriching your Snowflake data with external functions — https://www.fivetran.com/blog/data-enrichment-without-leaving-the-warehouse
Hai qualcosa da aggiungere? Unisciti alla discussione.