Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
Maak een nieuwe .NET Standard classbibliotheek aan op je lokale machine.
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; } } }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.
Voeg een C#-functie SquareFunction toe aan uw Azure Stream Analytics-project.
Voer de naam van de C#-functie in.
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.
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.
Roep de UDF aan in uw Azure Stream Analytics-query.
SELECT price, udf.SquareFunction(price) INTO Output FROM InputConfigureer het assemblypad in het
JobConfig.jsontaakconfiguratiebestand, in de sectie CustomCodeStorage . Deze stap is niet nodig voor lokale tests.Voordat je de taak naar Azure stuurt, configureer je het pakketpad in het
JobConfig.jsonfunctieconfiguratiebestand, 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.
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.
Maak een nieuwe .NET Standard classbibliotheek aan in je oplossing.
Schrijf de code in uw klas. Definieer de klassen als publiek en de objecten als statisch openbaar.
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.
Verwijs naar de nieuwe klasse in uw Azure Stream Analytics-project.
Voeg een nieuwe functie toe aan uw Azure Stream Analytics-project.
Configureer het assemblypad in het
JobConfig.jsontaakconfiguratiebestand. Stel het assemblypad in op Local Project Reference of CodeBehind.Bouw zowel het functieproject als het Azure Stream Analytics-project opnieuw.
Bouw je C#-project zodat je een referentie kunt toevoegen aan je C# UDF vanuit de Azure Stream Analytics-query.
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.
Kies de C#-projectnaam in de lijst.
Bevestig dat UDFTest verschijnt onder Referenties in Solution Explorer.
Selecteer en houd de map Functions ingedrukt (of klik met de rechtermuisknop aan), en kies vervolgens Nieuw Item.
Voeg een C#-functie toeSquareFunction.json aan uw Azure Stream Analytics-project.
Open de functie in Solution Explorer om het configuratievenster weer te geven.
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.
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:
Compileer je code en pak alle DLL's met behulp van het pad
/UserCustomCode/CLR/*.Upload
UserCustomCode.zipnaar de root van de container in je Azure opslagaccount.Vouw in het
JobConfig.jsonfunctieconfiguratiebestand de sectie User-Defined Code Configuration uit.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:
Gebruik de
StreamingContextklasse om diagnostische informatie te publiceren met behulp van deStreamingDiagnostics.WriteErrorfunctie. 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); }Geef
StreamingContextals invoerparameter door aan de UDF-methode en gebruik deze binnen de UDF om aangepaste loginformatie te publiceren. In het volgende voorbeeld definieertMyUdfMethodeen data-invoer , die door de query wordt geleverd, en een context-invoer als deStreamingContext, 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; }Roep de UDF aan in je query. Je hoeft de
StreamingContextwaarde niet in de SQL-query door te geven, want Azure Stream Analytics levert automatisch een contextobject als er een invoerparameter aanwezig is. Het gebruik vanMyUdfMethodverandert niet, zoals te zien is in de volgende query.SELECT udf.MyUdfMethod(input.value) as udfValue FROM inputToegang tot logberichten via de diagnostische logboeken.