Criar uma solução de IoT com o Stream Analytics

Introdução

Nesta solução, vai aprender a utilizar o Azure Stream Analytics para obter informações em tempo real dos seus dados. Os programadores podem combinar facilmente fluxos de dados, como fluxos de cliques, registos e eventos gerados pelo dispositivo, com registos históricos ou dados de referência para derivar informações empresariais. Como um serviço de computação de fluxo em tempo real totalmente gerido alojado no Microsoft Azure, o Azure Stream Analytics fornece resiliência incorporada, baixa latência e escalabilidade para começar a trabalhar em minutos.

Depois de concluir esta solução, pode:

  • Familiarize-se com o portal do Azure Stream Analytics.
  • Configurar e implementar uma tarefa de transmissão em fluxo.
  • Articular problemas do mundo real e resolvê-los com a linguagem de consulta do Stream Analytics.
  • Desenvolva soluções de transmissão em fluxo para os seus clientes através do Stream Analytics com confiança.
  • Utilize a experiência de monitorização e registo para resolver problemas.

Pré-requisitos

Precisa dos seguintes pré-requisitos para concluir esta solução:

Introdução ao cenário: "Olá, Portagem!"

Uma portagem é um fenómeno comum. Encontramo-los em muitas vias rápidas, pontes e túneis em todo o mundo. Cada portagem tem várias portagens. Nas cabines manuais, paras para pagar a portagem a um atendedor. Nas cabines automatizadas, um sensor em cima de cada cabine digitaliza um cartão RFID que está afixado ao pára-brisas do seu veículo enquanto passa pela portagem. É fácil visualizar a passagem de veículos através destas estações de portagem como um fluxo de eventos sobre o qual podem ser realizadas operações interessantes.

Imagem de carros em portagens

Dados recebidos

Esta solução funciona com dois fluxos de dados. Sensores instalados na entrada e saída das estações de portagem produzem o primeiro riacho. O segundo fluxo é um conjunto de dados de pesquisa estático que tem dados de registo de veículos.

Fluxo de dados de entrada

O fluxo de dados de entrada contém informações sobre carros à medida que entram em estações de portagem. Os eventos de dados de saída são transmitidos em direto para um hub de eventos a partir de uma Aplicação Web incluída na aplicação de exemplo.

| TollID | EntryTime | LicensePlate | State | Make | Model | VehicleType | VehicleWeight | Toll | Tag |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 |2014-09-10 12:01:00.000 |JNB 7001 |NY |Honda |CRV |1 |0 |7 | |
| 1 |2014-09-10 12:02:00.000 |YXZ 1001 |NY |Toyota |Camry |1 |0 |4 |123456789 |
| 3 |2014-09-10 12:02:00.000 |ABC 1004 |CT |Ford |Taurus |1 |0 |5 |456789123 |
| 2 |2014-09-10 12:03:00.000 |XYZ 1003 |CT |Toyota |Corolla |1 |0 |4 | |
| 1 |2014-09-10 12:03:00.000 |BNJ 1007 |NY |Honda |CRV |1 |0 |5 |789123456 |
| 2 |2014-09-10 12:05:00.000 |CDE 1007 |NJ |Toyota |4x4 |1 |0 |6 |321987654 |

Eis uma breve descrição das colunas:

Coluna Descrição
TollID O ID da portagem que identifica exclusivamente uma portagem
EntryTime A data e hora de entrada do veículo na portagem em UTC
LicensePlate O número da matrícula do veículo
Estado Um estado no Estados Unidos
Criação O fabricante do automóvel
Modelação O número de modelo do automóvel
VehicleType 1 para veículos de passageiros ou 2 para veículos comerciais
WeightType Peso do veículo em toneladas; 0 para veículos de passageiros
Portagem O valor de portagem em USD
Etiqueta A etiqueta e no automóvel que automatiza o pagamento; em branco onde o pagamento foi feito manualmente

