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.
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
Para implantar o ambiente TollApp no Azure, use este link para Implantar o Modelo do Azure TollApp.
Entre no portal do Azure, se solicitado.
Escolha a subscrição na qual os vários recursos são faturados.
Especifique um novo grupo de recursos, com um nome exclusivo, por exemplo
MyTollBooth
.Selecione uma localização do Azure.
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.
Verifique se concorda com os termos e condições.
Selecione Fixar no painel para que você possa localizar facilmente os recursos mais tarde.
Selecione Comprar para implantar o modelo de exemplo.
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
Inicie sessão no portal do Azure.
Localize o Grupo de Recursos que você nomeou na seção anterior.
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
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).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.
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.
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:
Na página Visão geral do trabalho, selecione Iniciar.
No painel Iniciar trabalho , selecione Agora.
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
Localize o grupo de recursos que contém os recursos do TollApp.
Selecione a Conta do Azure Cosmos DB com o padrão de nome tollapp<random-cosmos>.
Selecione o título Data Explorer para abrir a página Data Explorer.
Expanda os documentos tollAppDatabase>tollAppCollection.>
Na lista de IDs, vários documentos são mostrados assim que a saída estiver disponível.
Selecione cada ID para revisar o documento JSON. Observe cada
tollid
,windowend time
e ocount of cars
dessa janela.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:
Na página Visão geral do trabalho, selecione Parar.
Aguarde alguns instantes pela notificação de que o trabalho parou.
Sob o título TOPOLOGIA DE TRABALHO, selecione <> Consulta
Cole a consulta SQL de streaming ajustada.
Selecione Salvar para salvar a consulta. Confirme Sim para salvar as alterações.
Na página Visão geral do trabalho, selecione Iniciar.
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'
Repita as etapas na seção anterior para atualizar a sintaxe de consulta de trabalho de streaming do TollApp.
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:
Pare o trabalho atual.
Atualize a sintaxe da <> consulta na página Consulta e salve as alterações.
Sob o título CONFIGURAR no trabalho de streaming, selecione Escala.
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.
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).
Você também pode acessar os Registros de Atividades na área Configurações do painel de trabalho.
Limpe os recursos do TollApp
Pare o trabalho do Stream Analytics no portal do Azure.
Localize o grupo de recursos que contém oito recursos relacionados ao modelo TollApp.
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.