Zpracování datových proudů IoT v reálném čase pomocí Azure Stream Analytics

V tomto článku se dozvíte, jak vytvořit logiku zpracování datových proudů pro shromažďování dat ze zařízení Internetu věcí (IoT). Pomocí skutečného případu použití Internetu věcí (IoT) předvedete, jak rychle a hospodárně sestavit řešení.

Požadavky

Scenario

Contoso, společnost v oblasti průmyslové automatizace, automatizovala svůj výrobní proces. Stroje v továrně společnosti mají snímače, které dokáží vysílat datové proudy v reálném čase. V tomto scénáři chce manažer provozovny v reálném čase získávat informace na základě dat ze senzorů, hledat jejich pomocí různé vzorce a na jejich základě provádět potřebné akce. Pomocí jazyka SAQL (Stream Analytics Query Language) můžete nad daty snímačů najít zajímavé vzory z příchozího datového proudu.

V tomto příkladu se data vygenerují ze zařízení se značkou snímače Texas Instruments. Datová část dat je ve formátu JSON, jak je znázorněno v následujícím ukázkovém fragmentu kódu:

{
    "time": "2016-01-26T20:47:53.0000000",  
    "dspl": "sensorE",  
    "temp": 123,  
    "hmdt": 34  
}  

V podobném scénáři z reálného prostředí by se jednalo o stovky podobných snímačů generujících události jako datový proud. V ideálním případě by bylo také nainstalováno nějaké zařízení sloužící jako brána k odesílání událostí do služby Azure Event Hubs nebo Azure IoT Hubs. Vaše úloha Stream Analytics by tyto události ingestovala ze služby Event Hubs nebo IoT Hubs a spouštěla na streamy analytické dotazy v reálném čase. Poté můžete výsledky odeslat do jednoho z podporovaných výstupů.

Pro snadnější použití tato příručka Začínáme poskytuje soubor ukázkových dat, která byla zaznamenána skutečnými zařízeními SensorTag. Na těchto ukázkových datech můžete spouštět dotazy a zobrazit výsledky. V dalších kurzech se naučíte připojit úlohu ke vstupům a výstupům a nasadit je do služby Azure.

Vytvoření úlohy Stream Analytics

  1. Přejděte na Azure Portal.

  2. V levé navigační nabídce vyberte Všechny služby, vyberte Analytics, najeďte myší na úlohy Stream Analytics a pak vyberte Vytvořit.

    Snímek obrazovky znázorňující výběr tlačítka Vytvořit pro úlohu Stream Analytics

  3. Na stránce Nová úloha Stream Analytics postupujte takto:

    1. V části Předplatné vyberte své předplatné Azure.

    2. V části Skupina prostředků vyberte existující skupinu prostředků nebo vytvořte skupinu prostředků.

    3. Do pole Název zadejte jedinečný název úlohy Stream Analytics.

    4. Vyberte oblast , ve které chcete nasadit úlohu Stream Analytics. Použijte stejné umístění pro skupinu prostředků a všechny prostředky, abyste zvýšili rychlost zpracování a snížili náklady.

    5. Vyberte Zkontrolovat a vytvořit.

      Snímek obrazovky se stránkou Nová úloha Stream Analytics

  4. Na stránce Zkontrolovat a vytvořit zkontrolujte nastavení a vyberte Vytvořit.

  5. Po úspěšném nasazení vyberte Přejít k prostředku a přejděte na stránku úlohy Stream Analytics pro vaši úlohu Stream Analytics.

Vytvoření dotazu služby Stream Analytics

Po vytvoření úlohy napište dotaz. Dotazy můžete testovat s ukázkovými daty bez připojení vstupu nebo výstupu k úloze.

  1. Stáhněte si soubor HelloWorldASA-InputStream.json z GitHubu.

  2. Na stránce úlohy Azure Stream Analytics v Azure Portal v nabídce vlevo v části Topologie úlohy vyberte Dotaz.

  3. Vyberte Nahrát ukázkový vstup, vyberte HelloWorldASA-InputStream.json soubor, který jste stáhli, a vyberte OK.

    Snímek obrazovky se stránkou **Dotaz** s vybranou možností **Nahrát ukázkový vstup***

  4. Všimněte si, že v tabulce Náhled vstupu se automaticky vyplní náhled dat.

    Snímek obrazovky znázorňující ukázková vstupní data na kartě Náhled vstupu

Dotaz: Archivace nezpracovaných dat