Sair do fluxo de dados

O fluxo de dados de saída contém informações sobre carros que saem da estação de portagem. Os eventos de dados de saída são transmitidos em direto para um hub de eventos a partir de uma Aplicação Web incluída na aplicação de exemplo.

TollId ExitTime LicensePlate
1 09-2014-10T12:03:00.0000000Z JNB 7001
1 09-2014-10T12:03:00.0000000Z YXZ 1001
3 09-2014-10T12:04:00.0000000Z ABC 1004
2 09-2014-10T12:07:00.0000000Z XYZ 1003
1 09-2014-10T12:08:00.0000000Z BNJ 1007
2 09-2014-10T12:07:00.0000000Z CDE 1007

Eis uma breve descrição das colunas:

Coluna Descrição
TollID O ID da portagem que identifica exclusivamente uma portagem
ExitTime A data e hora de saída do veículo da portagem em UTC
LicensePlate O número da matrícula do veículo

Dados de registo de veículos comerciais

A solução utiliza um instantâneo estático de uma base de dados de registo de veículos comerciais. Estes dados são guardados como um ficheiro JSON no armazenamento de blobs do Azure, incluído no exemplo.

LicensePlate RegistrationId Fora do prazo
SVT 6023 285429838 1
XLZ 3463 362715656 0
BAC 1005 876133137 1
RIV 8632 992711956 0
SNY 7188 592133890 0
ELH 9896 678427724 1

Eis uma breve descrição das colunas:

Coluna Descrição
LicensePlate O número da matrícula do veículo
RegistrationId O ID de registo do veículo
Fora do prazo O estado de registo do veículo: 0 se o registo do veículo estiver ativo, 1 se o registo expirar

Configurar o ambiente para o Azure Stream Analytics

Para concluir esta solução, precisa de uma subscrição do Microsoft Azure. Se não tiver uma conta do Azure, pode pedir uma versão de avaliação gratuita.

Certifique-se de que segue os passos na secção "Limpar a sua conta do Azure" no final deste artigo para que possa utilizar melhor o crédito do Azure.

Implementar o exemplo

Existem vários recursos que podem ser facilmente implementados num grupo de recursos, juntamente com alguns cliques. A definição da solução está alojada no repositório do GitHub em https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.

Implementar o modelo TollApp no portal do Azure

  1. Para implementar o ambiente tollApp no Azure, utilize esta ligação para Implementar o Modelo do Azure TollApp.

  2. Se lhe for pedido, inicie sessão no portal do Azure.

  3. Escolha a subscrição na qual os vários recursos são faturados.

  4. Especifique um novo grupo de recursos, com um nome exclusivo, por exemplo MyTollBooth.

  5. Selecione uma localização do Azure.

  6. Especifique um Intervalo como um número de segundos. Este valor é utilizado na aplicação Web de exemplo, para saber com que frequência enviar dados para um hub de eventos.

  7. Verifique se concorda com os termos e condições.

  8. Selecione Afixar ao dashboard para que possa localizar facilmente os recursos mais tarde.

  9. Selecione Comprar para implementar o modelo de exemplo.

  10. Após alguns momentos, é apresentada uma notificação para confirmar que a Implementação foi efetuada com êxito.

Rever os recursos do TollApp do Azure Stream Analytics

  1. Inicie sessão no portal do Azure.

  2. Localize o Grupo de Recursos que nomeou na secção anterior.

  3. Verifique se os seguintes recursos estão listados no grupo de recursos:

    • Uma Conta do Azure Cosmos DB
    • Uma Tarefa do Azure Stream Analytics
    • Uma Conta de Armazenamento do Azure
    • Um hub de eventos do Azure
    • Dois Aplicações Web

