Introduzione all’uso di Analisi di flusso di Azure: rilevamento di illeciti in tempo realeGet started using Azure Stream Analytics: Real-time fraud detection

Questa esercitazione offre una spiegazione completa sull'uso di Analisi di flusso di Azure.This tutorial provides an end-to-end illustration of how to use Azure Stream Analytics. Si apprenderà come:You learn how to:

  • Introdurre eventi di streaming in un'istanza degli hub eventi di Azure.Bring streaming events into an instance of Azure Event Hubs. In questa esercitazione si userà un'app che simula un flusso di record di metadati di un telefono cellulare.In this tutorial, you'll use an app that we provide that simulates a stream of mobile-phone metadata records.

  • Scrivere query di Analisi di flusso simili a SQL per trasformare i dati, aggregando informazioni o cercando modelli.Write SQL-like Stream Analytics queries to transform data, aggregating information or looking for patterns. Viene illustrato come usare una query per esaminare il flusso in ingresso e individuare chiamate potenzialmente fraudolente.You will see how to use a query to examine the incoming stream and look for calls that might be fraudulent.

  • Inviare i risultati a un sink di output (archiviazione) che è possibile analizzare per dettagli aggiuntivi.Send the results to an output sink (storage) that you can analyze for additional insights. In questo caso i dati della chiamata sospetta verranno inviati ad Archiviazione BLOB di Azure.In this case, you'll send the suspicious call data to Azure Blob storage.

In questa esercitazione si userà l'esempio di rilevamento delle frodi in tempo reale in base ai dati della chiamata telefonica.In this tutorial, we use the example of real-time fraud detection based on phone-call data. La tecnica che verrà illustrata è tuttavia applicabile anche ad altri tipi di rilevamenti di frodi, ad esempio quelle relative alle carte di credito o al furto di identità.But the technique we illustrate is also suited for other types of fraud detection, such as credit card fraud or identity theft.

Scenario: telecomunicazioni e rilevamento di illecito relativo alle SIM in tempo realeScenario: Telecommunications and SIM fraud detection in real time

Un'azienda di telecomunicazioni dispone di un volume di dati elevato relativamente alle chiamate in ingresso.A telecommunications company has a large volume of data for incoming calls. L'azienda intende rilevare chiamate fraudolente in tempo reale, in modo da poter inviare una notifica ai clienti o arrestare il servizio per un numero specifico.The company wants to detect fraudulent calls in real time so that they can notify customers or shut down service for a specific number. Un tipo di frode SIM riguarda più chiamate dalla stessa identità, più o meno alla stessa ora, ma in luoghi geograficamente diversi.One type of SIM fraud involves multiple calls from the same identity around the same time but in geographically different locations. Per rilevare questo tipo di frode, l'azienda deve esaminare i record delle chiamate in ingresso e cercare specifici modelli, in questo caso, chiamate più o meno alla stessa ora in paesi diversi.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. Qualsiasi record telefonico che rientri in questa categoria viene scritto nell'archiviazione per analisi successive.Any phone records that fall into this category are written to storage for subsequent analysis.

PrerequisitiPrerequisites

In questa esercitazione si simuleranno i dati di una chiamata telefonica usando un'app client che genera metadati di esempio di chiamate.In this tutorial, you'll simulate phone-call data by using a client app that generates sample phone call metadata. Alcuni record prodotti dall'app hanno l'aspetto di chiamate fraudolente.Some of the records that the app produces look like fraudulent calls.

Prima di iniziare, verificare di disporre degli elementi seguenti:Before you start, make sure you have the following:

  • Un account Azure.An Azure account.
  • L'app generatore degli eventi di chiamata.The call-event generator app. A tale scopo, scaricare il file TelcoGenerator.zip dall'Area download Microsoft.You can get this by downloading the TelcoGenerator.zip file from the Microsoft Download Center. Decomprimere il pacchetto in una cartella nel computer.Unzip this package into a folder on your computer. Per visualizzare il codice sorgente ed eseguire l'app in un debugger, è possibile ottenere il codice sorgente dell'app da 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.

    Nota

    Windows potrebbe bloccare il file con estensione zip scaricato.Windows might block the downloaded .zip file. Se non è possibile decomprimerlo, fare clic con il pulsante destro del mouse sul file e scegliere Proprietà.If you can't unzip it, right-click the file and select Properties. Se viene visualizzato il messaggio "Il file proviene da un altro computer. Per facilitare la protezione del computer, potrebbe essere bloccato", selezionare l'opzione Sblocca e quindi scegliere Applica.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.

Per esaminare i risultati del processo di Analisi di flusso, è anche necessario uno strumento per la visualizzazione del contenuto di un contenitore di Archiviazione BLOB di 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 si usa Visual Studio, è possibile usare Strumenti di Microsoft Azure per Visual Studio o Visual Studio Cloud Explorer.If you use Visual Studio, you can use Azure Tools for Visual Studio or Visual Studio Cloud Explorer. In alternativa, è possibile installare strumenti autonomi come Azure Storage Explorer o Azure Explorer.Alternatively, you can install standalone tools like Azure Storage Explorer or Azure Explorer.

