Con Azure Cosmos DB possiamo memorizzare documenti strutturati in JSON, e non solo, in grande quantità e godere di ottime prestazioni nella loro ricerca. Possiamo estrarre porzioni dei documenti o ricercarli usando molte delle funzioni builtin già disponibili. Delle volte, però, esse non sono sufficienti e necessitiamo di logiche più articolate per estrarre quello che vogliamo. In questo caso possiamo ricorrere alle user-defined function, delle funzioni JavaScript che possiamo definire sul database stesso e con le quali possiamo manipolare il JSON literal.
Per creare la funzione possiamo usare il data explorer direttamente sul portale Azure, il quale sulla toolbar mette a disposizione l'interfaccia apposita.

L'editor che si presenta, lo stesso anche per modificare una funzione già presente, è molto semplice e ci permette di creare una funzione che deve restituire uno dei tipi JavaScript: numeri, stringhe, oggetti e array.

Se usiamo la funzione per ottenere un oggetto complesso o un array, questo verrà incluso nel grafo senza nessuna incompatibilità. Nella figura abbiamo definito una funzione di split di una stringa, la quale quindi restituisce un array.
La funzione può essere poi usata per ottenere un array, come nel seguente esempio:
SELECT udf.SPLIT('chiave1,chiave2',',') AS items
Il risultato sarà il seguente:
[ { "items": [ "chiave1", "chiave2" ] } ]
Possiamo eventualmente usare le JOIN per poter appiattire l'array o combinarlo all'interno di una subquery. Se la funzione viene usata nei filtri, invece, è importante notare che appesantisce notevolmente la ricerca, forzando un scan completo non potendo utilizzare gli indici. Di conseguenza, si può ottimizzare il lavoro aggiungendo altri predicati.
Per maggiori consigli rimandiamo alla documentazione ufficiale:
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-udfs
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestione degli stili CSS con le regole @layer
Change tracking e composition in Entity Framework
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Utilizzare Hybrid Cache in .NET 9
Gestire i dati con Azure Cosmos DB Data Explorer
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Utilizzare i variable font nel CSS
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API