Examinar o trabalho do TollApp de exemplo

  1. A partir do grupo de recursos na secção anterior, selecione a tarefa de transmissão em fluxo do Stream Analytics a partir do nome tollapp (o nome contém carateres aleatórios para exclusividade).

  2. Na página Descrição geral da tarefa, repare na caixa Consulta para ver a sintaxe da consulta.

    SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*) AS Count
    INTO CosmosDB
    FROM EntryStream TIMESTAMP BY EntryTime
    GROUP BY TUMBLINGWINDOW(minute, 3), TollId
    

    Parafraseando a intenção da consulta, digamos que tem de contar o número de veículos que entram numa portagem. Como uma portagem de auto-estradas tem um fluxo contínuo de veículos entrando, estes são eventos de entrada são análogos a um riacho que nunca para. Para quantificar o fluxo, tem de definir um "período de tempo" para medir. Vamos refinar ainda mais a pergunta: "Quantos veículos entram numa portagem a cada três minutos?" Isto é geralmente referido como a contagem em cascata.

    Como pode ver, o Azure Stream Analytics utiliza uma linguagem de consulta semelhante ao SQL e adiciona algumas extensões para especificar aspetos relacionados com o tempo da consulta. Para obter mais detalhes, leia sobre as construções de Gestão de Tempo e Janela utilizadas na consulta.

  3. Examine as Entradas da tarefa de exemplo tollApp. Apenas a entrada EntryStream é utilizada na consulta atual.

    • A entrada EntryStream é uma ligação do hub de eventos que coloca os dados em fila que representam cada vez que um carro entra numa portagem na auto-estrada. Uma aplicação Web que faz parte do exemplo está a criar os eventos e esses dados estão em fila neste hub de eventos. Tenha em atenção que esta entrada é consultada na cláusula FROM da consulta de transmissão em fluxo.
    • A entrada ExitStream é uma ligação do hub de eventos que coloca os dados em fila que representam cada vez que um carro sai de uma portagem na auto-estrada. Esta entrada de transmissão em fluxo é utilizada em variações posteriores da sintaxe da consulta.
    • A entrada de registo é uma ligação de armazenamento de Blobs do Azure, que aponta para um ficheiro estático registration.json, utilizado para pesquisas conforme necessário. Esta entrada de dados de referência é utilizada em variações posteriores da sintaxe da consulta.
  4. Examine as Saídas da tarefa de exemplo tollApp.

    • A saída do Azure Cosmos DB é um contentor de base de dados do Azure Cosmos DB que recebe os eventos de sink de saída. Tenha em atenção que este resultado é utilizado na cláusula INTO da consulta de transmissão em fluxo.

Iniciar a tarefa de transmissão em fluxo da TollApp

Siga estes passos para iniciar a tarefa de transmissão em fluxo:

  1. Na página Descrição geral da tarefa, selecione Iniciar.

  2. No painel Iniciar tarefa , selecione Agora.

  3. Após alguns momentos, quando a tarefa estiver em execução, na página Descrição geral da tarefa de transmissão em fluxo, veja o Gráfico de monitorização . O gráfico deve mostrar vários milhares de eventos de entrada e dezenas de eventos de saída.

Rever os dados de saída do Azure Cosmos DB

  1. Localize o grupo de recursos que contém os recursos tollApp.

  2. Selecione a Conta do Azure Cosmos DB com o padrão de nome tollapp<random-cosmos>.

  3. Selecione o cabeçalho Data Explorer para abrir a página Data Explorer.

  4. Expanda o tollAppDatabase>tollAppCollection>Documents.

  5. Na lista de IDs, são apresentados vários documentos assim que o resultado estiver disponível.

  6. Selecione cada ID para rever o documento JSON. Repare em cada tollid, windowend timee a count of cars partir dessa janela.

  7. Após mais três minutos, está disponível outro conjunto de quatro documentos, um documento por tollid.

Reportar o tempo total de cada carro

O tempo médio necessário para um carro passar pela portagem ajuda a avaliar a eficiência do processo e a experiência do cliente.