Creare hub eventi di Azure per inserire eventiCreate an Azure event hubs to ingest events

Per analizzare un flusso di dati, inserirlo in Azure.To analyze a data stream, you ingest it into Azure. Un modo comune per inserire i dati consiste nell'usare gli hub eventi di Azure, che consentono di inserire milioni di eventi al secondo e quindi elaborare e archiviare le relative informazioni.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. Per questa esercitazione si creerà un hub eventi e quindi l'app generatore degli eventi di chiamata invierà i dati a tale hub.For this tutorial, you create an event hub and then have the call-event generator app send call data to that event hub. Per altre informazioni sugli hub eventi, vedere la documentazione del bus di servizio di Azure.For more about event hubs, see the Azure Service Bus documentation.

Nota

Per una versione più dettagliata di questa procedura, vedere Creare uno spazio dei nomi di Hub eventi e un hub eventi usando il Portale di Azure.For a more detailed version of this procedure, see Create an Event Hubs namespace and an event hub using the Azure portal.

Creare uno spazio dei nomi e un hub eventiCreate a namespace and event hub

In questa procedura si creerà uno spazio dei nomi dell'hub eventi e quindi si aggiungerà un hub eventi a tale spazio.In this procedure, you first create an event hub namespace, and then you add an event hub to that namespace. Gli spazi dei nomi degli hub eventi consentono di raggruppare in modo logico le istanze dei bus di eventi correlate.Event hub namespaces are used to logically group related event bus instances.

  1. Accedere al portale di Azure e fare clic su Nuovo > Internet delle cose > Hub eventi.Log in to the Azure portal and click New > Internet of Things > Event Hub.

  2. Nel riquadro Crea spazio dei nomi immettere un nome per lo spazio dei nomi, ad esempio <yourname>-eh-ns-demo.In the Create namespace pane, enter a namespace name such as <yourname>-eh-ns-demo. È possibile usare qualsiasi nome per lo spazio dei nomi, a condizione che sia valido per un URL e univoco in 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.

  3. Selezionare una sottoscrizione, creare o scegliere un gruppo di risorse e quindi fare clic su Crea.Select a subscription and create or choose a resource group, then click Create.

    Creare uno spazio dei nomi dell'hub eventi

  4. Al termine della distribuzione, lo spazio dei nomi dell'hub eventi è disponibile nell'elenco delle risorse di Azure.When the namespace has finished deploying, find the event hub namespace in your list of Azure resources.

  5. Scegliere il nuovo spazio dei nomi e, nel relativo riquadro, fare clic su Hub eventi.Click the new namespace, and in the namespace pane, click Event Hub.

    <span data-ttu-id="756ac-149">Pulsante Aggiungi hub eventi per creare un nuovo hub eventi</span><span class="sxs-lookup"><span data-stu-id="756ac-149">The Add Event Hub button for creating a new event hub</span></span>

  6. Assegnare il nome sa-eh-frauddetection-demo al nuovo hub eventi.Name the new event hub sa-eh-frauddetection-demo. È possibile usare un nome diverso.You can use a different name. In questo caso, tenerne traccia, poiché sarà necessario in un secondo momento.If you do, make a note of it, because you need the name later. Per ora non è necessario impostare altre opzioni per l'hub eventi.You don't need to set any other options for the event hub right now.

    Pannello per creare un nuovo hub eventi

  7. Fare clic su Crea.Click Create.

    Concedere l'accesso all'hub eventi e ottenere una stringa di connessioneGrant access to the event hub and get a connection string

Prima che un processo possa inviare dati a un hub eventi, è necessario che per l'hub siano configurati criteri che consentano l'accesso appropriato.Before a process can send data to an event hub, the event hub must have a policy that allows appropriate access. I criteri di accesso generano una stringa di connessione che include informazioni di autorizzazione.The access policy produces a connection string that includes authorization information.

  1. Nel riquadro dello spazio dei nomi dell'evento fare clic su Hub eventi e quindi sul nome del nuovo hub eventi.In the event namespace pane, click Event Hubs and then click the name of your new event hub.

  2. Nel riquadro dell'hub eventi fare clic su Criteri di accesso condiviso e quindi su + Aggiungi.In the event hub pane, click Shared access policies and then click + Add.

    Nota

    Verificare di usare l'hub eventi e non lo spazio dei nomi.Make sure you're working with the event hub, not the event hub namespace.

  3. Aggiungere criteri denominati sa-policy-manage-demo e per Attestazione selezionare Gestisci.Add a policy named sa-policy-manage-demo and for Claim, select Manage.

    Pannello per creare nuovi criteri di accesso all'hub eventi

  4. Fare clic su Crea.Click Create.

  5. Dopo aver distribuito i criteri, fare clic nell'elenco dei criteri di accesso condiviso.After the policy has been deployed, click it in the list of shared access policies.

  6. Individuare la casella con l'etichetta CONNECTION STRING-PRIMARY KEY e fare clic sul pulsante Copia accanto alla stringa di connessione.Find the box labeled CONNECTION STRING-PRIMARY KEY and click the copy button next to the connection string.

    Copia della chiave della stringa di connessione primaria dai criteri di accesso

  7. Incollare la stringa di connessione in un editor di testo.Paste the connection string into a text editor. Sarà necessario usare questa stringa nella sezione successiva, dopo avervi apportato alcune piccole modifiche.You need this connection string for the next section, after you make some small edits to it.

    La stringa di connessione ha un aspetto simile al seguente:The connection string looks like this:

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

    Si noti che la stringa di connessione contiene più coppie chiave-valore, separate da punti e virgola: Endpoint, SharedAccessKeyName, SharedAccessKey e EntityPath.Notice that the connection string contains multiple key-value pairs, separated with semicolons: Endpoint, SharedAccessKeyName, SharedAccessKey, and EntityPath.

