Tworzenie funkcji zdefiniowanych przez użytkownika platformy .NET Standard dla zadań usługi Azure Stream Analytics (Wycofane)

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.

  1. Stwórz nową bibliotekę klas .NET Standard na swoim lokalnym komputerze.

    Zrzut ekranu projektu Azure Stream Analytics w Visual Studio Code.

  2. 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;
            }
        }
    }
    
  3. 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.

    Zrzut ekranu dodawania nowej funkcji w projekcie Azure Stream Analytics.

  4. Dodaj funkcję języka C# SquareFunction do projektu usługi Azure Stream Analytics.

    Zrzut ekranu wyboru funkcji C# z projektu Stream Analytics w VS Code.

  5. Wprowadź nazwę funkcji w C#.

    Zrzut ekranu wprowadzania nazwy funkcji w C# w Visual Studio Code.

  6. 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.

    Zrzut ekranu konfiguracji funkcji C# w Stream Analytics w VS Code.

  7. 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ę.

    Zrzut ekranu konfiguracji funkcji C# w Stream Analytics dla biblioteki DLL.

  8. Wywołaj funkcję zdefiniowaną przez użytkownika w zapytaniu Azure Stream Analytics.

     SELECT price, udf.SquareFunction(price)
     INTO Output
     FROM Input 
    
  9. Skonfiguruj ścieżkę asemblera w pliku konfiguracyjnym zadania JobConfig.json , w sekcji CustomCodeStorage . Ten krok nie jest potrzebny do lokalnych testów.

  10. Przed przesłaniem zadania do Azure, skonfiguruj ścieżkę pakietu w JobConfig.json pliku 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.

    Zrzut ekranu konfigurujący konto pamięci dla funkcji C# w Stream Analytics.

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 .

  1. Stwórz nową bibliotekę klas .NET Standard w swoim rozwiązaniu.

    Zrzut ekranu projektu Azure Stream Analytics IoT Edge z Visual Studio.

  2. Napisz kod w klasie. Zdefiniuj klasy jako publiczne , a obiekty jako statyczne publiczne.

  3. 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.

  4. Odwołaj się do nowej klasy w projekcie usługi Azure Stream Analytics.

  5. Dodaj nową funkcję w projekcie usługi Azure Stream Analytics.

  6. Skonfiguruj ścieżkę asemblera w pliku konfiguracji zadania JobConfig.json . Ustaw ścieżkę zestawu na Local Project Reference lub CodeBehind.

  7. Ponownie skompiluj zarówno projekt funkcji, jak i projekt usługi Azure Stream Analytics.

  8. Skompiluj projekt C#, aby móc dodać odwołanie do funkcji UDF języka C# w zapytaniu usługi Azure Stream Analytics.

    Zrzut ekranu z tworzenia projektu Azure Stream Analytics IoT Edge w Visual Studio.

  9. 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ę.

    Zrzut ekranu dodawania odniesienia do projektu C# w Visual Studio.

  10. Wybierz z listy nazwę projektu języka C#.

    Zrzut ekranu wyboru nazwy projektu w C# z listy referencyjnej w Visual Studio.

  11. Potwierdź, że UDFTest pojawia się w sekcji Referencje w Eksplorator rozwiązań.

    Zrzut ekranu referencyjnej funkcji zdefiniowanej przez użytkownika w Eksplorator rozwiązań w Visual Studio.

  12. Wybierz i przytrzymaj (lub kliknij prawym przyciskiem myszy) folder Functions , a następnie wybierz Nowy element.

    Zrzut ekranu dodawania nowego elementu do Functions w rozwiązaniu Azure Stream Analytics Edge.

  13. Dodaj funkcję języka C# SquareFunction.json do projektu usługi Azure Stream Analytics.

    Zrzut ekranu wyboru funkcji C# z elementów Stream Analytics Edge w Visual Studio.

  14. Otwórz funkcję w Eksplorator rozwiązań, aby wyświetlić okno konfiguracyjne.

    Zrzut ekranu konfiguracyjnego funkcji C# w Visual Studio.

  15. 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.

    Zrzut ekranu konfiguracji funkcji C# w Stream Analytics z referencją projektu ASA w Visual Studio.

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:

  1. Skompiluj swój kod i spakuj wszystkie DLL, używając ścieżki /UserCustomCode/CLR/*.

  2. Prześlij UserCustomCode.zip do rootu kontenera na swoim koncie Azure.

  3. W JobConfig.json pliku konfiguracji zadania rozwiń sekcję User-Defined Code Configuration .

  4. 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:

  1. Użyj StreamingContext klasy do publikowania informacji diagnostycznych za pomocą StreamingDiagnostics.WriteError funkcji. 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);
    }
    
  2. Przekaż StreamingContext jako parametr wejściowy do metody UDF i użyj go w funkcji UDF do publikowania niestandardowych informacji dziennika. W poniższym przykładzie element MyUdfMethod definiuje wejście danych, które dostarcza zapytanie, oraz wejście context jako StreamingContext, 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;
    }
    
  3. Zadzwoń do UDF ze swojego zapytania. Nie musisz przekazywać StreamingContext wartości w zapytaniu SQL, ponieważ Azure Stream Analytics automatycznie udostępnia obiekt kontekstu, jeśli parametr wejściowy jest obecny. Użycie słowa MyUdfMethod nie zmienia się, co pokazano w poniższym zapytaniu.

    SELECT udf.MyUdfMethod(input.value) as udfValue FROM input
    
  4. Uzyskaj dostęp do komunikatów dziennika w dziennikach diagnostycznych.