Nejjednodušším typem dotazu je průchozí dotaz, který archivuje veškerá vstupní data do definovaného výstupního umístění. Tento dotaz je výchozí dotaz vyplněný v nové úloze Azure Stream Analytics.

  1. V okně Dotaz zadejte následující dotaz a pak na panelu nástrojů vyberte Testovat dotaz .

    SELECT
        *
    INTO
        youroutputalias
    FROM
        yourinputalias
    
  2. Prohlédněte si výsledky na kartě Výsledky testu v dolním podokně.

    Snímek obrazovky znázorňující ukázkový dotaz a jeho výsledky

Dotaz: Filtrování dat na základě podmínky

Pojďme aktualizovat dotaz tak, aby filtruje výsledky na základě podmínky. Například následující dotaz zobrazuje události, které pocházejí z sensorA.

  1. Aktualizujte dotaz pomocí následující ukázky:

    SELECT 
        time,
        dspl AS SensorName,
        temp AS Temperature,
        hmdt AS Humidity
    INTO
       youroutputalias
    FROM
        yourinputalias
    WHERE dspl='sensorA'
    
  2. Pokud chcete zobrazit výsledky dotazu, vyberte Testovat dotaz.

    Snímek obrazovky s výsledky dotazu s filtrem

Dotaz: Upozornění spouštějící pracovní postup společnosti

Vytvoříme podrobnější dotaz. Pro každý typ snímače chceme monitorovat průměrnou teplotu v 30sekundovém intervalu a výsledky zobrazit pouze v případě, že teplota překročí 100 stupňů.

  1. Aktualizujte dotaz na:

    SELECT 
        System.Timestamp AS OutputTime,
        dspl AS SensorName,
        Avg(temp) AS AvgTemperature
    INTO
       youroutputalias
    FROM
        yourinputalias TIMESTAMP BY time
    GROUP BY TumblingWindow(second,30),dspl
    HAVING Avg(temp)>100
    
  2. Pokud chcete zobrazit výsledky dotazu, vyberte Testovat dotaz.

    Snímek obrazovky zobrazující dotaz s přeskakovacím oknem

    Měli byste vidět výsledky, které obsahují pouze 245 řádků a názvy senzorů, u kterých je průměrná teplota větší než 100. Tento dotaz seskupí toky událostí podle hodnoty dspl, což je název snímače, a pomocí 30sekundového přeskakujícího okna. Dočasné dotazy musí uvádět, jak chcete postupovat. Pomocí klauzule TIMESTAMP BY jste zadali sloupec OUTPUTTIME pro přidružení časů ke všem dočasným výpočtům. Podrobné informace najdete v článku Správa času a funkce pro vytváření oken.

Dotaz: Zjištění neexistence událostí

Jak napsat dotaz, abychom dokázali najít chybějící vstupní události? Pojďme zjistit, kdy naposledy senzor odeslal data a pak neposílal události po dobu dalších 5 sekund.

  1. Aktualizujte dotaz na:

    SELECT 
        t1.time,
        t1.dspl AS SensorName
    INTO
       youroutputalias
    FROM
        yourinputalias t1 TIMESTAMP BY time
    LEFT OUTER JOIN yourinputalias t2 TIMESTAMP BY time
    ON
        t1.dspl=t2.dspl AND
        DATEDIFF(second,t1,t2) BETWEEN 1 and 5
    WHERE t2.dspl IS NULL
    
  2. Pokud chcete zobrazit výsledky dotazu, vyberte Testovat dotaz.

    Snímek obrazovky znázorňující dotaz, který detekuje absenci událostí

    V dotazu se používá příkaz LEFT OUTER JOIN na stejný datový proud (spojení sama na sebe). Při použití příkazu INNER JOIN se vrátí výsledek, pouze když je nalezena shoda. Příkaz LEFT OUTER JOIN však v případě, že pro událost z levé strany spojení není nalezena shoda, vrátí řádek s hodnotami NULL pro všechny sloupce pravé strany. Tato technika je užitečná k nalezení chybějících událostí. Další informace najdete v tématu JOIN.

Závěr

Účelem tohoto článku je ukázat, jak psát různé dotazy v jazyce Stream Analytics Query Language a zobrazit výsledky v prohlížeči. Tento článek vám ale pomůže začít. Stream Analytics podporuje různé vstupy a výstupy a může dokonce používat funkce ve službě Azure Machine Learning, aby se z ní udělal robustní nástroj pro analýzu datových proudů. Další informace o tom, jak psát dotazy, najdete v článku o běžných vzorech dotazů.