Configurare e avviare l'applicazione di generazione di eventiConfigure and start the event generator application

Prima di avviare l'app TelcoGenerator, configurarla per l'invio di record delle chiamate all'hub eventi creato.Before you start the TelcoGenerator app, you configure it so that it will send call records to the event hub you created.

Configurare l'app TelcoGeneratorConfigure the TelcoGeneratorapp

  1. Nell'editor in cui è stata copiata la stringa di connessione annotare il valore EntityPath e quindi rimuovere la coppia EntityPath (non dimenticare di rimuovere il punto e virgola che la precede).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. Nella cartella in cui è stato decompresso il file TelcoGenerator.zip aprire il file telcodatagen.exe.config in un editor.In the folder where you unzipped the TelcoGenerator.zip file, open the telcodatagen.exe.config file in an editor. È presente più di un file con estensione config, di conseguenza è necessario assicurarsi di aprire quello giusto.(There is more than one .config file, so be sure that you open the right one.)

  3. Nell'elemento <appSettings>:In the <appSettings> element:

    • Impostare il valore della chiave EventHubName sul nome dell'hub eventi (ovvero il valore del percorso dell'entità).Set the value of the EventHubName key to the event hub name (that is, to the value of the entity path).
    • Impostare il valore della chiave Microsoft.ServiceBus.ConnectionString sulla stringa di connessione.Set the value of the Microsoft.ServiceBus.ConnectionString key to the connection string.

    La sezione <appSettings> dovrebbe essere simile all'esempio seguente.The <appSettings> section will look like the following example. Per maggiore chiarezza è stato eseguito il wrapping delle righe e alcuni caratteri sono stati rimossi dal token di autorizzazione.(For clarity, we wrapped the lines and removed some characters from the authorization token.)

    File di configurazione dell'app TelcoGenerator che mostra la stringa di connessione e il nome dell'hub eventi

  4. Salvare il file.Save the file.

Avviare l'appStart the app

  1. Aprire una finestra di comando e passare alla cartella in cui è stata decompressa l'app TelcoGenerator.Open a command window and change to the folder where the TelcoGenerator app is unzipped.
  2. Immettere il comando seguente:Enter the following command:

    telcodatagen.exe 1000 .2 2
    

    I parametri sono i seguenti:The parameters are:

    • Numero di CDR all'ora.Number of CDRs per hour.
    • Probabilità di frode della scheda SIM: frequenza, in percentuale di tutte le chiamate, con cui l'app dovrebbe simulare una chiamata fraudolenta.SIM Card Fraud Probability: How often, as a percentage of all calls, that the app should simulate a fraudulent call. Il valore 0,2 significa che circa il 20% dei record delle chiamate apparirà come fraudolento.The value .2 means that about 20% of the call records will look fraudulent.
    • Durata in ore.Duration in hours. Numero di ore di esecuzione dell'app.The number of hours that the app should run. È anche possibile arrestare l'app in qualsiasi momento premendo CTRL+C nella riga di comando.You can also stop the app any time by pressing Ctrl+C at the command line.

    Dopo alcuni secondi, l'app inizierà a visualizzare i record delle chiamate mentre ne esegue l'invio all'hub eventi.After a few seconds, the app starts displaying phone call records on the screen as it sends them to the event hub.

Di seguito sono riportati alcuni campi chiave che verranno usati in questa applicazione di rilevamento di frodi in tempo reale:Some of the key fields that you will be using in this real-time fraud detection application are the following:

RecordRecord DefinizioneDefinition
CallrecTime Timestamp dell'ora di inizio della chiamata.The timestamp for the call start time.
SwitchNum Commutatore telefonico usato per la connessione della chiamata.The telephone switch used to connect the call. Per questo esempio i commutatori sono stringhe che rappresentano il paese di origine (Stati Uniti, Cina, Regno Unito, Germania o Australia).For this example, the switches are strings that represent the country of origin (US, China, UK, Germany, or Australia).
CallingNum Numero di telefono del chiamante.The phone number of the caller.
CallingIMSI Codice IMSI (International Mobile Subscriber Identity).The International Mobile Subscriber Identity (IMSI). Si tratta dell'identificatore univoco del chiamante.This is the Unique identifier of the caller.
CalledNum Numero di telefono del destinatario della chiamata.The phone number of the call recipient.
CalledIMSI Codice IMSI (International Mobile Subscriber Identity).International Mobile Subscriber Identity (IMSI). Si tratta dell'identificatore univoco del destinatario della chiamata.This is the unique identifier of the call recipient.