Para encontrar o tempo total, associe o fluxo EntryTime à transmissão ExitTime. Associe os dois fluxos de entrada nas colunas TollId e LicencePlate correspondentes. O operador JOIN requer que especifique a margem de manobra temporal que descreve a diferença de tempo aceitável entre os eventos associados. Utilize a função DATEDIFF para especificar que os eventos não devem estar a mais de 15 minutos uns dos outros. Aplique também a função DATEDIFF aos tempos de saída e de entrada para calcular o tempo real que um carro passa na portagem. Tenha em atenção a diferença da utilização do DATEDIFF quando é utilizado numa instrução SELECT em vez de numa condição JOIN .

SELECT EntryStream.TollId, EntryStream.EntryTime, ExitStream.ExitTime, EntryStream.LicensePlate, DATEDIFF (minute, EntryStream.EntryTime, ExitStream.ExitTime) AS DurationInMinutes
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN ExitStream TIMESTAMP BY ExitTime
ON (EntryStream.TollId= ExitStream.TollId AND EntryStream.LicensePlate = ExitStream.LicensePlate)
AND DATEDIFF (minute, EntryStream, ExitStream ) BETWEEN 0 AND 15

Para atualizar a sintaxe da consulta da tarefa de transmissão em fluxo do TollApp:

  1. Na página Descrição geral da tarefa, selecione Parar.

  2. Aguarde alguns momentos pela notificação de que a tarefa parou.

  3. No cabeçalho TOPOLOGIA DA TAREFA, selecione <> Consulta

  4. Cole a consulta SQL de transmissão em fluxo ajustada.

  5. Selecione Guardar para guardar a consulta. Confirme Sim para guardar as alterações.

  6. Na página Descrição geral da tarefa, selecione Iniciar.

  7. No painel Iniciar tarefa , selecione Agora.

Rever o tempo total na saída

Repita os passos na secção anterior para rever os dados de saída do Azure Cosmos DB da tarefa de transmissão em fluxo. Reveja os documentos JSON mais recentes.

Por exemplo, este documento mostra um carro de exemplo com uma determinada matrícula, o entrytime campo calculado durationinminutes e exit time, e DATEDIFF que mostra a duração da portagem como dois minutos:

{
    "tollid": 4,
    "entrytime": "2018-04-05T06:51:39.0491173Z",
    "exittime": "2018-04-05T06:53:09.0491173Z",
    "licenseplate": "JVR 9425",
    "durationinminutes": 2,
    "id": "ff52eb25-d580-7566-2879-1f52bba6601e",
    "_rid": "+8E4AI1DZgBjAAAAAAAAAA==",
    "_self": "dbs/+8E4AA==/colls/+8E4AI1DZgA=/docs/+8E4AI1DZgBjAAAAAAAAAA==/",
    "_etag": "\"ad02f6b8-0000-0000-0000-5ac5c8330000\"",
    "_attachments": "attachments/",
    "_ts": 1522911283
}

Reportar veículos com registo expirado

O Azure Stream Analytics pode utilizar instantâneos estáticos de dados de referência para associar a fluxos de dados temporais. Para demonstrar esta capacidade, utilize a seguinte pergunta de exemplo. A entrada Registo é um ficheiro json de blob estático que lista as expirações das etiquetas de licença. Ao aderir à matrícula, os dados de referência são comparados com cada veículo que passa pela portagem.

Se um veículo comercial estiver registado na empresa de portagens, pode passar pela portagem sem ser parado para inspeção. Utilize a tabela de referência de registo para identificar todos os veículos comerciais com registos expirados.

SELECT EntryStream.EntryTime, EntryStream.LicensePlate, EntryStream.TollId, Registration.RegistrationId
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN Registration
ON EntryStream.LicensePlate = Registration.LicensePlate
WHERE Registration.Expired = '1'
  1. Repita os passos na secção anterior para atualizar a sintaxe da consulta da tarefa de transmissão em fluxo tollApp.

  2. Repita os passos na secção anterior para rever os dados de saída do Azure Cosmos DB da tarefa de transmissão em fluxo.

Exemplo de saída:

    {
        "entrytime": "2018-04-05T08:01:28.0252168Z",
        "licenseplate": "GMT 3221",
        "tollid": 1,
        "registrationid": "763220582",
        "id": "47db0535-9716-4eb2-db58-de7886966cbf",
        "_rid": "y+F8AJ9QWACSAQAAAAAAAA==",
        "_self": "dbs/y+F8AA==/colls/y+F8AJ9QWAA=/docs/y+F8AJ9QWACSAQAAAAAAAA==/",
        "_etag": "\"88007d8d-0000-0000-0000-5ac5d7e20000\"",
        "_attachments": "attachments/",
        "_ts": 1522915298
    }

Aumentar horizontalmente a tarefa

O Azure Stream Analytics foi concebido para dimensionar de forma elástica para que possa processar grandes volumes de dados. A consulta do Azure Stream Analytics pode utilizar uma cláusula PARTITION BY para indicar ao sistema que este passo aumenta horizontalmente. PartitionId é uma coluna especial que o sistema adiciona para corresponder ao ID de partição da entrada (hub de eventos).

Para aumentar horizontalmente a consulta para partições, edite a sintaxe da consulta para o seguinte código:

SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*)AS Count
INTO CosmosDB
FROM EntryStream
TIMESTAMP BY EntryTime
PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId

Para aumentar verticalmente a tarefa de transmissão em fluxo para mais unidades de transmissão em fluxo:

  1. Pare a tarefa atual.

  2. Atualize a sintaxe da consulta na <> página Consulta e guarde as alterações.

  3. No cabeçalho CONFIGURAR na tarefa de transmissão em fluxo, selecione Dimensionar.

  4. Deslize o controlo de deslize Unidades de transmissão em fluxo de 1 para 6. As unidades de transmissão em fluxo definem a quantidade de poder de computação que a tarefa pode receber. Selecione Guardar.

  5. Inicie a tarefa de transmissão em fluxo para demonstrar a escala adicional. O Azure Stream Analytics distribui o trabalho por mais recursos de computação e obtém um melhor débito, partindo o trabalho entre recursos com a coluna designada na cláusula PARTITION BY.

Monitorizar a tarefa

A área MONITOR contém estatísticas sobre a tarefa em execução. A configuração pela primeira vez é necessária para utilizar a conta de armazenamento na mesma região (número de nomes como o resto deste documento).

Monitorização de tarefas do Azure Stream Analytics

Também pode aceder aos Registos de Atividades a partir da área Definições do dashboard de tarefas .

Limpar os recursos do TollApp

  1. Pare a tarefa do Stream Analytics no portal do Azure.

  2. Localize o grupo de recursos que contém oito recursos relacionados com o modelo TollApp.

  3. Selecione Eliminar grupo de recursos. Escreva o nome do grupo de recursos para confirmar a eliminação.

Conclusão

Esta solução introduziu-o no serviço Azure Stream Analytics. Demonstrou como configurar entradas e saídas para a tarefa do Stream Analytics. Ao utilizar o cenário Dados de Portagem, a solução explicou tipos comuns de problemas que surgem no espaço de dados em movimento e como podem ser resolvidos com consultas simples semelhantes a SQL no Azure Stream Analytics. A solução descreveu as construções da extensão SQL para trabalhar com dados temporais. Mostrou como associar fluxos de dados, como enriquecer o fluxo de dados com dados de referência estáticos e como aumentar horizontalmente uma consulta para obter um débito mais elevado.

Embora esta solução proporcione uma boa introdução, não está concluída por qualquer meio. Pode encontrar mais padrões de consulta com a linguagem SAQL em Exemplos de consulta para padrões de utilização comuns do Stream Analytics.