Introdução ao uso do Stream Analytics do Azure: Detecção de fraude em tempo realGet started using Azure Stream Analytics: Real-time fraud detection

Este tutorial fornece uma ilustração completa de como usar o Azure Stream Analytics.This tutorial provides an end-to-end illustration of how to use Azure Stream Analytics. Você aprenderá como:You learn how to:

  • Colocar o fluxo de eventos em uma instância de Hubs de eventos do Azure.Bring streaming events into an instance of Azure Event Hubs. Neste tutorial, você usará um aplicativo que simula um fluxo de registros de metadados de telefone celular.In this tutorial, you'll use an app that simulates a stream of mobile-phone metadata records.

  • Escreva consultas de Stream Analytics do tipo SQL para transformar dados, agregar informações ou procurar padrões.Write SQL-like Stream Analytics queries to transform data, aggregating information or looking for patterns. Você verá como usar uma consulta para analisar o fluxo de entrada e procurar chamadas que podem ser fraudulentas.You will see how to use a query to examine the incoming stream and look for calls that might be fraudulent.

  • Envie os resultados para um coletor de saída (armazenamento) no qual você pode analisar informações adicionais.Send the results to an output sink (storage) that you can analyze for additional insights. Nesse caso, você enviará os dados de chamada suspeitos para o armazenamento de Blobs do Azure.In this case, you'll send the suspicious call data to Azure Blob storage.

Este tutorial usa o exemplo de detecção de fraudes em tempo real com base nos dados de chamada telefônica.This tutorial uses the example of real-time fraud detection based on phone-call data. A técnica ilustrada também é adequada para outros tipos de detecção de fraudes, como fraude de cartão de crédito ou roubo de identidade.The technique illustrated is also suited for other types of fraud detection, such as credit card fraud or identity theft.

Cenário: Detecção de fraudes de telecomunicações e SIM em tempo realScenario: Telecommunications and SIM fraud detection in real time

Uma empresa de telecomunicações tem um grande volume de dados para as chamadas de entrada.A telecommunications company has a large volume of data for incoming calls. A empresa deseja detectar chamadas fraudulentas em tempo real para que eles possam notificar clientes ou desligar o serviço para um número específico.The company wants to detect fraudulent calls in real time so that they can notify customers or shut down service for a specific number. Um tipo de fraude SIM envolve várias chamadas da mesma identidade ao mesmo tempo, mas em locais geograficamente diferentes.One type of SIM fraud involves multiple calls from the same identity around the same time but in geographically different locations. Para detectar esse tipo de fraude, a empresa precisa analisar os registros de chamada de entrada e procurar padrões específicos – nesse caso, para chamadas feitas ao mesmo tempo em diferentes países/regiões.To detect this type of fraud, the company needs to examine incoming phone records and look for specific patterns—in this case, for calls made around the same time in different countries/regions. Os registros de telefone que entram nesta categoria são gravados no armazenamento para análise posterior.Any phone records that fall into this category are written to storage for subsequent analysis.

Pré-requisitosPrerequisites

Neste tutorial, você vai simular dados de chamada telefônica usando um aplicativo cliente que gera os metadados de exemplo de chamada telefônica.In this tutorial, you'll simulate phone-call data by using a client app that generates sample phone call metadata. Alguns dos registros que o aplicativo produz se parecem com chamadas fraudulentas.Some of the records that the app produces look like fraudulent calls.

Antes de começar, verifique se você tem:Before you start, make sure you have the following:

  • Uma conta do Azure.An Azure account.

  • O aplicativo gerador de evento de chamada Telcogenerator.zip, que pode ser baixado do Centro de Download da Microsoft.The call-event generator app, TelcoGenerator.zip, which can be downloaded from the Microsoft Download Center. Descompacte este pacote em uma pasta no seu computador.Unzip this package into a folder on your computer. Se você quiser ver o código-fonte e executar o aplicativo em um depurador, você pode obter o código-fonte do GitHub.If you want to see the source code and run the app in a debugger, you can get the app source code from GitHub.

    Observação

    O Windows pode bloquear o arquivo zip baixado.Windows might block the downloaded .zip file. Se você não conseguir descompactá-lo, clique com o botão direito do mouse no arquivo e selecione Propriedades.If you can't unzip it, right-click the file and select Properties. Se você vir a mensagem "Este arquivo veio de outro computador e pode ser bloqueado para ajudar a proteger este computador", marque a opção Desbloquear e clique em Aplicar.If you see the "This file came from another computer and might be blocked to help protect this computer" message, select the Unblock option and then click Apply.

Se você quiser analisar os resultados do trabalho do Streaming Analytics, você também precisará de uma ferramenta para exibir o conteúdo de um contêiner de armazenamento de Blobs do Azure.If you want to examine the results of the Streaming Analytics job, you also need a tool for viewing the contents of an Azure Blob Storage container. Se você usar o Visual Studio, você pode usar ferramentas do Azure para Visual Studio ou Visual Studio Cloud Explorer.If you use Visual Studio, you can use Azure Tools for Visual Studio or Visual Studio Cloud Explorer. Como alternativa, você pode instalar ferramentas autônomas como Azure Storage Explorer ou Cerulean.Alternatively, you can install standalone tools like Azure Storage Explorer or Cerulean.

Criar Hubs de Eventos do Azure para eventos de ingestãoCreate an Azure Event Hubs to ingest events