Creare un processo di Analisi di flusso per gestire i dati di streamingCreate a Stream Analytics job to manage streaming data

Dopo aver creato un flusso di eventi di chiamata, sarà possibile configurare un processo di Analisi di flusso.Now that you have a stream of call events, you can set up a Stream Analytics job. Il processo leggerà i dati dall'hub eventi configurato.The job will read data from the event hub that you set up.

Creare il processoCreate the job

  1. Nel portale di Azure fare clic su Nuovo > Internet delle cose > Processo di Analisi di flusso.In the Azure portal, click New > Internet of Things > Stream Analytics job.

  2. Denominare il processo sa_frauddetection_job_demo, specificare una sottoscrizione, un gruppo di risorse e un percorso.Name the job sa_frauddetection_job_demo, specify a subscription, resource group, and location.

    È consigliabile posizionare il processo e l'hub eventi nella stessa area per ottenere prestazioni ottimali ed evitare di pagare il trasferimento dei dati tra aree.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.

    Creare un nuovo processo di Analisi di flusso

  3. Fare clic su Crea.Click Create.

    Verrà creato il processo e il portale visualizzerà i relativi dettagli.The job is created and the portal displays job details. Il processo non è ancora in esecuzione: è necessario configurarlo prima di poterlo avviare.Nothing is running yet, though—you have to configure the job before it can be started.

