Partilhar via


Crie uma solução de IoT usando o Stream Analytics

Introdução

Nesta solução, você aprende a usar o Azure Stream Analytics para obter informações em tempo real de seus dados. Os desenvolvedores podem combinar facilmente fluxos de dados, como fluxos de cliques, logs e eventos gerados por dispositivos, com registros históricos ou dados de referência para obter insights de negócios. Como um serviço de computação de fluxo em tempo real totalmente gerenciado hospedado no Microsoft Azure, o Azure Stream Analytics fornece resiliência interna, baixa latência e escalabilidade para que você comece a trabalhar em minutos.

Depois de concluir esta solução, você é capaz de:

  • Familiarize-se com o portal do Azure Stream Analytics.
  • Configure e implante um trabalho de streaming.
  • Articule problemas do mundo real e resolva-os usando a linguagem de consulta do Stream Analytics.
  • Desenvolva soluções de streaming para seus clientes usando o Stream Analytics com confiança.
  • Use a experiência de monitoramento e registro em log para solucionar problemas.

Pré-requisitos

Você precisa dos seguintes pré-requisitos para concluir esta solução:

Introdução do cenário: "Olá, Toll!"

Uma portagem é um fenómeno comum. Você os encontra em muitas vias expressas, pontes e túneis em todo o mundo. Cada estação de pedágio tem várias cabines de pedágio. Nas cabines manuais, você para para pagar o pedágio a um atendente. Nas cabines automatizadas, um sensor no topo de cada cabine escaneia um cartão RFID que é afixado no para-brisa do seu veículo quando você passa pela cabine de pedágio. É fácil visualizar a passagem de veículos por essas estações de pedágio como um fluxo de eventos sobre o qual operações interessantes podem ser realizadas.

Imagem de carros em cabines de pedágio

Dados recebidos

Esta solução funciona com dois fluxos de dados. Sensores instalados na entrada e saída das praças de pedágio produzem o primeiro fluxo. O segundo fluxo é um conjunto de dados de pesquisa estático com dados de registo de veículos.

Fluxo de dados de entrada

O fluxo de dados de entrada contém informações sobre os carros à medida que entram nas estações de pedágio. Os eventos de dados de saída são transmitidos ao vivo para um hub de eventos a partir de um aplicativo Web incluído no aplicativo 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 |

Aqui está uma breve descrição das colunas:

Column Description
Identificação de Pedágio O ID da cabine de pedágio que identifica exclusivamente uma cabine de pedágio
EntryTime A data e hora de entrada do veículo na cabine de pedágio em UTC
Matrícula O número da matrícula do veículo
Estado Um estado nos Estados Unidos
Criar O fabricante do automóvel
Modelo O número do modelo do automóvel
VehicleType 1 para veículos de passageiros ou 2 para veículos comerciais
Tipo de Peso Peso do veículo em toneladas; 0 para veículos de passageiros
Conte-nos O valor do pedágio em USD
Etiqueta O e-Tag 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 os carros que saem da estação de pedágio. Os eventos de dados de saída são transmitidos ao vivo para um hub de eventos a partir de um aplicativo Web incluído no aplicativo de exemplo.

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

Aqui está uma breve descrição das colunas:

Column Description
Identificação de Pedágio O ID da cabine de pedágio que identifica exclusivamente uma cabine de pedágio
ExitTime A data e hora de saída do veículo da cabine de pedágio em UTC
Matrícula O número da matrícula do veículo

Dados relativos ao 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. Esses dados são salvos como um arquivo JSON no armazenamento de blob do Azure, incluído no exemplo.

Matrícula ID de Registo 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

Aqui está uma breve descrição das colunas:

Column Description
Matrícula O número da matrícula do veículo
ID de Registo O ID de matrícula do veículo
Fora do prazo A situação de matrícula do veículo: 0 se o registo do veículo estiver ativo, 1 se o registo tiver caducado

Configurar o ambiente para o Azure Stream Analytics

Para concluir essa solução, você precisa de uma assinatura do Microsoft Azure. Se não tiver uma conta do Azure, pode solicitar uma versão de avaliação gratuita.

Certifique-se de seguir as etapas na seção "Limpar sua conta do Azure" no final deste artigo para que você possa fazer o melhor uso do seu crédito do Azure.

Implantar o exemplo

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