Para analisar um fluxo de dados, faça a ingestão no Azure.To analyze a data stream, you ingest it into Azure. Uma forma comum de ingestão de dados é usar Hubs de eventos do Azure, que permite ingerir milhões de eventos por segundo e, em seguida, processar e armazenar as informações do evento.A typical way to ingest data is to use Azure Event Hubs, which lets you ingest millions of events per second and then process and store the event information. Para este tutorial, você criará um hub de eventos e, em seguida, fará com que o aplicativo gerador de evento de chamada envie dados de chamada para esse hub de eventos.For this tutorial, you will create an event hub and then have the call-event generator app send call data to that event hub.

Observação

Para obter uma versão mais detalhada deste procedimento, consulte Criar um namespace de Hubs de eventos e um hub de eventos usando o portal do Azure.For a more detailed version of this procedure, see Create an Event Hubs namespace and an event hub using the Azure portal.

Criar um hub de evento e de namespaceCreate a namespace and event hub

Neste procedimento, você primeiro cria um namespace de hub de eventos e, em seguida, adiciona um hub de eventos para esse namespace.In this procedure, you first create an event hub namespace, and then you add an event hub to that namespace. Namespaces do hub de evento são usados para agrupar logicamente instâncias de barramento de evento relacionadas.Event hub namespaces are used to logically group related event bus instances.

  1. Faça logon no portal do Azure e clique em Criar um recurso no canto superior esquerdo da tela.Log in to the Azure portal, and click Create a resource at the top left of the screen.

  2. Selecione Todos os serviços no menu à esquerda e selecione estrela (*) ao lado de Hubs de Eventos na categoria Análise.Select All services in the left menu, and select star (*) next to Event Hubs in the Analytics category. Confirme que Hubs de Eventos foi adicionado à FAVORITOS no menu de navegação à esquerda.Confirm that Event Hubs is added to FAVORITES in the left navigational menu.

    Pesquisar Hubs de Eventos

  3. Selecione Hubs de Eventos em FAVORITOS no menu de navegação à esquerda e selecione Adicionar na barra de ferramentas.Select Event Hubs under FAVORITES in the left navigational menu, and select Add on the toolbar.

    Botão Adicionar

  4. No painel Criar um namespace, insira um nome de namespace como <yourname>-eh-ns-demo.In the Create namespace pane, enter a namespace name such as <yourname>-eh-ns-demo. Você pode usar qualquer nome para o namespace, mas o nome deve ser válido para uma URL e deve ser exclusivo no Azure.You can use any name for the namespace, but the name must be valid for a URL and it must be unique across Azure.

  5. Selecione uma assinatura e crie ou escolha um grupo de recursos e clique em Criar.Select a subscription and create or choose a resource group, then click Create.


    Create event hub namespace in Azure portal

  6. Quando o namespace acabar a implementação, localize o namespace de hub de eventos na lista de recursos do Azure.When the namespace has finished deploying, find the event hub namespace in your list of Azure resources.

  7. Clique em novo namespace e, no painel do namespace, clique em Hub de eventos.Click the new namespace, and in the namespace pane, click Event Hub.

    Botão Adicionar Hub de Eventos para criar um novo hub de eventos

  8. Nomeie o novo hub de evento asa-eh-frauddetection-demo.Name the new event hub asa-eh-frauddetection-demo. Você pode usar um nome diferente.You can use a different name. Se você fizer isso, anote-o, pois você precisará desse nome mais tarde.If you do, make a note of it, because you need the name later. Você não precisa definir outras opções para o hub de eventos no momento.You don't need to set any other options for the event hub right now.


    Name event hub in Azure portal

  9. Clique em Criar.Click Create.

Conceder acesso para o hub de eventos e obter uma cadeia de caracteres de conexãoGrant access to the event hub and get a connection string

Antes que um processo possa enviar dados para um hub de eventos, o hub de eventos deve ter uma política que permita o acesso apropriado.Before a process can send data to an event hub, the event hub must have a policy that allows appropriate access. A política de acesso produz uma cadeia de conexão que inclui informações de autorização.The access policy produces a connection string that includes authorization information.

  1. No painel do namespace de evento, clique em Hubs de Eventos e, em seguida, clique no nome do seu novo Hub de Eventos.In the event namespace pane, click Event Hubs and then click the name of your new event hub.

  2. No painel do Hub de Eventos, clique em Políticas de acesso compartilhado e depois em + Adicionar.In the event hub pane, click Shared access policies and then click + Add.

    Observação

    Verifique se você está trabalhando com o hub de eventos, não com o namespace de hub de eventos.Make sure you're working with the event hub, not the event hub namespace.

  3. Adicione uma política chamada asa-policy-manage-demo e para Declaração, selecione Gerenciar.Add a policy named asa-policy-manage-demo and for Claim, select Manage.


    Create shared access policy for Stream Analytics

  4. Clique em Criar.Click Create.

  5. Depois que a política for implementada, clique na lista de políticas de acesso compartilhado.After the policy has been deployed, click it in the list of shared access policies.

  6. Localize a caixa rotulada CHAVE PRIMÁRIA DA CADEIA DE CONEXÃO e clique no botão de cópia próximo à cadeia de conexão.Find the box labeled CONNECTION STRING-PRIMARY KEY and click the copy button next to the connection string.


    Stream Analytics shared access policy

  7. Cole a cadeia de conexão em um editor de texto.Paste the connection string into a text editor. Você precisa dessa cadeia de conexão para a próxima seção, depois que você fizer algumas pequenas modificações.You need this connection string for the next section, after you make some small edits to it.

    A cadeia de conexão tem esta aparência:The connection string looks like this:

    Endpoint=sb://YOURNAME-eh-ns-demo.servicebus.windows.net/;SharedAccessKeyName=asa-policy-manage-demo;SharedAccessKey=Gw2NFZwU1Di+rxA2T+6hJYAtFExKRXaC2oSQa0ZsPkI=;EntityPath=asa-eh-frauddetection-demo

    Observe que a cadeia de conexão contém vários pares de chave-valor, separados por ponto e vírgula: Endpoint, SharedAccessKeyName, SharedAccessKey, e EntityPath.Notice that the connection string contains multiple key-value pairs, separated with semicolons: Endpoint, SharedAccessKeyName, SharedAccessKey, and EntityPath.