Configurare l'input del processoConfigure job input

  1. Nel dashboard o nel riquadro Tutte le risorse trovare e selezionare il processo di Analisi di flusso sa_frauddetection_job_demo.In the dashboard or the All resources pane, find and select the sa_frauddetection_job_demo Stream Analytics job.
  2. Nella sezione Topologia processo del riquadro del processo di Analisi di flusso selezionare la casella Input.In the Job Topology section of the Stream Analytics job pane, click the Input box.

    Casella di input in Topologia nel riquadro del processo di Analisi di flusso

  3. Fare clic su + Aggiungi e compilare il riquadro con questi valori:Click + Add and then fill out the pane with these values:

    • Alias di input: usare il nome CallStream.Input alias: Use the name CallStream. Se si usa un nome diverso, tenerne traccia, poiché sarà necessario in un secondo momento.If you use a different name, make a note of it because you'll need it later.
    • Tipo di origine: selezionare Flusso dati.Source type: Select Data stream. Dati di riferimento si riferisce a dati di ricerca statici, che non verranno usati in questa esercitazione.(Reference data refers to static lookup data, which you won't use in this tutorial.)
    • Origine: selezionare Hub eventi.Source: Select Event hub.
    • Opzioni di importazione: selezionare Usa l'hub eventi della sottoscrizione corrente.Import option: Select Use event hub from current subscription.
    • Spazio dei nomi del bus di servizio: selezionare lo spazio dei nomi dell'hub eventi creato in precedenza (<yourname>-eh-ns-demo).Service bus namespace: Select the event hub namespace that you created earlier (<yourname>-eh-ns-demo).
    • Hub eventi: selezionare l'hub eventi creato in precedenza (sa-eh-frauddetection-demo).Event hub: Select the event hub that you created earlier (sa-eh-frauddetection-demo).
    • Nome criteri hub eventi: selezionare i criteri di accesso creati in precedenza (sa-policy-manage-demo).Event hub policy name: Select the access policy that you created earlier (sa-policy-manage-demo).

      Creare un nuovo input per il processo di Analisi di flusso

  4. Fare clic su Crea.Click Create.

Creare query per trasformare i dati in tempo realeCreate queries to transform real-time data

A questo punto il processo di Analisi di flusso è configurato per la lettura di un flusso di dati in ingresso.At this point, you have a Stream Analytics job set up to read an incoming data stream. Il passaggio successivo consiste nel creare una trasformazione che analizzi i dati in tempo reale.The next step is to create a transformation that analyzes the data in real time. A tale scopo, creare una query.You do this by creating a query. Analisi di flusso supporta un semplice modello di query dichiarative che descrive le trasformazioni per l'elaborazione in tempo reale.Stream Analytics supports a simple, declarative query model that describes transformations for real-time processing. Le query usano un linguaggio simile a SQL che include alcune estensioni specifiche di Analisi di flusso.The queries use a SQL-like language that has some extensions specific to stream analytics.

Una query semplice potrebbe solamente leggere tutti i dati in ingresso.A simple query might just read all the incoming data. Tuttavia, spesso si creano query che cercano dati specifici o relazioni nei dati.However, you often create queries that look for specific data or for relationships in the data. In questa sezione dell'esercitazione si creeranno e testeranno varie query per apprendere alcuni modi in cui trasformare un flusso di input per l'analisi.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.

Le query qui create visualizzeranno semplicemente i dati trasformati.The queries you create here will just display the transformed data to the screen. In una sezione successiva si configureranno un sink di output e una query che scrive in tale sink i dati trasformati.In a later section, you'll configure an output sink and a query that writes the transformed data to that sink.

Per altre informazioni sul linguaggio, vedere le Informazioni di riferimento sul linguaggio di query di Analisi di flusso di Azure.To learn more about the language, see the Azure Stream Analytics Query Language Reference.

Ottenere dati di esempio per testare le queryGet sample data for testing queries

L'app TelcoGenerator invia i record delle chiamate all'hub eventi e il processo di Analisi di flusso viene configurato per la lettura dall'hub eventi.The TelcoGenerator app is sending call records to the event hub, and your Stream Analytics job is configured to read from the event hub. È possibile usare una query per testare il processo e verificare che esegua correttamente le operazioni di lettura.You can use a query to test the job to make sure that it's reading correctly. Per testare una query nella console di Azure sono necessari dati di esempio.To test a query in the Azure console, you need sample data. Per questa procedura dettagliata si estrarranno dati di esempio dal flusso in arrivo nell'hub eventi.For this walkthrough, you'll extract sample data from the stream that's coming into the event hub.

  1. Verificare che l'app TelcoGenerator sia in esecuzione e generi record delle chiamate.Make sure that the TelcoGenerator app is running and producing call records.
  2. Nel portale tornare al riquadro del processo di Analisi di flusso.In the portal, return to the Streaming Analytics job pane. Se il riquadro è stato chiuso, cercare sa_frauddetection_job_demo nel riquadro Tutte le risorse.(If you closed the pane, search for sa_frauddetection_job_demo in the All resources pane.)
  3. Fare clic sulla casella Query.Click the Query box. Azure elenca gli input e gli output configurati per il processo e consente di creare una query per trasformare il flusso di input nel momento in cui viene inviato all'output.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. Nel riquadro Query fare clic sui puntini di sospensione accanto all'input CallStream e quindi selezionare Campiona dati da input.In the Query pane, click the dots next to the CallStream input and then select Sample data from input.

    Voci di menu per usare dati di esempio per la voce del processo di Analisi di flusso, con l'opzione "Campiona dati da input" selezionata

    Verrà aperto un riquadro che consente di specificare la quantità di dati di esempio da ottenere, definita in termini di durata della lettura del flusso di input.This opens a pane that lets you specify how much sample data to get, defined in terms of how long to read the input stream.

  5. Impostare Minuti su 3 e quindi fare clic su OK.Set Minutes to 3 and then click OK.

    Opzioni per il campionamento del flusso di input, con l'opzione "3 minuti" selezionata.

    Azure campiona i dati dal flusso di input per una durata di tre minuti e invia una notifica quando i dati di esempio sono pronti.Azure samples 3 minutes' worth of data from the input stream and notifies you when the sample data is ready. Questa operazione richiede un breve tempo.(This takes a short while.)

I dati di esempio vengono archiviati temporaneamente e sono disponibili finché rimane aperta la finestra di query.The sample data is stored temporarily and is available while you have the query window open. Se si chiude la finestra di query, i dati di esempio verranno rimossi e sarà necessario creare un nuovo set di dati.If you close the query window, the sample data is discarded, and you'll have to create a new set of sample data.

In alternativa, è possibile ottenere un file con estensione json che contiene dati di esempio da GitHub e quindi caricare il file con estensione json da usare come dati di esempio per l'input 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.

Test mediante una query pass-throughTest using a pass-through query

Per archiviare ogni evento, è possibile usare una query pass-through per leggere tutti i campi nel payload dell'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. Nella finestra di query immettere la query seguente:In the query window, enter this query:

     SELECT 
         *
     FROM 
         CallStream
    

    Nota

    Come con SQL, le parole chiave non effettuano distinzione tra maiuscole e minuscole e gli spazi non sono rilevanti.As with SQL, keywords are not case-sensitive, and whitespace is not significant.

    In questa query CallStream è l'alias specificato quando è stato creato l'input.In this query, CallStream is the alias that you specified when you created the input. In presenza di un alias diverso, usare questo nome.If you used a different alias, use that name instead.

  2. Fare clic su Test.Click Test.

    Il processo di Analisi di flusso esegue la query a fronte dei dati di esempio e visualizza l'output nella parte inferiore della finestra,The Stream Analytics job runs the query against the sample data and displays the output at the bottom of the window. a indicare che l'hub eventi e il processo di Analisi di flusso sono configurati correttamente.This tells you that the event hub and the Streaming Analytics job are configured correctly. Come già indicato, in seguito si creerà un sink di output in cui la query potrà scrivere dati.(As noted, later you'll create an output sink that the query can write data to.)

    Output del processo di Analisi di flusso con 73 record generati

    Il numero esatto di record visualizzati dipenderà dal numero di record acquisiti nell'esempio di 3 minuti.The exact number of records you see will depend on how many records were captured in your 3-minute sample.

Ridurre il numero di campi usando una proiezione di colonnaReduce the number of fields using a column projection

In molti casi, l'analisi non necessita di tutte le colonne dal flusso di input.In many cases, your analysis doesn't need all the columns from the input stream. È possibile usare una query per proiettare un set di campi restituiti ridotto rispetto alla query pass-through.You can use a query to project a smaller set of returned fields than in the pass-through query.

  1. Modificare la query nell'editor di codice nel modo seguente:Change the query in the code editor to the following:

     SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNum, CalledNum 
     FROM 
         CallStream
    
  2. Fare di nuovo clic su Test.Click Test again.

    Output del processo di Analisi di flusso per la proiezione con 25 record generati

Numero di chiamate in ingresso per area: finestra a cascata con aggregazioneCount incoming calls by region: Tumbling window with aggregation

Si supponga di voler contare il numero di chiamate in ingresso per ogni area.Suppose you want to count the number of incoming calls per region. Nei dati di streaming, se si vuole eseguire funzioni di aggregazione come il conteggio, è necessario segmentare il flusso in unità temporali (poiché il flusso di dati stesso è in effetti infinito).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). A tale scopo, usare una funzione finestra di Analisi di flusso.You do this using a Streaming Analytics window function. Sarà quindi possibile usare i dati all'interno di tale finestra come unità.You can then work with the data inside that window as a unit.

Per questa trasformazione si intende creare una sequenza di finestre temporali che non si sovrappongano. Ogni finestra includerà un set distinto di dati che è possibile raggruppare e aggregare.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. A questo tipo di finestra si fa riferimento con la locuzione finestra a cascata.This type of window is referred to as a Tumbling window . All'interno della finestra a cascata è possibile ottenere un conteggio delle chiamate in ingresso raggruppate per SwitchNum, che rappresenta il paese in cui la chiamata ha avuto origine.Within the Tumbling window, you can get a count of the incoming calls grouped by SwitchNum, which represents the country where the call originated.

  1. Modificare la query nell'editor di codice nel modo seguente: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
    

    Questa query usa la parola chiave Timestamp By nella clausola FROM per specificare il campo del timestamp nel flusso di input da usare per definire la finestra a 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. In questo caso la finestra divide i dati in segmenti per il campo CallRecTime in ogni record.In this case, the window divides the data into segments by the CallRecTime field in each record. Se non è specificato alcun campo, l'operazione di windowing usa l'ora in cui ogni evento arriva all'hub.(If no field is specified, the windowing operation uses the time that each event arrives at the event hub. Vedere la sezione relativa a tempo di arrivo e tempo di applicazione in Informazioni di riferimento sul linguaggio di query per l'analisi di flusso.See "Arrival Time Vs Application Time" in Stream Analytics Query Language Reference.

    La proiezione include System.Timestamp, che restituisce un timestamp per la fine di ogni finestra.The projection includes System.Timestamp, which returns a timestamp for the end of each window.

    Per specificare che si intende usare una finestra a cascata, usare la funzione TUMBLINGWINDOW nella clausola GROUP BY.To specify that you want to use a Tumbling window, you use the TUMBLINGWINDOW function in the GROUP BYclause. Specificare nella funzione un'unità di tempo (da un microsecondo a un giorno) e una dimensione della finestra (numero di unità).In the function, you specify a time unit (anywhere from a microsecond to a day) and a window size (how many units). In questo esempio la finestra a cascata è costituita da intervalli di 5 secondi, per ottenere un conteggio in base al paese per chiamate ogni 5 secondi.In this example, the Tumbling window consists of 5-second intervals, so you will get a count by country for every 5 seconds' worth of calls.

  2. Fare di nuovo clic su Test.Click Test again. Si noti nei risultati che i timestamp in WindowEnd sono in incrementi di 5 secondi.In the results, notice that the timestamps under WindowEnd are in 5-second increments.

    Output del processo di Analisi di flusso per l'aggregazione con 13 record generati

Rilevare una frode SIM mediante self-joinDetect SIM fraud using a self-join

Per questo esempio è possibile considerare come uso fraudolento le chiamate che provengono dallo stesso utente ma in posizioni diverse, a 5 secondi l'una dall'altra.For this example, we can consider fraudulent usage to be calls that originate from the same user but in different locations within 5 seconds of one another. Ad esempio, lo stesso utente non può eseguire legittimamente una chiamata dagli Stati Uniti e dall'Australia nello stesso momento.For example, the same user can't legitimately make a call from the US and Australia at the same time.

Per verificare questi casi, è possibile usare un self-join dei dati di streaming per creare un join del flusso a se stesso in base al valore 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. Sarà quindi possibile cercare i record delle chiamate in cui il valore CallingIMSI (numero di origine) è lo stesso, ma il valore SwitchNum (paese di origine) non coincide.You can then look for call records where the CallingIMSI value (the originating number) is the same, but the SwitchNum value (country of origin) is not the same.

Quando si usa un join con i dati di streaming, il join deve garantire alcuni limiti per la distanza di separazione delle righe corrispondenti nel 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. Come indicato in precedenza, i dati di streaming sono effettivamente infiniti. I limiti di tempo per la relazione sono specificati all'interno della clausola ON del join usando la funzione 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 . In questo caso il join è basato su un intervallo di 5 secondi di dati di chiamate.In this case, the join is based on a 5-second interval of call data .

  1. Modificare la query nell'editor di codice nel modo seguente: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
    

    Questa query è simile a un join SQL, ad eccezione della funzione DATEDIFF nel join.This query is like any SQL join except for the DATEDIFF function in the join. Si tratta di una versione di DATEDIFF specifica di Analisi di flusso che deve apparire nella clausola ON...BETWEEN.This is a version of DATEDIFF that's specific to Streaming Analytics, and it must appear in the ON...BETWEEN clause. I parametri sono un'unità di tempo (secondi in questo esempio) e gli alias delle due origini per il join.The parameters are a time unit (seconds in this example) and the aliases of the two sources for the join. Si tratta di una differenza rispetto alla funzione DATEDIFF SQL standard.(This is different from the standard SQL DATEDIFF function.)

    La clausola WHERE include la condizione che contrassegna la chiamata fraudolenta: i commutatori di origine non sono uguali.The WHERE clause includes the condition that flags the fraudulent call: the originating switches are not the same.

  2. Fare di nuovo clic su Test.Click Test again.

    Output del processo di Analisi di flusso per il self-join con 6 record generati

  3. Fare clic su Salva.Click Save. In questo modo la query di self-join viene salvata nell'ambito del processo di Analisi di flusso.This saves the self-join query as part of the Streaming Analytics job. I dati di esempio non vengono salvati.(It doesn't save the sample data.)

    Salvare il processo di Analisi di flusso

Creare un sink di output per archiviare i dati trasformatiCreate an output sink to store transformed data

Sono stati definiti un flusso di eventi, un input dell'hub eventi per inserire gli eventi e una query per eseguire una trasformazione nel flusso.You've defined an event stream, an event hub input to ingest events, and a query to perform a transformation over the stream. L'ultimo passaggio consiste nel definire un sink di output per il processo, ovvero un percorso in cui scrivere il flusso trasformato.The last step is to define an output sink for the job—that is, a place to write the transformed stream to.

È possibile usare molte risorse come sink di output: un database di SQL Server, un'archiviazione tabelle, un'archiviazione Data Lake, Power BI e addirittura un altro hub eventi.You can use many resources as output sinks—a SQL Server database, table storage, Data Lake storage, Power BI, and even another event hub. Per questa esercitazione si scriverà il flusso in Archiviazione BLOB di Azure, una scelta tipica per raccogliere informazioni di eventi per l'analisi successiva, in quanto include dati non strutturati.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 esiste già un account di archiviazione BLOB, è possibile usarlo.If you have an existing blob storage account, you can use that. Per questa esercitazione verrà spiegato come creare un nuovo account di archiviazione solo in questo caso.For this tutorial, we'll show you how to create a new storage account just for this tutorial.

Creare un account Archiviazione BLOB di AzureCreate an Azure Blob Storage account

  1. Nel portale di Azure tornare al riquadro del processo di Analisi di flusso.In the Azure portal, return to the Streaming Analytics job pane. Se il riquadro è stato chiuso, cercare sa_frauddetection_job_demo nel riquadro Tutte le risorse.(If you closed the pane, search for sa_frauddetection_job_demo in the All resources pane.)
  2. Nella sezione Topologia processo fare clic sulla casella Output.In the Job Topology section, click the Output box.
  3. Nel riquadro Output fare clic su + Aggiungi e quindi compilare il riquadro con questi valori:In the Outputs pane, click + Add and then fill out the pane with these values:

    • Alias di output: usare il nome CallStream-FraudulentCalls.Output alias: Use the name CallStream-FraudulentCalls.
    • Sink: selezionare Archivio BLOB.Sink: Select Blob storage.
    • Opzioni di importazione: selezionare Usa l'archiviazione BLOB della sottoscrizione corrente.Import options: Select Use blob storage from current subscription.
    • Account di archiviazione.Storage account. Selezionare Crea un nuovo account di archiviazione.Select Create new storage account.
    • Account di archiviazione (seconda casella).Storage account (second box). Immettere YOURNAMEsademo, dove YOURNAME rappresenta il nome o un'altra stringa univoca.Enter YOURNAMEsademo, where YOURNAME is your name or another unique string. Il nome può contenere solo lettere minuscole e numeri e deve essere univoco in Azure.The name can use only lowercase letters and numbers, and it must be unique across Azure.
    • Contenitore.Container. Immettere sa-fraudulentcalls-demo.Enter sa-fraudulentcalls-demo. Il nome dell'account di archiviazione e il nome del contenitore vengono usati insieme per fornire un URI per l'archiviazione BLOB, in modo simile al seguente:The storage account name and container name are used together to provide a URI for the blob storage, like this:

      http://yournamesademo.blob.core.windows.net/sa-fraudulentcalls-demo/...

      Riquadro "Nuovo output" per il processo di Analisi di flusso

  4. Fare clic su Crea.Click Create.

    Azure crea l'account di archiviazione e genera automaticamente una chiave.Azure creates the storage account and generates a key automatically.

  5. Chiudere il riquadro Output.Close the Outputs pane.

