Ontwikkel .NET Standard gebruikersgedefinieerde functies voor Azure Stream Analytics taken (Met pensioen)

Belangrijk

.NET Standard gebruikersgedefinieerde functies voor Azure Stream Analytics zijn op 30 september 2024 buiten gebruik gesteld. De functie is niet langer beschikbaar. Overgang naar JavaScript gebruikersgedefinieerde functies voor Azure Stream Analytics.

Azure Stream Analytics biedt een SQL-achtige querytaal voor het uitvoeren van transformaties en berekeningen over stromen van gebeurtenisgegevens. De taal bevat veel ingebouwde functies, maar sommige complexe scenario's vereisen meer flexibiliteit. Door gebruik te maken van .NET Standard user-defined functions (UDF), kunt u uw eigen functies aanroepen die in elke .NET Standard-taal zijn geschreven (bijvoorbeeld C# of F#) om de Stream Analytics-querytaal uit te breiden. Gebruik UDF's voor complexe wiskundige berekeningen, importeer aangepaste ML-modellen met ML.NET, en gebruik aangepaste imputatielogica voor ontbrekende data.

Omdat deze functie buiten gebruik is gesteld, gebruik dit artikel om te begrijpen hoe .NET Standard UDF's werkten en om je migratie naar door de gebruiker gedefinieerde JavaScript-functies te plannen.

Over .NET Standard door gebruikers gedefinieerde functies

.NET Standard UDF's breiden de Stream Analytics-querytaal uit met aangepaste logica. Voordat je een UDF bouwt, bekijk de regio's waar de feature draait, het pakketpad dat het gebruikt, de ondersteunde type-mappings en de feature-beperkingen.

Azure Stream Analytics maakt de .NET door gebruikers gedefinieerde functie mogelijk voor cloudtaken die draaien op Stream Analytics-clusters. Taken die draaien op de Standard multitenant SKU kunnen deze functie gebruiken in de volgende publieke regio's:

  • West-Centraal VS
  • Europa - noord
  • East US
  • West US
  • Oostelijke Verenigde Staten 2
  • West Europe

Om deze functie in een andere regio te gebruiken, vraag toegang aan.

De indeling van een UDF-pakket heeft het pad /UserCustomCode/CLR/*. Azure Stream Analytics kopieert dynamische linkbibliotheken (DLL's) en resources onder de /UserCustomCode/CLR/* map, wat helpt om gebruikers-DLL's te isoleren van systeem- en Azure Stream Analytics-DLL's. Alle functies gebruiken dit pakketpad, ongeacht hoe je ze gebruikt.

Om Azure Stream Analytics-waarden te kunnen gebruiken in C#, moeten ze worden marshaled van de ene omgeving naar de andere. Marshaling vindt plaats voor alle invoerparameters van een UDF. Elk Azure Stream Analytics-type heeft een overeenkomstig type in C#, weergegeven in de volgende tabel:

Azure Stream Analytics-type C#-type
Bigint lang
zweven dubbel
nvarchar(max) touw
datetime DateTime
Opnemen Woordenboekstring<, object>
Array Objecten[]

Hetzelfde geldt wanneer gegevens van C# naar Azure Stream Analytics moeten worden gemarsald, wat gebeurt op de uitvoerwaarde van een UDF. De volgende tabel toont de ondersteunde types:

C#-type Azure Stream Analytics-type
lang Bigint
dubbel zweven
touw nvarchar(max)
DateTime datum en tijd
struct Opnemen
object Opnemen
Objecten[] Array
Woordenboekstring<, object> Opnemen

De UDF-functie heeft de volgende beperkingen:

  • Je kunt .NET Standard UDF's alleen maken in Visual Studio Code of Visual Studio, en ze vervolgens publiceren naar Azure. Je kunt alleen-lezen versies van .NET Standard UDF's bekijken onder Functions in het Azure-portaal. Het Azure-portaal ondersteunt het authoren van .NET Standard-functies niet.
  • De Azure portal query editor toont een foutmelding wanneer je een .NET Standard UDF in het portaal gebruikt.
  • Je kunt geen externe REST-endpoints oproepen, zoals reverse IP lookup doen of referentiedata uit een externe bron halen.
  • Omdat de aangepaste code dezelfde context deelt als de Azure Stream Analytics-engine, kan de aangepaste code niet verwijzen naar iets met een naamruimte of DLL-naam die conflicteert met Azure Stream Analytics-code. Je kunt bijvoorbeeld niet naar Newtonsoft.Json verwijzen.
  • Azure Stream Analytics kopieert ondersteunende bestanden in het project naar het User Custom Code-zipbestand dat het gebruikt wanneer je de taak naar de cloud publiceert. Tijdens decompressie verplaatsen alle bestanden in submappen naar de wortel van de User Custom Code-map in de cloud. Decompressie vlakt het zipbestand af.
  • Aangepaste gebruikerscode biedt geen ondersteuning voor lege mappen. Voeg geen lege mappen toe aan de ondersteunende bestanden in het project.

Een UDF ontwikkelen in Visual Studio Code

Met Visual Studio Code-hulpprogramma's voor Azure Stream Analytics kunt u eenvoudig UDF's schrijven, uw taken lokaal testen (zelfs offline) en uw Stream Analytics-taak publiceren naar Azure. Je kunt .NET Standard UDF's implementeren in Visual Studio Code vanuit een lokaal project of vanuit lokale DLL's. U kunt ook verwijzen naar lokale DLL's met de door de gebruiker gedefinieerde functies.

Gebruik een lokaal project voor complexe functies die de volledige kracht van een .NET Standard-taal vereisen, buiten de expressietaal, zoals procedurele logica of recursie. Een lokaal project helpt ook wanneer je de functielogica moet delen over meerdere Azure Stream Analytics-queries, en je kunt je functies lokaal debuggen en testen. In het volgende voorbeeld is CSharpUDFProject een C#-klasse bibliotheekproject, en ASAUDFDemo is het Azure Stream Analytics-project, dat verwijst naar CSharpUDFProject.

  1. Maak een nieuwe .NET Standard classbibliotheek aan op je lokale machine.

    Screenshot van een Azure Stream Analytics-project in Visual Studio Code.

  2. Schrijf de code in uw klas. Definieer de klassen als publiek en de objecten als statisch openbaar. De volgende UDF vermenigvuldigt een geheel getal met zichzelf om het kwadraat van het geheel getal te produceren.

    using System;
    
    namespace CSharpUDFProject
    {
       //
        public class Class1
        {
            public static Int64 SquareFunction(Int64 a)
            {
                return a * a;
            }
        }
    }
    
  3. Voeg een nieuw configuratiebestand voor de C#-functie toe aan je Azure Stream Analytics-project en raadpleeg het C#-klassebibliotheekproject. Om de functie toe te voegen, selecteert u de map Functions en houdt u deze ingedrukt (of klikt u er met de rechtermuisknop op). Kies vervolgens Item toevoegen.

    Screenshot van het toevoegen van een nieuwe functie in een Azure Stream Analytics-project.

  4. Voeg een C#-functie SquareFunction toe aan uw Azure Stream Analytics-project.

    Screenshot van het selecteren van een C#-functie uit een Stream Analytics-project in VS Code.

  5. Voer de naam van de C#-functie in.

    Screenshot van het invoeren van een C#-functienaam in Visual Studio Code.

  6. Selecteer in de C#-functieconfiguratie het pad voor het bibliotheekproject kiezen om je C#-project uit de dropdownlijst te kiezen, en kies Build project om je project te bouwen. Kies vervolgens Klasse selecteren en methode selecteren om de gerelateerde klasse en methodenaam te selecteren in de vervolgkeuzelijst. Om te verwijzen naar de methoden, types en functies in de Stream Analytics-query, definieer de klassen als publiek en de objecten als statisch openbaar.

    Screenshot van de Stream Analytics C#-functieconfiguratie in VS Code.

  7. Om in plaats daarvan de C# UDF uit een DLL te gebruiken, kiest u Bibliotheek-dll-pad kiezen om het pad naar de DLL te kiezen en vervolgens Klasse selecteren en Methode selecteren.

    Screenshot van de Stream Analytics C#-functieconfiguratie voor een bibliotheek-DLL.

  8. Roep de UDF aan in uw Azure Stream Analytics-query.

     SELECT price, udf.SquareFunction(price)
     INTO Output
     FROM Input 
    
  9. Configureer het assemblypad in het JobConfig.json taakconfiguratiebestand, in de sectie CustomCodeStorage . Deze stap is niet nodig voor lokale tests.

  10. Voordat je de taak naar Azure stuurt, configureer je het pakketpad in het JobConfig.json functieconfiguratiebestand, in de sectie CustomCodeStorage. Gebruik Select from your subscription in CodeLens om je abonnement te kiezen, en kies de opslagaccount en containernaam uit de dropdownlijst. Laat pad standaard staan. Deze stap is niet nodig voor lokale tests.

    Screenshot van het configureren van het opslagaccount voor een Stream Analytics C#-functie.

Een UDF ontwikkelen in Visual Studio

Je kunt UDF's implementeren in Visual Studio door CodeBehind-bestanden te gebruiken in een ASA-project, een UDF van een lokaal project, of een bestaand pakket van een Azure-opslagaccount. In het volgende voorbeeld is UDFTest een C#-klasse bibliotheekproject, en ASAUDFDemo is het Azure Stream Analytics-project, dat verwijst naar UDFTest.

Voor de CodeBehind-optie schrijf gebruikersgedefinieerde functies in het Script.asql CodeBehind-bestand. Visual Studio-tools compileren het CodeBehind-bestand automatisch tot een assemblybestand. De tools verpakken de assemblies als een zipbestand en uploaden ze naar je opslagaccount wanneer je je taak bij Azure indient. Om te leren hoe je een C# UDF schrijft met CodeBehind, volg de C# UDF voor Stream Analytics Edge banen tutorial.

  1. Maak een nieuwe .NET Standard classbibliotheek aan in je oplossing.

    Screenshot van een Azure Stream Analytics IoT Edge project in Visual Studio.

  2. Schrijf de code in uw klas. Definieer de klassen als publiek en de objecten als statisch openbaar.

  3. Bouw uw project. De tools verpakken alle artefacten uit de bin-map in een zipbestand en uploaden het zipbestand naar het opslagaccount. Voor externe referenties gebruik je een assembly-referentie in plaats van het NuGet-pakket.

  4. Verwijs naar de nieuwe klasse in uw Azure Stream Analytics-project.

  5. Voeg een nieuwe functie toe aan uw Azure Stream Analytics-project.

  6. Configureer het assemblypad in het JobConfig.json taakconfiguratiebestand. Stel het assemblypad in op Local Project Reference of CodeBehind.

  7. Bouw zowel het functieproject als het Azure Stream Analytics-project opnieuw.

  8. Bouw je C#-project zodat je een referentie kunt toevoegen aan je C# UDF vanuit de Azure Stream Analytics-query.

    Screenshot van het bouwen van een Azure Stream Analytics IoT Edge project in Visual Studio.

  9. Voeg de verwijzing naar het C#-project toe in het ASA-project. Selecteer en houd (of klik met de rechtermuisknop aan) de Node Referenties , en kies vervolgens Referentie toevoegen.

    Screenshot van het toevoegen van een referentie naar een C#-project in Visual Studio.

  10. Kies de C#-projectnaam in de lijst.

    Screenshot van het kiezen van een C#-projectnaam uit de referentielijst in Visual Studio.

  11. Bevestig dat UDFTest verschijnt onder Referenties in Solution Explorer.

    Screenshot van de door de gebruiker gedefinieerde functiereferentie in Solution Explorer in Visual Studio.

  12. Selecteer en houd de map Functions ingedrukt (of klik met de rechtermuisknop aan), en kies vervolgens Nieuw Item.

    Screenshot van het toevoegen van een nieuw item aan Functions in een Azure Stream Analytics Edge-oplossing.

  13. Voeg een C#-functie toeSquareFunction.json aan uw Azure Stream Analytics-project.

    Screenshot van het selecteren van een C#-functie uit Stream Analytics Edge-items in Visual Studio.

  14. Open de functie in Solution Explorer om het configuratievenster weer te geven.

    Screenshot van het configuratiedialoog voor de C#-functie in Visual Studio.

  15. Kies in de configuratie van de C#-functie Laden vanuit ASA-projectreferentie en de gerelateerde assembly-, klasse- en methodenamen in de vervolgkeuzelijst. Om te verwijzen naar de methoden, types en functies in de Stream Analytics-query, definieer de klassen als publiek en de objecten als statisch openbaar.

    Screenshot van de Stream Analytics C#-functieconfiguratie met een ASA-projectreferentie in Visual Studio.

Configureer bestaande .NET Standard UDF-pakketten

Je kunt .NET Standard UDF's in elke IDE maken en ze aanroepen vanuit je Azure Stream Analytics-query. Nadat je de assembly zip-pakketten naar je Azure-opslagaccount hebt geüpload, kun je de functies in Azure Stream Analytics-queries gebruiken door de opslaginformatie op te nemen in de Stream Analytics-taakconfiguratie. Je kunt de functie niet lokaal testen met deze optie omdat Visual Studio-tools je pakket niet downloaden. De service parseert het pakketpad rechtstreeks. Om een bestaand pakket te gebruiken:

  1. Compileer je code en pak alle DLL's met behulp van het pad /UserCustomCode/CLR/*.

  2. Upload UserCustomCode.zip naar de root van de container in je Azure opslagaccount.

  3. Vouw in het JobConfig.json functieconfiguratiebestand de sectie User-Defined Code Configuration uit.

  4. Vul de configuratie in met de volgende voorgestelde waarden.

    Setting Voorgestelde waarde
    Algemene opslaginstellingenbron Gegevensbron kiezen uit het huidige account
    Abonnement op algemene opslaginstellingen < uw abonnement >
    Globale opslaginstellingen opslagaccount < uw opslagaccount >
    Resource voor aangepaste codeopslaginstellingen Gegevensbron kiezen uit het huidige account
    Opslagaccount voor aangepaste codeopslaginstellingen < uw opslagaccount >
    Container voor aangepaste codeopslaginstellingen < uw opslagcontainer >
    Aangepaste assemblycodebron Bestaande assembly-pakketten uit de cloud
    Aangepaste assemblycodebron UserCustomCode.zip

Aangepaste informatie registreren met de klasse StreamingContext

Door gebruik te maken van het loggingmechanisme kun je aangepaste informatie vastleggen terwijl een taak draait. Gebruik loggegevens om in realtime de correctheid van de aangepaste code te debuggen of te beoordelen. Gebruik de volgende stappen om logberichten te publiceren en te openen:

  1. Gebruik de StreamingContext klasse om diagnostische informatie te publiceren met behulp van de StreamingDiagnostics.WriteError functie. De volgende code toont de interface die Azure Stream Analytics biedt.

    public abstract class StreamingContext
    {
        public abstract StreamingDiagnostics Diagnostics { get; }
    }
    
    public abstract class StreamingDiagnostics
    {
        public abstract void WriteError(string briefMessage, string detailedMessage);
    }
    
  2. Geef StreamingContext als invoerparameter door aan de UDF-methode en gebruik deze binnen de UDF om aangepaste loginformatie te publiceren. In het volgende voorbeeld definieert MyUdfMethod een data-invoer , die door de query wordt geleverd, en een context-invoer als de StreamingContext, die door de runtime-engine wordt geleverd.

    public static long MyUdfMethod(long data, StreamingContext context)
    {
        // write log
        context.Diagnostics.WriteError("User Log", "This is a log message");
    
        return data;
    }
    
  3. Roep de UDF aan in je query. Je hoeft de StreamingContext waarde niet in de SQL-query door te geven, want Azure Stream Analytics levert automatisch een contextobject als er een invoerparameter aanwezig is. Het gebruik van MyUdfMethod verandert niet, zoals te zien is in de volgende query.

    SELECT udf.MyUdfMethod(input.value) as udfValue FROM input
    
  4. Toegang tot logberichten via de diagnostische logboeken.