Configurar e iniciar o aplicativo gerador de eventoConfigure and start the event generator application

Antes de iniciar o aplicativo TelcoGenerator, você deve configurá-lo para que ele envie registros de chamada para o hub de eventos que você criou.Before you start the TelcoGenerator app, you must configure it so that it will send call records to the event hub you created.

Configurar o aplicativo TelcoGeneratorConfigure the TelcoGenerator app

  1. No editor de onde você copiou a cadeia de caracteres de conexão, anote o EntityPath valor e, em seguida, remova o EntityPath par (não se esqueça de remover o ponto e vírgula anterior).In the editor where you copied the connection string, make a note of the EntityPath value, and then remove the EntityPath pair (don't forget to remove the semicolon that precedes it).

  2. Na pasta onde você descompactou o arquivo TelcoGenerator.zip, abra o arquivo de telcodatagen.exe.config em um editor.In the folder where you unzipped the TelcoGenerator.zip file, open the telcodatagen.exe.config file in an editor. (Há mais de um arquivo .config, portanto certifique-se de abrir o correto.)(There is more than one .config file, so be sure that you open the right one.)

  3. Faça o seguinte no elemento <appSettings>:In the <appSettings> element:

    • Defina o valor da chave EventHubName para o nome do hub de evento (ou seja, o valor do caminho da entidade).Set the value of the EventHubName key to the event hub name (that is, to the value of the entity path).
    • Defina o valor da chave Microsoft.ServiceBus.ConnectionString para a cadeia de conexão.Set the value of the Microsoft.ServiceBus.ConnectionString key to the connection string.

    A seção <appSettings> será parecida com o seguinte exemplo:The <appSettings> section will look like the following example:

    <appSettings>
     <!-- Service Bus specific app setings for messaging connections -->
     <add key="EventHubName" value="asa-eh-ns-demo"/>
     <add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://asa-eh-ns-demo.servicebus.windows.net/;SharedAccessKeyName=asa-policy-manage-demo;SharedAccessKey=GEcnTKf2//1MRn6SN1A2u0O76MP9pj3v0Ccyf1su4Zo="/>
    </appSettings>
    
  4. Salve o arquivo.Save the file.

Iniciar o aplicativoStart the app

  1. Abra uma janela de comando e altere para a pasta onde o aplicativo TelcoGenerator é descompactado.Open a command window and change to the folder where the TelcoGenerator app is unzipped.

  2. Insira o seguinte comando:Enter the following command:

    telcodatagen.exe 1000 0.2 2
    

    Os parâmetros são:The parameters are:

    • Número de CDRs por hora.Number of CDRs per hour.
    • Probabilidade de fraude de cartão SIM: Frequência, como uma porcentagem de todas as chamadas, que o aplicativo deve simular uma chamada fraudulenta.SIM Card Fraud Probability: How often, as a percentage of all calls, that the app should simulate a fraudulent call. O valor 0,2 significa que cerca de 20% dos registros de chamada parecerão ser fraudulentos.The value 0.2 means that about 20% of the call records will look fraudulent.
    • Duração em horas.Duration in hours. O número de horas que o aplicativo deve ser executado.The number of hours that the app should run. Você também pode interromper o aplicativo a qualquer momento pressionando Ctrl + C na linha de comando.You can also stop the app any time by pressing Ctrl+C at the command line.

    Depois de alguns segundos, o aplicativo é iniciado exibindo registros de chamada telefônica na tela, enquanto envia para o hub de eventos.After a few seconds, the app starts displaying phone call records on the screen as it sends them to the event hub.

Alguns dos campos-chave que você vai usar neste aplicativo de detecção de fraudes em tempo real são os seguintes:Some of the key fields that you will be using in this real-time fraud detection application are the following:

RegistroRecord DefiniçãoDefinition
CallrecTime Carimbo de data/hora para a hora de início da chamada.The timestamp for the call start time.
SwitchNum Chave do telefone usada para se conectar à chamada.The telephone switch used to connect the call. Neste exemplo, as opções são cadeias de caracteres que representam o país/região de origem (Estados Unidos, China, Reino Unido, Alemanha ou Austrália).For this example, the switches are strings that represent the country/region of origin (US, China, UK, Germany, or Australia).
CallingNum Número de telefone do autor da chamada.The phone number of the caller.
CallingIMSI A Identidade do Assinante Móvel Internacional (IMSI).The International Mobile Subscriber Identity (IMSI). Este é o identificador exclusivo do autor da chamada.This is the unique identifier of the caller.
CalledNum O número de telefone do destinatário da chamada.The phone number of the call recipient.
CalledIMSI Identidade do Assinante Móvel Internacional (IMSI).International Mobile Subscriber Identity (IMSI). Este é o identificador exclusivo do destinatário da chamada.This is the unique identifier of the call recipient.

Criar um trabalho de Stream Analytics para gerenciar o fluxo de dadosCreate a Stream Analytics job to manage streaming data

Agora que você tem um fluxo de eventos de chamada, você pode configurar um trabalho do Stream Analytics.Now that you have a stream of call events, you can set up a Stream Analytics job. O trabalho lerá os dados do hub de eventos que você configurou.The job will read data from the event hub that you set up.

Criar o trabalhoCreate the job

  1. No portal do Azure, clique em Criar um recurso > Internet das Coisas > Trabalho do Stream Analytics.In the Azure portal, click Create a resource > Internet of Things > Stream Analytics job.

  2. Selecione o trabalho asa_frauddetection_job_demo, especifique uma assinatura, um grupo de recursos e um local.Name the job asa_frauddetection_job_demo, specify a subscription, resource group, and location.

    É aconselhável colocar o trabalho e o hub de eventos na mesma região para melhor desempenho e para que não seja necessário pagar para transferir dados entre regiões.It's a good idea to place the job and the event hub in the same region for best performance and so that you don't pay to transfer data between regions.


    Create Stream Analytics job in portal

  3. Clique em Criar.Click Create.

    O trabalho é criado e o portal exibe detalhes do trabalho.The job is created and the portal displays job details. Nada está em execução ainda, no entanto, você precisa configurar o trabalho antes que ele possa ser iniciado.Nothing is running yet, though—you have to configure the job before it can be started.

Configurar entrada de trabalhoConfigure job input

  1. No painel ou no painel Todos os recursos, encontre e selecione o asa_frauddetection_job_demo trabalho do Stream Analytics.In the dashboard or the All resources pane, find and select the asa_frauddetection_job_demo Stream Analytics job.

  2. Na seção Visão geral do painel do trabalho do Stream Analytics, clique na caixa Entrada.In the Overview section of the Stream Analytics job pane, click the Input box.

    Caixa de entrada em Topologia no painel do trabalho do Stream Analytics

  3. Clique em Adicionar entrada de fluxo e selecione Hub de Eventos.Click Add stream input and select Event Hub. Em seguida, preencha a nova página de entrada com as seguintes informações:Then fill the New input page with the following information:

    ConfiguraçãoSetting Valor sugeridoSuggested value DescriçãoDescription
    Alias de entradaInput alias CallStreamCallStream Insira um nome para identificar a entrada do trabalho.Enter a name to identify the job's input.
    SubscriptionSubscription <Your subscription> Selecione a assinatura do Azure com o Hub de Eventos que você criou.Select the Azure subscription that has the Event Hub you created.
    Namespace do Hub de EventosEvent Hub namespace asa-eh-ns-demoasa-eh-ns-demo Insira o nome do namespace de Hub de Eventos.Enter the name of the Event Hub namespace.
    Nome do Hub de EventosEvent Hub name asa-eh-frauddetection-demoasa-eh-frauddetection-demo Selecione o nome do Hub de Eventos.Select the name of your Event Hub.
    Nome da política do Hub de EventosEvent Hub policy name asa-policy-manage-demoasa-policy-manage-demo Selecione a política de acesso que você criou anteriormente.Select the access policy that you created earlier.

    Create Stream Analytics input in portal
  4. Clique em Criar.Click Create.

Criar consultas para transformar dados em tempo realCreate queries to transform real-time data

Neste ponto, você tem um trabalho do Stream Analytics configurado para ler um fluxo de dados de entrada.At this point, you have a Stream Analytics job set up to read an incoming data stream. A próxima etapa é criar uma consulta que analisa os dados em tempo real.The next step is to create a query that analyzes the data in real time. O Stream Analytics dá suporte a um modelo de consulta simples e declarativo para descrever as transformações para processamento em tempo real.Stream Analytics supports a simple, declarative query model that describes transformations for real-time processing. As consultas usam uma linguagem semelhante a SQL que tem algumas extensões específicas para o Stream Analytics.The queries use a SQL-like language that has some extensions specific to Stream Analytics.

Uma consulta simples pode apenas ler todos os dados de entrada.A simple query might just read all the incoming data. No entanto, geralmente você cria consultas que procuram dados específicos ou relações nos dados.However, you often create queries that look for specific data or for relationships in the data. Nesta seção do tutorial, você criar e testa várias consultas para saber algumas maneiras em que você pode transformar um fluxo de entrada para análise.In this section of the tutorial, you create and test several queries to learn a few ways in which you can transform an input stream for analysis.

As consultas que você criar aqui exibirão apenas os dados transformados na tela.The queries you create here will just display the transformed data to the screen. Em uma seção posterior, você vai configurar um coletor de saída e uma consulta que grava os dados transformados para esse coletor.In a later section, you'll configure an output sink and a query that writes the transformed data to that sink.

Para saber mais sobre a linguagem, consulte a Referência de linguagem de consulta do Stream Analytics do Azure.To learn more about the language, see the Azure Stream Analytics Query Language Reference.

Obter dados de exemplo para teste de consultasGet sample data for testing queries

O aplicativo TelcoGenerator está enviando registros de chamada para o hub de eventos e o trabalho do Stream Analytics é configurado para ler do hub de eventos.The TelcoGenerator app is sending call records to the event hub, and your Stream Analytics job is configured to read from the event hub. Você pode usar uma consulta para testar o trabalho para certificar-se de que está lendo corretamente.You can use a query to test the job to make sure that it's reading correctly. Para testar uma consulta no console do Azure, você precisa de dados de exemplo.To test a query in the Azure console, you need sample data. Para este passo a passo, você vai extrair dados de exemplo do fluxo que estará disponível para o hub de eventos.For this walkthrough, you'll extract sample data from the stream that's coming into the event hub.

  1. Certifique-se de que o aplicativo TelcoGenerator está em execução e gera os registros de chamada.Make sure that the TelcoGenerator app is running and producing call records.

  2. No portal, retorne para o painel de trabalho do Streaming Analytics.In the portal, return to the Streaming Analytics job pane. (Se você fechou o painel, pesquise asa_frauddetection_job_demo no painel Todos os recursos.)(If you closed the pane, search for asa_frauddetection_job_demo in the All resources pane.)

  3. Clique na caixa Consulta.Click the Query box. Azure lista as entradas e saídas que são configuradas para o trabalho e permite que você crie uma consulta que permite transformar o fluxo de entrada como é enviado para a saída.Azure lists the inputs and outputs that are configured for the job, and lets you create a query that lets you transform the input stream as it is sent to the output.

  4. No painel Consulta, clique nos pontos ao lado da entrada CallStream e, em seguida, selecione Dados de exemplo da entrada.In the Query pane, click the dots next to the CallStream input and then select Sample data from input.

    Opções de menu para usar dados de exemplo para a entrada de trabalho de Streaming Analytics, com "Dados de exemplo de entrada" selecionados

  5. Defina Minutos para 3 e, em seguida, clique em Ok.Set Minutes to 3 and then click OK.

    Opções de amostragem de fluxo de entrada com 3 minutos selecionados

    O Azure prova dados do fluxo de entrada de 3 minutos e notifica quando os dados de exemplo estão prontos.Azure samples 3 minutes' worth of data from the input stream and notifies you when the sample data is ready. (Isso pode levar um tempo.)(This takes a short while.)

Os dados de exemplo são armazenados temporariamente e estão disponíveis enquanto a janela de consulta estiver aberta.The sample data is stored temporarily and is available while you have the query window open. Se você fechar a janela de consulta, os dados de exemplo serão descartados e você terá que criar um novo conjunto de dados de exemplo.If you close the query window, the sample data is discarded, and you'll have to create a new set of sample data.

Como alternativa, você pode obter um arquivo .json que contém dados de exemplo de do GitHube, em seguida, carregar esse arquivo .json para usar como dados de exemplo para a entrada CallStream.As an alternative, you can get a .json file that has sample data in it from GitHub, and then upload that .json file to use as sample data for the CallStream input.

Teste usando uma consulta de passagemTest using a pass-through query

Se deseja arquivar todos os eventos, você pode usar uma consulta de passagem para ler todos os campos na carga do evento.If you want to archive every event, you can use a pass-through query to read all the fields in the payload of the event.

  1. Na janela de consulta, insira esta consulta:In the query window, enter this query:

    SELECT 
        *
    FROM 
        CallStream
    

    Observação

    Assim como acontece com SQL, as palavras-chave não diferenciam maiúsculas de minúsculas e espaço em branco não é significativo.As with SQL, keywords are not case-sensitive, and whitespace is not significant.

    Nesta consulta, CallStream é o alias que você especificou quando criou o servidor.In this query, CallStream is the alias that you specified when you created the input. Se você tiver usado um alias diferente, use esse nome.If you used a different alias, use that name instead.

  2. Clique em Testar.Click Test.

    O trabalho do Stream Analytics executa a consulta em relação aos dados de exemplo e exibe a saída na parte inferior da janela.The Stream Analytics job runs the query against the sample data and displays the output at the bottom of the window. Os resultados indicam que o Hub de Eventos e o trabalho de Streaming Analytics estão configurados corretamente.The results indicate that the Event Hub and the Streaming Analytics job are configured correctly. (Conforme observado, mais tarde você criará um coletor de saída para que a consulta possa gravar dados.)(As noted, later you'll create an output sink that the query can write data to.)

    Saída de trabalho do Stream Analytics, mostrando 73 registros gerados

    O número exato de registros que você vê dependerá de quantos registros foram capturados em sua amostra de 3 minutos.The exact number of records you see will depend on how many records were captured in your 3-minute sample.

Reduza o número de campos usando uma projeção de colunaReduce the number of fields using a column projection

Em muitos casos, a análise não precisa de todas as colunas do fluxo de entrada.In many cases, your analysis doesn't need all the columns from the input stream. Você pode usar uma consulta para um conjunto menor de campos retornados do que na consulta de passagem do projeto.You can use a query to project a smaller set of returned fields than in the pass-through query.

  1. Altere a consulta no editor de código para a seguinte:Change the query in the code editor to the following:

    SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNum, CalledNum 
    FROM 
        CallStream
    
  2. Clique em Testar novamente.Click Test again.

    Saída de trabalho do Stream Analytics para projeção mostra 25 registros

Contagem de chamadas de entrada por região: Janela em cascata com agregaçãoCount incoming calls by region: Tumbling window with aggregation

Suponha que você deseja contar o número de chamadas de entrada por região.Suppose you want to count the number of incoming calls per region. No fluxo de dados, quando você deseja executar funções de agregação como contagem, você precisa segmentar o fluxo em unidades temporais (desde que o fluxo de dados seja efetivamente uma infinidade).In streaming data, when you want to perform aggregate functions like counting, you need to segment the stream into temporal units (since the data stream itself is effectively endless). Você faz isso usando a função de janela do Streaming Analytics.You do this using a Streaming Analytics window function. Em seguida, você pode trabalhar com os dados dentro dessa janela como uma unidade.You can then work with the data inside that window as a unit.

Para essa transformação, você deseja uma sequência de janelas temporais que não se sobrepõem — cada janela terá um conjunto discreto de dados que você pode agrupar e agregar.For this transformation, you want a sequence of temporal windows that don't overlap—each window will have a discrete set of data that you can group and aggregate. Esse tipo de janela é conhecido como uma janela em cascata.This type of window is referred to as a Tumbling window. Dentro da janela em cascata, você pode obter uma contagem das chamadas de entrada agrupadas por SwitchNum, que representa o país/região em que a chamada foi originada.Within the Tumbling window, you can get a count of the incoming calls grouped by SwitchNum, which represents the country/region where the call originated.

  1. Altere a consulta no editor de código para a seguinte:Change the query in the code editor to the following:

    SELECT 
        System.Timestamp as WindowEnd, SwitchNum, COUNT(*) as CallCount 
    FROM
        CallStream TIMESTAMP BY CallRecTime 
    GROUP BY TUMBLINGWINDOW(s, 5), SwitchNum
    

    Essa consulta usa a palavra-chave Timestamp By na cláusula FROM para especificar qual campo de carimbo de data/hora no fluxo de entrada a ser usado para definir a janela em cascata.This query uses the Timestamp By keyword in the FROM clause to specify which timestamp field in the input stream to use to define the Tumbling window. Nesse caso, a janela divide os dados em segmentos pelo campo CallRecTime em cada registro.In this case, the window divides the data into segments by the CallRecTime field in each record. (Se nenhum campo for especificado, a operação em janela usará a hora em que cada evento chegou ao hub de eventos.(If no field is specified, the windowing operation uses the time that each event arrives at the event hub. Consulte "Hora de chegada versus hora do aplicativo" na Referência de linguagem de consulta de Stream Analytics.See "Arrival Time Vs Application Time" in Stream Analytics Query Language Reference.

    A projeção inclui System.Timestamp, que retorna um carimbo de data/hora para o final de cada janela.The projection includes System.Timestamp, which returns a timestamp for the end of each window.

    Para especificar que você deseja usar uma janela em cascata, use a função TUMBLINGWINDOW na cláusula GROUP BY.To specify that you want to use a Tumbling window, you use the TUMBLINGWINDOW function in the GROUP BY clause. Na função, você especifica uma unidade de tempo (em qualquer lugar de um microssegundos a um dia) e um tamanho de janela (quantas unidades).In the function, you specify a time unit (anywhere from a microsecond to a day) and a window size (how many units). Neste exemplo, a janela em cascata consiste em intervalos de 5 segundos, portanto você obterá uma contagem por país/região para o valor de cada 5 segundos de chamadas.In this example, the Tumbling window consists of 5-second intervals, so you will get a count by country/region for every 5 seconds' worth of calls.

  2. Clique em Testar novamente.Click Test again. Nos resultados, observe que os carimbos de data/hora em WindowEnd estão em incrementos de 5 segundos.In the results, notice that the timestamps under WindowEnd are in 5-second increments.

    Saída de trabalho do Stream Analytics para agregação mostrando 13 registros

Detectar fraudes SIM usando uma autojunçãoDetect SIM fraud using a self-join

Neste exemplo, considere o uso fraudulento como sendo chamadas que se originam do mesmo usuário, mas em diferentes locais dentro de 5 segundos uma da outra.For this example, consider fraudulent usage to be calls that originate from the same user but in different locations within 5 seconds of one another. Por exemplo, o mesmo usuário não pode legitimamente fazer uma chamada da Austrália e dos Estados Unidos ao mesmo tempo.For example, the same user can't legitimately make a call from the US and Australia at the same time.

Para verificar nesses casos, você pode usar uma autojunção do fluxo de dados para associar o fluxo à mesma com base no valor CallRecTime.To check for these cases, you can use a self-join of the streaming data to join the stream to itself based on the CallRecTime value. Em seguida, você pode procurar registros de chamada em que o valor CallingIMSI (o número de origem) é o mesmo, mas o valor SwitchNum (país/região de origem) não é o mesmo.You can then look for call records where the CallingIMSI value (the originating number) is the same, but the SwitchNum value (country/region of origin) is not the same.

Quando você usa uma associação com o fluxo de dados, a junção deve fornecer alguns limites sobre quão distante as linhas correspondentes podem ser separadas no tempo.When you use a join with streaming data, the join must provide some limits on how far the matching rows can be separated in time. (Como observado anteriormente, o fluxo de dados é efetivamente uma infinidade.) Os limites de tempo para a relação são especificados dentro de cláusula ON da junção, usando a função DATEDIFF.(As noted earlier, the streaming data is effectively endless.) The time bounds for the relationship are specified inside the ON clause of the join, using the DATEDIFF function. Nesse caso, a junção é baseada em um intervalo de 5 segundos de dados de chamada.In this case, the join is based on a 5-second interval of call data.

  1. Altere a consulta no editor de código para a seguinte:Change the query in the code editor to the following:

    SELECT  System.Timestamp as Time, 
        CS1.CallingIMSI, 
        CS1.CallingNum as CallingNum1, 
        CS2.CallingNum as CallingNum2, 
        CS1.SwitchNum as Switch1, 
        CS2.SwitchNum as Switch2 
    FROM CallStream CS1 TIMESTAMP BY CallRecTime 
        JOIN CallStream CS2 TIMESTAMP BY CallRecTime 
        ON CS1.CallingIMSI = CS2.CallingIMSI 
        AND DATEDIFF(ss, CS1, CS2) BETWEEN 1 AND 5 
    WHERE CS1.SwitchNum != CS2.SwitchNum
    

    Essa consulta é como qualquer junção SQL, exceto para a função DATEDIFF na junção.This query is like any SQL join except for the DATEDIFF function in the join. Esta versão de DATEDIFF é específica para Streaming Analytics, e ela deve aparecer na cláusula ON...BETWEEN.This version of DATEDIFF is specific to Streaming Analytics, and it must appear in the ON...BETWEEN clause. Os parâmetros são uma unidade de tempo (segundos neste exemplo) e os aliases de duas fontes para a junção.The parameters are a time unit (seconds in this example) and the aliases of the two sources for the join. Isso é diferente da função DATEDIFF do padrão SQL.This is different from the standard SQL DATEDIFF function.

    A cláusula WHERE inclui a condição que sinaliza a chamada fraudulenta: as opções de origem não são iguais.The WHERE clause includes the condition that flags the fraudulent call: the originating switches are not the same.

  2. Clique em Testar novamente.Click Test again.

    Saída de trabalho do Stream Analytics para autojunção, mostrando seis registros gerados

  3. Clique em salvar para salvar a consulta de autojunção como parte do trabalho do Stream Analytics.Click Save to save the self-join query as part of the Streaming Analytics job. (Ele não salva os dados de exemplo.)(It doesn't save the sample data.)


    Save Stream Analytics query in portal

Criar um coletor de saída para armazenar os dados transformadosCreate an output sink to store transformed data

Você definiu um fluxo de eventos, uma entrada de hub de eventos para a ingestão de eventos e uma consulta para executar uma transformação no fluxo.You've defined an event stream, an event hub input to ingest events, and a query to perform a transformation over the stream. A última etapa é definir um coletor de saída para o trabalho — ou seja, um local para gravar o fluxo transformado.The last step is to define an output sink for the job—that is, a place to write the transformed stream to.

Você pode usar muitos recursos como coletores de saída — um banco de dados do SQL Server, o armazenamento de tabela, armazenamento do Data Lake, Power BI e até mesmo outro hub de eventos.You can use many resources as output sinks—a SQL Server database, table storage, Data Lake storage, Power BI, and even another event hub. Para este tutorial, você escreverá o fluxo no armazenamento de Blobs do Azure, que é uma opção típica para coletar informações de evento para análise posterior, já que inclui dados não estruturados.For this tutorial, you'll write the stream to Azure Blob Storage, which is a typical choice for collecting event information for later analysis, since it accommodates unstructured data.

Se você tiver uma conta de armazenamento de Blobs existente, poderá usá-la.If you have an existing blob storage account, you can use that. Para este tutorial, você aprenderá a criar uma nova conta de armazenamento.For this tutorial, you will learn how to create a new storage account.

Criar uma conta de Armazenamento de Blobs do AzureCreate an Azure Blob Storage account

  1. No canto superior esquerdo do portal do Azure, selecione Criar um recurso > Armazenamento > Conta de armazenamento.From the upper left-hand corner of the Azure portal, select Create a resource > Storage > Storage account. Preencha a página do trabalho da conta de armazenamento com o Nome definido como "asaehstorage", o Local definido como "Leste dos EUA 2" e o Grupo de recursos definido como "asa-eh-ns-rg" (hospede a conta de armazenamento no mesmo grupo de recursos que o trabalho do Streaming para melhorar o desempenho).Fill out the Storage account job page with Name set to "asaehstorage", Location set to "East US", Resource group set to "asa-eh-ns-rg" (host the storage account in the same resource group as the Streaming job for increased performance). As configurações restantes podem ser deixadas em seus valores padrão.The remaining settings can be left to their default values.

    Criar uma conta de armazenamento no portal do Azure

  2. No Portal do Azure, retorne para o painel do trabalho do Streaming Analytics.In the Azure portal, return to the Streaming Analytics job pane. (Se você fechou o painel, pesquise asa_frauddetection_job_demo no painel Todos os recursos.)(If you closed the pane, search for asa_frauddetection_job_demo in the All resources pane.)

  3. Na seção Topologia do Trabalho, clique na caixa Saída.In the Job Topology section, click the Output box.

  4. No painel Saídas, clique em Adicionar e selecione Armazenamento de Blobs.In the Outputs pane, click Add and select Blob storage. Em seguida, preencha a nova página de saída com as seguintes informações:Then fill out the New output page with the following information:

    ConfiguraçãoSetting Valor sugeridoSuggested value DescriçãoDescription
    Alias de saídaOutput alias CallStream-FraudulentCallsCallStream-FraudulentCalls Insira um nome para identificar a saída do trabalho.Enter a name to identify the job's output.
    SubscriptionSubscription <Your subscription> Selecione a assinatura do Azure que tem a conta de armazenamento criada.Select the Azure subscription that has the storage account you created. A conta de armazenamento pode estar na mesma assinatura ou em uma diferente.The storage account can be in the same or in a different subscription. Este exemplo pressupõe que você criou a conta de armazenamento na mesma assinatura.This example assumes that you have created storage account in the same subscription.
    Conta de armazenamentoStorage account asaehstorageasaehstorage Insira o nome da conta de armazenamento criada.Enter the name of the storage account you created.
    ContêinerContainer asa-fraudulentcalls-demoasa-fraudulentcalls-demo Escolha Criar novo e insira um nome de contêiner.Choose Create new and enter a container name.

    Create blob output for Stream Analytics job
  5. Clique em Save (Salvar).Click Save.

Iniciar o trabalho do Stream AnalyticsStart the Streaming Analytics job

Agora o trabalho está configurado.The job is now configured. Você especificou uma entrada (o hub de eventos), uma transformação (a consulta para procurar por chamadas fraudulentas) e uma saída (armazenamento de blobs).You've specified an input (the event hub), a transformation (the query to look for fraudulent calls), and an output (blob storage). Agora você pode iniciar o trabalho.You can now start the job.

  1. Verifique se o aplicativo TelcoGenerator está em execução.Make sure the TelcoGenerator app is running.

  2. No painel do trabalho, clique em Iniciar.In the job pane, click Start. No painel Iniciar trabalho, para Hora de início da saída do trabalho, selecione Agora.In the Start job pane, for Job output start time, select Now.

    Iniciar o trabalho do Stream Analytics

Analise os dados transformadosExamine the transformed data

Agora você tem um trabalho de Streaming Analytics completo.You now have a complete Streaming Analytics job. O trabalho é analisar um fluxo de metadados de chamada telefônica, procurando chamadas telefônicas fraudulentas em tempo real e gravar as informações sobre essas chamadas fraudulentas para armazenamento.The job is examining a stream of phone call metadata, looking for fraudulent phone calls in real time, and writing information about those fraudulent calls to storage.

Para concluir este tutorial, talvez você queira analisar os dados sendo capturados pelo trabalho de Stream Analytics.To complete this tutorial, you might want to look at the data being captured by the Streaming Analytics job. Os dados estão sendo gravados no armazenamento de Blobs do Azure em partes (arquivos).The data is being written to Azure Blog Storage in chunks (files). Você pode usar qualquer ferramenta que leia o armazenamento de Blobs do Azure.You can use any tool that reads Azure Blob Storage. Conforme observado na seção pré-requisitos, você pode usar extensões do Azure no Visual Studio, ou você pode usar uma ferramenta como Azure Storage Explorer ou Cerulean.As noted in the Prerequisites section, you can use Azure extensions in Visual Studio, or you can use a tool like Azure Storage Explorer or Cerulean.

Quando você analisar o conteúdo de um arquivo no armazenamento de blobs, você verá algo semelhante ao seguinte:When you examine the contents of a file in blob storage, you see something like the following:

Armazenamento de Blobs do Azure com saída de Streaming Analytics

Limpar os recursosClean up resources

Há artigos adicionais que dão continuidade o cenário de detecção de fraudes e usam os recursos que você criou neste tutorial.There are additional articles that continue with the fraud-detection scenario and use the resources you've created in this tutorial. Se você quiser continuar, consulte as sugestões nas Próximas etapas.If you want to continue, see the suggestions under Next steps.

No entanto, se estiver pronto e não precisar dos recursos que você criou, você pode excluí-los para acarretar cobranças desnecessárias do Azure.However, if you're done and you don't need the resources you've created, you can delete them so that you don't incur unnecessary Azure charges. Nesse caso, é recomendável que você faça o seguinte:In that case, we suggest that you do the following:

  1. Interrompa o trabalho do Stream Analytics.Stop the Streaming Analytics job. No painel Trabalhos, clique em Parar na parte superior.In the Jobs pane, click Stop at the top.
  2. Interrompa o aplicativo Telco Generator.Stop the Telco Generator app. Na janela de comando, onde você iniciou o aplicativo, pressione Ctrl + C.In the command window where you started the app, press Ctrl+C.
  3. Se você criou uma nova conta de armazenamento de blobs apenas para este tutorial, exclua essa conta.If you created a new blob storage account just for this tutorial, delete it.
  4. Exclua o trabalho do Stream Analytics.Delete the Streaming Analytics job.
  5. Exclua o hub de evento.Delete the event hub.
  6. Exclua o namespace do hub de eventos.Delete the event hub namespace.

Obtenha suporteGet support

Para obter mais assistência, experimente a página de Perguntas e respostas da Microsoft do Azure Stream Analytics.For further assistance, try the Microsoft Q&A question page for Azure Stream Analytics.

Próximas etapasNext steps

Você pode continuar este tutorial com o seguinte artigo:You can continue this tutorial with the following article:

Para obter mais informações sobre Stream Analytics em geral, leia estes artigos:For more information about Stream Analytics in general, see these articles: