Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważna
Standardowe funkcje .NET zdefiniowane przez użytkownika dla Azure Stream Analytics zostały wycofane 30 września 2024 roku. Funkcja ta nie jest już dostępna. Przejście na funkcje zdefiniowane przez użytkownika w JavaScript dla Azure Stream Analytics.
Usługa Azure Stream Analytics oferuje język zapytań przypominający sql na potrzeby wykonywania przekształceń i obliczeń na strumieniach danych zdarzeń. Język zawiera wiele wbudowanych funkcji, ale niektóre złożone scenariusze wymagają większej elastyczności. Korzystając z funkcji zdefiniowanych przez użytkownika (UDF) standardu .NET, możesz wywołać własne funkcje napisane w dowolnym języku .NET Standard (na przykład C# lub F#), aby rozszerzyć język zapytań Stream Analytics. Używaj UDF do wykonywania złożonych obliczeń matematycznych, importuj niestandardowe modele ML za pomocą ML.NET oraz używaj niestandardowej logiki imputacji dla brakujących danych.
Ponieważ ta funkcja została wycofana, skorzystaj z tego artykułu, aby zrozumieć, jak działały standardowe UDF-y .NET oraz zaplanować migrację do funkcji definiowanych przez użytkownika w JavaScript.
O .NET Standardowe funkcje definiowane przez użytkownika
Funkcje UDF platformy .NET Standard rozszerzają język zapytań usługi Stream Analytics o logikę niestandardową. Zanim zbudujesz UDF, przejrzyj regiony, w których funkcja działa, ścieżkę pakietu, którą używa, obsługiwane mapowania typów oraz ograniczenia funkcji.
Azure Stream Analytics umożliwia funkcję funkcji .NET zdefiniowanej przez użytkownika dla zadań chmurowych działających na klastrach Stream Analytics. Zadania działające na standardowym multitenant SKU mogą korzystać z tej funkcji w następujących regionach publicznych:
- Zachodnio-środkowe stany USA
- Europa Północna
- Wschodnie stany USA
- Zachodnie stany USA
- Wschodnie stany USA 2
- Europa Zachodnia
Aby użyć tej funkcji w innym regionie, należy poprosić o dostęp.
Format dowolnego pakietu UDF ma ścieżkę /UserCustomCode/CLR/*. Azure Stream Analytics kopiuje biblioteki dynamiczne (DLL) i zasoby do folderu /UserCustomCode/CLR/*, co pomaga odizolować biblioteki DLL użytkownika od systemowych bibliotek DLL i bibliotek DLL usługi Azure Stream Analytics. Wszystkie funkcje korzystają z tej ścieżki pakietu, niezależnie od sposobu ich zastosowania.
Aby wartości usługi Azure Stream Analytics były używane w języku C#, muszą być marshalowane z jednego środowiska do drugiego. Przeprowadzanie marshalingu odbywa się dla wszystkich parametrów wejściowych funkcji zdefiniowanej przez użytkownika. Każdy typ Azure Stream Analytics ma odpowiadający mu typ w C#, przedstawiony w poniższej tabeli:
| typ usługi Azure Stream Analytics | Typ języka C# |
|---|---|
| bigint | long |
| float | podwójny |
| nvarchar(max) | ciąg |
| data/godzina | DateTime |
| Rekord | Słownik<string, object> |
| Array | Object[] |
To samo dotyczy sytuacji, gdy dane muszą być przekazywane z języka C# do usługi Azure Stream Analytics, co dzieje się z wartością wyjściową funkcji zdefiniowanej przez użytkownika (UDF). Poniższa tabela przedstawia obsługiwane typy:
| Typ języka C# | Typ Azure Stream Analytics |
|---|---|
| long | bigint |
| podwójny | float |
| ciąg | nvarchar(max) |
| DateTime | Data i godzina |
| struktura | Rekord |
| obiekt | Rekord |
| Object[] | Array |
| Słownik<string, object> | Rekord |
Funkcja UDF ma następujące ograniczenia:
- Możesz tworzyć standardowe UDF-y .NET tylko w Visual Studio Code lub Visual Studio, a następnie publikować je na Azure. Możesz zobaczyć wersje tylko do odczytu standardowych UDF-ów .NET w sekcji Funkcje w portalu Azure. Portal Azure nie obsługuje tworzenia funkcji .NET Standard.
- Edytor zapytań portalu Azure pokazuje błąd, gdy używasz standardowego UDF .NET w portalu.
- Nie możesz wywoływać zewnętrznych punktów końcowych REST, na przykład podczas odwrotnego wyszukiwania IP czy pobierania danych referencyjnych z zewnętrznego źródła.
- Ponieważ własny kod dzieli kontekst z silnikiem Azure Stream Analytics, kod niestandardowy nie może odwoływać się do niczego, co ma konfliktową nazwę lub nazwę DLL z kodem Azure Stream Analytics. Na przykład nie możesz odwoływać się do Newtonsoft.json.
- Azure Stream Analytics kopiuje pliki pomocnicze w projekcie do pliku ZIP User Custom Code, z którego korzysta podczas publikowania zadania do chmury. Podczas dekompresji wszystkie pliki w podfolderach przenoszą się do korzenia folderu User Custom Code w chmurze. Dekompresja spłaszcza plik zip.
- Kod niestandardowy użytkownika nie obsługuje pustych folderów. Nie dodawaj pustych folderów do plików pomocniczych w projekcie.
Opracuj funkcję zdefiniowaną przez użytkownika w programie Visual Studio Code
Narzędzia programu Visual Studio Code dla Azure Stream Analytics ułatwiają pisanie UDF, testowanie zadań lokalnie (nawet w trybie offline) i publikowanie zadania Azure Stream Analytics na Azure. Możesz zaimplementować standardowe UDF-y .NET w Visual Studio Code z lokalnego projektu lub lokalnych DLL. Możesz również odwoływać się do lokalnych bibliotek DLL zawierających funkcje zdefiniowane przez użytkownika.
Użyj lokalnego projektu dla złożonych funkcji, które wymagają pełnej mocy języka standardowego .NET poza jego językiem wyrazowym, takich jak logika proceduralna czy rekurencja. Lokalny projekt pomaga też, gdy musisz udostępnić logikę funkcji na kilku zapytaniach Azure Stream Analytics, a także możesz debugować i testować funkcje lokalnie. W poniższym przykładzie CSharpUDFProject to projekt biblioteki klasy C#, a ASAUDFDemo to projekt Azure Stream Analytics, który odnosi się do CSharpUDFProject.
Stwórz nową bibliotekę klas .NET Standard na swoim lokalnym komputerze.
Napisz kod w klasie. Zdefiniuj klasy jako publiczne , a obiekty jako statyczne publiczne. Poniższa funkcja UDF mnoży liczbę całkowitą przez samą siebie, aby otrzymać jej kwadrat.
using System; namespace CSharpUDFProject { // public class Class1 { public static Int64 SquareFunction(Int64 a) { return a * a; } } }Dodaj nowy plik konfiguracyjny funkcji C# w swoim projekcie Azure Stream Analytics i odwołaj się do projektu biblioteki klas C#. Aby dodać funkcję, zaznacz i przytrzymaj (lub kliknij prawym przyciskiem myszy) folder Funkcje , a następnie wybierz Dodaj przedmiot.
Dodaj funkcję języka C# SquareFunction do projektu usługi Azure Stream Analytics.
Wprowadź nazwę funkcji w C#.
W konfiguracji funkcji C# wybierz Wybierz ścieżkę projektu bibliotecznego , aby wybrać swój projekt C# z listy rozwijanej, i wybierz Build project , aby zbudować swój projekt. Następnie wybierz pozycję Wybierz klasę i Wybierz metodę , aby wybrać powiązaną klasę i nazwę metody z listy rozwijanej. Aby odnieść się do metod, typów i funkcji w zapytaniu Stream Analytics, zdefiniuj klasy jako publiczne , a obiekty jako statyczne publiczne.
Aby zamiast tego użyć C# UDF z pliku DLL, wybierz Wybierz ścieżkę do biblioteki DLL, aby wskazać plik DLL, a następnie wybierz Wybierz klasę i Wybierz metodę.
Wywołaj funkcję zdefiniowaną przez użytkownika w zapytaniu Azure Stream Analytics.
SELECT price, udf.SquareFunction(price) INTO Output FROM InputSkonfiguruj ścieżkę asemblera w pliku konfiguracyjnym zadania
JobConfig.json, w sekcji CustomCodeStorage . Ten krok nie jest potrzebny do lokalnych testów.Przed przesłaniem zadania do Azure, skonfiguruj ścieżkę pakietu w
JobConfig.jsonpliku konfiguracji zadania, w sekcji CustomCodeStorage. Użyj opcji Wybierz z subskrypcji w CodeLens, aby wybrać subskrypcję, a następnie wybierz konto magazynu i nazwę kontenera z listy rozwijanej. Pozostaw Ścieżka jako domyślną. Ten krok nie jest potrzebny do lokalnych testów.
Opracuj UDF w programie Visual Studio
Możesz zaimplementować UDF w Visual Studio, używając plików CodeBehind w projekcie ASA, UDF z lokalnego projektu lub istniejącego pakietu z konta Azure. W poniższym przykładzie UDFTest to projekt biblioteki klasy C#, a ASAUDFDemo to projekt Azure Stream Analytics, który odnosi się do UDFTest.
W przypadku opcji CodeBehind zapisz funkcje zdefiniowane przez użytkownika w pliku Script.asql CodeBehind. Narzędzia programu Visual Studio automatycznie kompilują plik CodeBehind do postaci pliku zestawu. Narzędzia pakują asemblery jako plik zip i przesyłają je na twoje konto pamięci, gdy wysyłasz zadanie do Azure. Aby nauczyć się pisać UDF w C# za pomocą CodeBehind, skorzystaj z tutorialu dotyczącego zadań C# UDF for Stream Analytics Edge .
Stwórz nową bibliotekę klas .NET Standard w swoim rozwiązaniu.
Napisz kod w klasie. Zdefiniuj klasy jako publiczne , a obiekty jako statyczne publiczne.
Skompiluj projekt. Narzędzia pakują wszystkie artefakty z folderu bin do pliku zip i przesyłają plik zip na konto pamięci. Dla referencji zewnętrznych użyj referencji asemblera zamiast pakietu NuGet.
Odwołaj się do nowej klasy w projekcie usługi Azure Stream Analytics.
Dodaj nową funkcję w projekcie usługi Azure Stream Analytics.
Skonfiguruj ścieżkę asemblera w pliku konfiguracji zadania
JobConfig.json. Ustaw ścieżkę zestawu na Local Project Reference lub CodeBehind.Ponownie skompiluj zarówno projekt funkcji, jak i projekt usługi Azure Stream Analytics.
Skompiluj projekt C#, aby móc dodać odwołanie do funkcji UDF języka C# w zapytaniu usługi Azure Stream Analytics.
Dodaj odwołanie do projektu C# w projekcie ASA. Wybierz i przytrzymaj (lub kliknij prawym przyciskiem myszy) węzeł Referencje , a następnie wybierz Dodaj Referencję.
Wybierz z listy nazwę projektu języka C#.
Potwierdź, że UDFTest pojawia się w sekcji Referencje w Eksplorator rozwiązań.
Wybierz i przytrzymaj (lub kliknij prawym przyciskiem myszy) folder Functions , a następnie wybierz Nowy element.
Dodaj funkcję języka C# SquareFunction.json do projektu usługi Azure Stream Analytics.
Otwórz funkcję w Eksplorator rozwiązań, aby wyświetlić okno konfiguracyjne.
W konfiguracji funkcji języka C# wybierz pozycję Załaduj z listy rozwijanej Dokumentacja projektu ASA oraz powiązane nazwy zestawów, klas i metod. Aby odnieść się do metod, typów i funkcji w zapytaniu Stream Analytics, zdefiniuj klasy jako publiczne , a obiekty jako statyczne publiczne.
Konfiguruj istniejące pakiety standardowe UDF .NET
Możesz tworzyć standardowe UDF-y .NET w dowolnym IDE i wywoływać je z zapytania Azure Stream Analytics. Po przesłaniu pakietów zip asemblera na swoje konto Azure możesz korzystać z funkcji zapytań Azure Stream Analytics, włączając informacje o pamięci do konfiguracji zadania Stream Analytics. Nie możesz testować funkcji lokalnie tą opcją, ponieważ narzędzia Visual Studio nie pobierają twojego pakietu. Usługa analizuje ścieżkę pakietu bezpośrednio. Aby użyć istniejącego pakietu:
Skompiluj swój kod i spakuj wszystkie DLL, używając ścieżki
/UserCustomCode/CLR/*.Prześlij
UserCustomCode.zipdo rootu kontenera na swoim koncie Azure.W
JobConfig.jsonpliku konfiguracji zadania rozwiń sekcję User-Defined Code Configuration .Wypełnij konfigurację z poniższymi sugerowanymi wartościami.
Setting Sugerowana wartość Zasób globalnych ustawień pamięci masowej Wybieranie źródła danych z bieżącego konta Subskrypcja globalnych ustawień przechowywania < Twoja subskrypcja > Globalne ustawienia przechowywania - konto magazynowe < konto pamięci masowej > Zasób niestandardowych ustawień przechowywania kodu Wybieranie źródła danych z bieżącego konta Niestandardowe ustawienia magazynu kodu Konto magazynu < konto pamięci masowej > Niestandardowy kontener ustawień magazynu kodu < pojemnik magazynowy > Niestandardowe źródło zestawu kodu Istniejące pakiety montażowe z chmury Niestandardowe źródło zestawu kodu UserCustomCode.zip
Loguj niestandardowe informacje za pomocą klasy StreamingContext
Korzystając z mechanizmu rejestrowania, możesz rejestrować własne informacje podczas działania zadania. Używaj danych logowych do debugowania lub oceny poprawności niestandardowego kodu w czasie rzeczywistym. Użyj następujących kroków, aby opublikować i uzyskać dostęp do wiadomości dziennika:
Użyj
StreamingContextklasy do publikowania informacji diagnostycznych za pomocąStreamingDiagnostics.WriteErrorfunkcji. Poniższy kod pokazuje interfejs, który udostępnia Azure Stream Analytics.public abstract class StreamingContext { public abstract StreamingDiagnostics Diagnostics { get; } } public abstract class StreamingDiagnostics { public abstract void WriteError(string briefMessage, string detailedMessage); }Przekaż
StreamingContextjako parametr wejściowy do metody UDF i użyj go w funkcji UDF do publikowania niestandardowych informacji dziennika. W poniższym przykładzie elementMyUdfMethoddefiniuje wejście danych, które dostarcza zapytanie, oraz wejście context jakoStreamingContext, które dostarcza silnik uruchomieniowy.public static long MyUdfMethod(long data, StreamingContext context) { // write log context.Diagnostics.WriteError("User Log", "This is a log message"); return data; }Zadzwoń do UDF ze swojego zapytania. Nie musisz przekazywać
StreamingContextwartości w zapytaniu SQL, ponieważ Azure Stream Analytics automatycznie udostępnia obiekt kontekstu, jeśli parametr wejściowy jest obecny. Użycie słowaMyUdfMethodnie zmienia się, co pokazano w poniższym zapytaniu.SELECT udf.MyUdfMethod(input.value) as udfValue FROM inputUzyskaj dostęp do komunikatów dziennika w dziennikach diagnostycznych.
Treści powiązane
- Samouczek: pisanie funkcji zdefiniowanej przez użytkownika w języku C# dla zadania usługi Azure Stream Analytics (wersja zapoznawcza)
- Samouczek: funkcje zdefiniowane przez użytkownika w języku JavaScript usługi Azure Stream Analytics
- Tworzenie zadania usługi Azure Stream Analytics w programie Visual Studio Code