Implantar o modelo TollApp no portal do Azure

  1. Para implantar o ambiente TollApp no Azure, use este link para Implantar o Modelo do Azure TollApp.

  2. Entre no portal do Azure, se solicitado.

  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. Esse valor é usado no aplicativo 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 Fixar no painel para que você possa localizar facilmente os recursos mais tarde.

  9. Selecione Comprar para implantar o modelo de exemplo.

  10. Após alguns momentos, uma notificação aparece para confirmar que a implantação foi bem-sucedida.

Analise os recursos do Azure Stream Analytics TollApp

  1. Inicie sessão no portal do Azure.

  2. Localize o Grupo de Recursos que você nomeou na seção anterior.

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

    • Uma conta do Azure Cosmos DB
    • Um trabalho do Azure Stream Analytics
    • Uma conta de armazenamento do Azure
    • Um hub de eventos do Azure
    • Duas aplicações Web

Examine o exemplo de trabalho do TollApp

  1. A partir do grupo de recursos na seção anterior, selecione o trabalho de streaming do Stream Analytics começando com o nome tollapp (o nome contém caracteres aleatórios para exclusividade).

  2. Na página Visão geral do trabalho, observe a caixa Consulta para exibir 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 você precise contar o número de veículos que entram em uma cabine de pedágio. Como uma cabine de pedágio tem um fluxo contínuo de veículos entrando, esses são eventos de entrada análogos a um fluxo que nunca para. Para quantificar o fluxo, você tem que definir um "período de tempo" para medir. Vamos refinar ainda mais a pergunta, para "Quantos veículos entram em uma cabine de pedágio a cada três minutos?" Isso é comumente referido como a contagem de queda.

    Como você pode ver, o Azure Stream Analytics usa uma linguagem de consulta semelhante ao SQL e adiciona algumas extensões para especificar aspetos relacionados ao tempo da consulta. Para obter mais detalhes, leia sobre as construções de Gerenciamento de Tempo e Janelas usadas na consulta.

  3. Examine as entradas do trabalho de exemplo do TollApp. Somente a entrada EntryStream é usada na consulta atual.

    • A entrada EntryStream é uma conexão de hub de eventos que enfileira dados que representam cada vez que um carro entra em um pedágio na rodovia. Um aplicativo Web que faz parte do exemplo está criando os eventos e esses dados são enfileirados nesse hub de eventos. Observe que essa entrada é consultada na cláusula FROM da consulta de streaming.
    • A entrada ExitStream é uma conexão de hub de eventos que enfileira dados que representam cada vez que um carro sai de um pedágio na rodovia. Essa entrada de streaming é usada em variações posteriores da sintaxe da consulta.
    • A entrada de registro é uma conexão de armazenamento de Blob do Azure, apontando para um arquivo de registration.json estático, usado para pesquisas conforme necessário. Essa entrada de dados de referência é usada em variações posteriores da sintaxe da consulta.
  4. Examine as saídas do trabalho de exemplo TollApp.

    • A saída do Azure Cosmos DB é um contêiner de banco de dados do Azure Cosmos DB que recebe os eventos do coletor de saída. Observe que essa saída é usada na cláusula INTO da consulta de streaming.

Iniciar o trabalho de streaming do TollApp

Siga estas etapas para iniciar o trabalho de streaming:

  1. Na página Visão geral do trabalho, selecione Iniciar.

  2. No painel Iniciar trabalho , selecione Agora.

  3. Após alguns momentos, quando o trabalho estiver em execução, na página Visão geral do trabalho de streaming, visualize o gráfico de monitoramento . O gráfico deve mostrar vários milhares de eventos de entrada e dezenas de eventos de saída.

Revise os dados de saída do Azure Cosmos DB

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

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

  3. Selecione o título Data Explorer para abrir a página Data Explorer.

  4. Expanda os documentos tollAppDatabase>tollAppCollection.>

  5. Na lista de IDs, vários documentos são mostrados assim que a saída estiver disponível.

  6. Selecione cada ID para revisar o documento JSON. Observe cada tollid, windowend timee o count of cars dessa janela.

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

Comunicar o tempo total de cada automóvel

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