Avviare il processo di Analisi di flussoStart the Streaming Analytics job

Ora il processo è configurato.The job is now configured. Sono stati specificati un input (l'hub eventi), una trasformazione (la query per individuare le chiamate fraudolente) e un output (archiviazione BLOB).You've specified an input (the event hub), a transformation (the query to look for fraudulent calls), and an output (blob storage). È ora possibile avviare il processo.You can now start the job.

  1. Verificare che l'app TelcoGenerator sia in esecuzione.Make sure the TelcoGenerator app is running.

  2. Nel riquadro del processo fare clic su Avvia.In the job pane, click Start.

    Avviare il processo di analisi di flusso

  3. Nel riquadro Avvia processo, per Ora di inizio dell'output del processo, selezionare Ora.In the Start job pane, for Job output start time, select Now.

  4. Fare clic su Avvia.Click Start.

    Riquadro "Avvia processo" per il processo di Analisi di flusso

    Azure informa l'utente quando il processo viene avviato e, nel riquadro del processo, lo stato viene visualizzato come In esecuzione.Azure notifies you when the job has started, and in the job pane, the status is displayed as Running.

    Stato del processo di Analisi di flusso indicante "In esecuzione"

Esaminare i dati trasformatiExamine the transformed data

È stato creato un processo di Analisi di flusso completo.You now have a complete Streaming Analytics job. Il processo esamina un flusso di metadati di chiamate telefoniche per individuare le chiamate fraudolente in tempo reale e scrivere informazioni su queste chiamate nell'archiviazione.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.

Per completare questa esercitazione, è consigliabile osservare i dati acquisiti dal processo di Analisi di flusso.To complete this tutorial, you might want to look at the data being captured by the Streaming Analytics job. I dati vengono scritti in Archiviazione BLOB di Azure in blocchi (file).The data is being written to Azure Blog Storage in chunks (files). È possibile usare qualsiasi strumento che legga Archiviazione BLOB di Azure.You can use any tool that reads Azure Blob Storage. Come indicato nella sezione Prerequisiti, è possibile usare le estensioni di Azure in Visual Studio oppure uno strumento come Azure Storage Explorer o Azure Explorer.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 Azure Explorer.

Quando si esamina il contenuto di un file nell'archiviazione BLOB, viene visualizzato quanto segue:When you examine the contents of a file in blob storage, you see something like the following :

Archiviazione BLOB di Azure con output di Analisi di flusso

Pulire le risorseClean up resources

Sono disponibili altri articoli che approfondiscono lo scenario di rilevamento di frodi e usano le risorse create in questa esercitazione.We have additional articles that continue with the fraud-detection scenario and that use the resources that you've created in this tutorial. Per procedere, vedere i suggerimenti in Passaggi successivi più avanti.If you want to continue, see the suggestions under Next steps later.

Se tuttavia non si desidera proseguire e le risorse create non sono necessarie, è possibile eliminarle per non incorrere in inutili addebiti da parte di 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. In tal caso, è consigliabile procedere nel modo seguente:In that case, we suggest that you do the following:

  1. Arrestare il processo di Analisi di flusso.Stop the Streaming Analytics job. Nel riquadro Processi fare clic su Arresta nella parte superiore.In the Jobs pane, click Stop at the top.
  2. Arrestare l'app TelcoGenerator.Stop the Telco Generator app. Nella finestra di comando in cui è stato avviata l'applicazione premere CTRL+C.In the command window where you started the app, press Ctrl+C.
  3. Se è stato creato un nuovo account di archiviazione BLOB solo per questa esercitazione, eliminarlo.If you created a new blob storage account just for this tutorial, delete it.
  4. Eliminare il processo di Analisi di flusso.Delete the Streaming Analytics job.
  5. Eliminare l'hub eventi.Delete the event hub.
  6. Eliminare lo spazio dei nomi dell'hub eventi.Delete the event hub namespace.

SupportoGet support

Per ulteriore assistenza, provare il Forum di Analisi dei flussi di Azure.For further assistance, try our Azure Stream Analytics forum.

Passaggi successiviNext steps

È possibile continuare questa esercitazione con l'articolo seguente:You can continue this tutorial with the following article:

Per altre informazioni generiche su Analisi di flusso, vedere questi articoli:For more information about Stream Analytics in general, see these articles: