Partycjonowanie niestandardowych obiektów blob w usłudze Azure Stream Analytics

Usługa Azure Stream Analytics obsługuje partycjonowanie niestandardowych danych wyjściowych obiektów blob z niestandardowymi polami lub atrybutami i niestandardowymi wzorcami ścieżki daty/godziny.

Pole niestandardowe lub atrybuty

Niestandardowe atrybuty pól lub danych wejściowych usprawniają podrzędne przepływy pracy przetwarzania danych i raportowania, umożliwiając większą kontrolę nad danymi wyjściowymi.

Opcje klucza partycji

Klucz partycji lub nazwa kolumny używane do partycjonowania danych wejściowych może zawierać dowolny znak akceptowany dla nazw obiektów blob. Nie można używać pól zagnieżdżonych jako klucza partycji, chyba że jest używany w połączeniu z aliasami, ale można użyć niektórych znaków do utworzenia hierarchii plików. Możesz na przykład użyć następującego zapytania, aby utworzyć kolumnę łączącą dane z dwóch innych kolumn w celu utworzenia unikatowego klucza partycji.

SELECT name, id, CONCAT(name, "/", id) AS nameid

Klucz partycji musi być NVARCHAR(MAX), BIGINT, FLOAT lub BIT (poziom zgodności 1.2 lub wyższy). Typy DateTime, Array i Records nie są obsługiwane, ale mogą być używane jako klucze partycji, jeśli są konwertowane na ciągi. Aby uzyskać więcej informacji, zobacz Typy danych usługi Azure Stream Analytics.

Przykład

Załóżmy, że zadanie pobiera dane wejściowe z sesji użytkownika na żywo połączonych z zewnętrzną usługą gier wideo, w której pozyskane dane zawierają kolumnę client_id w celu zidentyfikowania sesji. Aby partycjonować dane według client_id, ustaw pole Wzorzec ścieżki obiektu blob, aby uwzględnić token partycji {client_id} we właściwościach danych wyjściowych obiektu blob podczas tworzenia zadania. Ponieważ dane z różnymi wartościami client_id przepływają przez zadanie usługi Stream Analytics, dane wyjściowe są zapisywane w osobnych folderach na podstawie pojedynczej client_id wartości na folder.

Wzorzec ścieżki z identyfikatorem klienta

Podobnie, jeśli dane wejściowe zadania były danymi czujników z milionów czujników, w których każdy czujnik miał sensor_id, wzorzec ścieżki to {sensor_id} , aby podzielić poszczególne dane czujnika na różne foldery.

W przypadku korzystania z interfejsu API REST sekcja danych wyjściowych pliku JSON używanego dla tego żądania może wyglądać jak na poniższej ilustracji:

Dane wyjściowe interfejsu API REST

Po uruchomieniu clients zadania kontener może wyglądać jak na poniższej ilustracji:

Kontener klientów

Każdy folder może zawierać wiele obiektów blob, w których każdy obiekt blob zawiera co najmniej jeden rekord. W powyższym przykładzie w folderze o nazwie "060000000" znajduje się pojedynczy obiekt blob z następującą zawartością:

Zawartość obiektu blob

Zwróć uwagę, że każdy rekord w obiekcie blob ma kolumnę client_id zgodną z nazwą folderu, ponieważ kolumna używana do partycjonowania danych wyjściowych w ścieżce wyjściowej została client_id.

Ograniczenia

  1. Tylko jeden niestandardowy klucz partycji jest dozwolony we właściwości wyjściowej wzorzec ścieżki. Wszystkie następujące wzorce ścieżek są prawidłowe:

    • cluster1/{date}/{aFieldInMyData}
    • cluster1/{time}/{aFieldInMyData}
    • cluster1/{aFieldInMyData}
    • cluster1/{date}/{time}/{aFieldInMyData}
  2. Jeśli klienci chcą użyć więcej niż jednego pola wejściowego, mogą utworzyć klucz złożony w zapytaniu o niestandardową partycję ścieżki w danych wyjściowych obiektu blob przy użyciu narzędzia CONCAT. Na przykład: wybierz pozycję concat (col1, col2) jako wartość compositeColumn w obiekcie blobOutput z danych wejściowych. Następnie mogą określić wartość compositeColumn jako ścieżkę niestandardową w magazynie obiektów blob.

  3. Klucze partycji są niewrażliwe na wielkość liter, więc klucze partycji, takie jak John i john , są równoważne. Ponadto nie można używać wyrażeń jako kluczy partycji. Na przykład kolumna {columnA + columnB} nie działa.

  4. Gdy strumień wejściowy składa się z rekordów z kardynalnością klucza partycji poniżej 8000 roku, rekordy są dołączane do istniejących obiektów blob i tworzą nowe obiekty blob tylko w razie potrzeby. Jeśli kardynalność wynosi ponad 8000, nie ma gwarancji, że istniejące obiekty blob zostaną zapisane, a nowe obiekty blob nie zostaną utworzone dla dowolnej liczby rekordów z tym samym kluczem partycji.

  5. Jeśli dane wyjściowe obiektu blob są konfigurowane jako niezmienne, usługa Stream Analytics tworzy nowy obiekt blob przy każdym wysłaniu danych.

Niestandardowe wzorce ścieżki datetime

Niestandardowe wzorce ścieżek datetime umożliwiają określenie formatu wyjściowego zgodnego z konwencjami przesyłania strumieniowego Hive, dzięki czemu usługa Azure Stream Analytics może wysyłać dane do usług Azure HDInsight i Azure Databricks na potrzeby przetwarzania podrzędnego. Niestandardowe wzorce ścieżki daty/godziny można łatwo zaimplementować przy użyciu datetime słowa kluczowego w polu Prefiks ścieżki danych wyjściowych obiektu blob wraz z specyfikatorem formatu. Na przykład {datetime:yyyy}.

Obsługiwane tokeny

Następujące tokeny specyfikatora formatu mogą być używane samodzielnie lub w połączeniu w celu osiągnięcia niestandardowych formatów DateTime:

Specyfikator formatu Opis Wyniki dla przykładowego czasu 2018-01-02T10:06:08
{datetime:yyyy} Rok jako liczba czterocyfrowa 2018
{datetime:MM} Miesiąc od 01 do 12 01
{datetime:M} Miesiąc od 1 do 12 1
{datetime:dd} Dzień od 01 do 31 02
{datetime:d} Dzień od 1 do 31 2
{datetime:HH} Godzina przy użyciu formatu 24-godzinnego z zakresu od 00 do 23 10
{datetime:mm} Minuty od 00 do 60 06
{datetime:m} Minuty od 0 do 60 6
{datetime:ss} Sekundy od 00 do 60 08

Jeśli nie chcesz używać niestandardowych wzorców daty/godziny, możesz dodać token {date} i/lub {time} do prefiksu ścieżki, aby wygenerować listę rozwijaną z wbudowanymi formatami DateTime.

Stare formaty DateTime usługi Stream Analytics

Rozszerzalność i ograniczenia

Do osiągnięcia limitu znaków prefiksu ścieżki można użyć tylu tokenów, {datetime:<specifier>}jak chcesz w przypadku wzorca ścieżki. Specyfikatory formatu nie mogą być łączone w ramach pojedynczego tokenu poza kombinacjami wymienionymi już na listach rozwijanych daty i godziny.

Dla partycji ścieżki :logs/MM/dd

Prawidłowe wyrażenie Nieprawidłowe wyrażenie
logs/{datetime:MM}/{datetime:dd} logs/{datetime:MM/dd}

W prefiksie ścieżki można użyć tego samego specyfikatora formatu wiele razy. Token musi być powtarzany za każdym razem.

Konwencje przesyłania strumieniowego Hive

Niestandardowe wzorce ścieżek dla magazynu obiektów blob mogą być używane z konwencją przesyłania strumieniowego Hive, która oczekuje, że foldery zostaną oznaczone etykietą column= w nazwie folderu.

Na przykład year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}.

Niestandardowe dane wyjściowe eliminują problemy ze zmianą tabel i ręczne dodawanie partycji do danych portów między usługą Azure Stream Analytics i usługą Hive. Zamiast tego wiele folderów można dodawać automatycznie przy użyciu:

MSCK REPAIR TABLE while hive.exec.dynamic.partition true

Przykład

Utwórz konto magazynu, grupę zasobów, zadanie usługi Stream Analytics i źródło danych wejściowych zgodnie z przewodnikiem Szybki start dotyczącym usługi Azure Stream Analytics Azure Portal. Użyj tych samych przykładowych danych używanych w przewodniku Szybki start, które są również dostępne w witrynie GitHub.

Utwórz ujście danych wyjściowych obiektu blob z następującą konfiguracją:

Tworzenie ujścia danych wyjściowych obiektu blob w usłudze Stream Analytics

Wzorzec pełnej ścieżki jest następujący:

year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Po uruchomieniu zadania struktura folderów oparta na wzorcu ścieżki jest tworzona w kontenerze obiektów blob. Możesz przejść do szczegółów na poziomie dnia.

Dane wyjściowe obiektu blob usługi Stream Analytics z niestandardowym wzorcem ścieżki

Następne kroki