Para encontrar o tempo total, junte-se ao fluxo EntryTime com o fluxo ExitTime. Junte os dois fluxos de entrada nas colunas TollId e LicensePlate correspondentes. O operador JOIN requer que você especifique a margem temporal que descreve a diferença de tempo aceitável entre os eventos associados. Use a função DATEDIFF para especificar que os eventos não devem estar a mais de 15 minutos um do outro. Aplique também a função DATEDIFF aos horários de saída e entrada para calcular o tempo real que um carro passa na estação de pedágio. Observe a diferença do uso de DATEDIFF quando ele é usado em uma instrução SELECT em vez de uma 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 de trabalho de streaming do TollApp:

  1. Na página Visão geral do trabalho, selecione Parar.

  2. Aguarde alguns instantes pela notificação de que o trabalho parou.

  3. Sob o título TOPOLOGIA DE TRABALHO, selecione <> Consulta

  4. Cole a consulta SQL de streaming ajustada.

  5. Selecione Salvar para salvar a consulta. Confirme Sim para salvar as alterações.

  6. Na página Visão geral do trabalho, selecione Iniciar.

  7. No painel Iniciar trabalho , selecione Agora.

Rever o tempo total na saída

Repita as etapas na seção anterior para revisar os dados de saída do Azure Cosmos DB do trabalho de streaming. Analise os documentos JSON mais recentes.

Por exemplo, este documento mostra um exemplo de carro com uma determinada placa, o entrytime e exit time, e o campo calculado durationinminutes DATEDIFF mostrando a duração da cabine de pedágio 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
}

Comunicar veículos com matrícula caducada

O Azure Stream Analytics pode usar instantâneos estáticos de dados de referência para unir fluxos de dados temporais. Para demonstrar essa capacidade, use a seguinte pergunta de exemplo. A entrada Registro é um arquivo json blob estático que lista as expirações das tags de licença. Ao juntar na placa, os dados de referência são comparados com cada veículo que passa pelo pedágio ambos.

Se um veículo comercial estiver registado na empresa de portagem, pode passar pela cabine de portagem sem ser parado para inspeção. Utilize o quadro de pesquisa de matrículas para identificar todos os veículos comerciais com matrículas caducadas.

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 as etapas na seção anterior para atualizar a sintaxe de consulta de trabalho de streaming do TollApp.

  2. Repita as etapas na seção anterior para revisar os dados de saída do Azure Cosmos DB do trabalho de streaming.

Saída de exemplo:

    {
        "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
    }

Dimensionar o trabalho

O Azure Stream Analytics foi projetado para dimensionar de forma elástica para que possa lidar com grandes volumes de dados. A consulta do Azure Stream Analytics pode usar uma cláusula PARTITION BY para informar ao sistema que essa etapa é dimensionada. PartitionId é uma coluna especial que o sistema adiciona para corresponder ao ID da partição da entrada (hub de eventos).

Para expandir a consulta para partições, edite a sintaxe da consulta com 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 expandir o trabalho de streaming para mais unidades de streaming:

  1. Pare o trabalho atual.

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

  3. Sob o título CONFIGURAR no trabalho de streaming, selecione Escala.

  4. Deslize o controle deslizante Unidades de streaming de 1 para 6. As unidades de streaming definem a quantidade de poder de computação que o trabalho pode receber. Selecione Guardar.

  5. Inicie o trabalho de streaming para demonstrar a escala adicional. O Azure Stream Analytics distribui o trabalho por mais recursos de computação e obtém uma melhor taxa de transferência, particionando o trabalho entre recursos usando a coluna designada na cláusula PARTITION BY.

Monitorizar a tarefa

A área MONITOR contém estatísticas sobre o trabalho em execução. A primeira configuração é necessária para usar a conta de armazenamento na mesma região (nome como o resto deste documento).

Monitoramento de tarefas do Azure Stream Analytics

Você também pode acessar os Registros de Atividades na área Configurações do painel de trabalho.

Limpe os recursos do TollApp

  1. Pare o trabalho do Stream Analytics no portal do Azure.

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

  3. Selecione Eliminar grupo de recursos. Digite o nome do grupo de recursos para confirmar a exclusão.

Conclusão

Esta solução apresentou-lhe o serviço Azure Stream Analytics. Ele demonstrou como configurar entradas e saídas para o trabalho do Stream Analytics. Usando o cenário Toll Data, a solução explicou tipos comuns de problemas que surgem no espaço de dados em movimento e como eles podem ser resolvidos com consultas simples do tipo SQL no Azure Stream Analytics. A solução descreveu construções de extensão SQL para trabalhar com dados temporais. Ele mostrou como unir fluxos de dados, como enriquecer o fluxo de dados com dados de referência estáticos e como dimensionar uma consulta para obter uma taxa de transferência mais alta.

Embora esta solução forneça uma boa introdução, ela não está completa de forma alguma. Você pode encontrar mais padrões de consulta usando a linguagem SAQL em Exemplos de consulta para padrões comuns de uso do Stream Analytics.