Bien démarrer avec Azure Stream Analytics : Détection des fraudes en temps réelGet started using Azure Stream Analytics: Real-time fraud detection

Ce didacticiel illustre de bout en bout l’utilisation d’Azure Stream Analytics.This tutorial provides an end-to-end illustration of how to use Azure Stream Analytics. Vous allez apprendre à effectuer les actions suivantes :You learn how to:

  • Insérer des événements de flux dans une instance d’Azure Event Hubs.Bring streaming events into an instance of Azure Event Hubs. Dans ce tutoriel, vous allez utiliser une application qui simule un flux d’enregistrements de métadonnées de téléphone mobile.In this tutorial, you'll use an app that simulates a stream of mobile-phone metadata records.

  • Écrire des requêtes Stream Analytics de type SQL pour transformer des données, en agrégeant des informations ou en recherchant des modèles.Write SQL-like Stream Analytics queries to transform data, aggregating information or looking for patterns. Vous allez apprendre à utiliser une requête pour examiner le flux entrant et rechercher les appels pouvant être frauduleux.You will see how to use a query to examine the incoming stream and look for calls that might be fraudulent.

  • Envoyer les résultats vers un récepteur de sortie (stockage) que vous pouvez analyser pour obtenir des informations supplémentaires.Send the results to an output sink (storage) that you can analyze for additional insights. Dans ce cas, vous enverrez les données des appels suspects au stockage Blob Azure.In this case, you'll send the suspicious call data to Azure Blob storage.

Dans ce didacticiel, nous utilisons l’exemple de la détection de fraudes en temps réel sur la base de données d’appels téléphoniques.This tutorial uses the example of real-time fraud detection based on phone-call data. La technique illustrée convient également à d’autres types de détection de fraude, comme l’usurpation d’identité ou la fraude à la carte de crédit.The technique illustrated is also suited for other types of fraud detection, such as credit card fraud or identity theft.

Scénario : Détection des fraudes de télécommunication et SIM en temps réelScenario: Telecommunications and SIM fraud detection in real time

Une société de télécommunication dispose d’un volume important de données pour les appels entrants.A telecommunications company has a large volume of data for incoming calls. La société souhaite détecter les appels frauduleux en temps réel afin de pouvoir informer ses clients ou arrêter un service à partir d’un nombre donné.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 type de fraude à la carte SIM implique plusieurs appels simultanés provenant d’une même identité, mais à des emplacements géographiquement distincts.One type of SIM fraud involves multiple calls from the same identity around the same time but in geographically different locations. Pour détecter ce type de fraude, la société doit examiner les enregistrements téléphoniques entrants et rechercher des modèles spécifiques, dans ce cas, des appels passés en même temps dans différents pays/régions.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. Tous les enregistrements téléphoniques qui s’inscrivent dans cette catégorie sont écrits dans l’espace de stockage en vue d’une analyse ultérieure.Any phone records that fall into this category are written to storage for subsequent analysis.

Conditions préalablesPrerequisites

Dans ce didacticiel, vous allez simuler des données d’appels téléphoniques à l’aide d’une application cliente générant un exemple de métadonnées d’appel téléphonique.In this tutorial, you'll simulate phone-call data by using a client app that generates sample phone call metadata. Certains des enregistrements produits par l’application ressemblent à des appels frauduleux.Some of the records that the app produces look like fraudulent calls.

Avant de commencer, veillez à disposer des éléments qui suivent :Before you start, make sure you have the following:

  • Un compte Azure.An Azure account.

  • L’application de génération d’événements d’appel téléphonique, TelcoGenerator.zip, qui peut être téléchargée dans le Centre de téléchargement Microsoft.The call-event generator app, TelcoGenerator.zip, which can be downloaded from the Microsoft Download Center. Décompressez ce package dans un dossier de votre ordinateur.Unzip this package into a folder on your computer. Pour afficher le code source et exécuter l’application dans un débogueur, vous pouvez obtenir le code source de l’application dans 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.

    Notes

    Windows peut bloquer le fichier .zip téléchargé.Windows might block the downloaded .zip file. Si vous ne pouvez pas le décompresser, cliquez avec le bouton droit sur le fichier et sélectionnez Propriétés.If you can't unzip it, right-click the file and select Properties. Si le message « Ce fichier provient d’un autre ordinateur et peut éventuellement être bloqué pour protéger cet ordinateur. » est affiché, sélectionnez l’option Débloquer, puis cliquez sur Appliquer.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.

Si vous souhaitez examiner les résultats du travail Stream Analytics, vous avez également besoin d’un outil pour afficher le contenu d’un conteneur de stockage Blob 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. Si vous utilisez Visual Studio, vous pouvez utiliser Azure Tools pour 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. Vous pouvez également installer des outils autonomes comme l’Explorateur Stockage Azure ou Cerulean.Alternatively, you can install standalone tools like Azure Storage Explorer or Cerulean.

Créer un concentrateur Azure Event Hubs pour ingérer les événementsCreate an Azure Event Hubs to ingest events

Pour analyser un flux de données, ingérez-le dans Azure.To analyze a data stream, you ingest it into Azure. Pour ingérer des données, il est courant d’utiliser Azure Event Hubs, qui vous permet d’ingérer des millions d’événements par seconde, puis de traiter et de stocker les informations d’événement.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. Pour ce tutoriel, vous allez créer un concentrateur Event Hub, puis indiquer à l’application de génération d’événements d’appel d’envoyer des données d’appel à ce concentrateur.For this tutorial, you will create an event hub and then have the call-event generator app send call data to that event hub. Pour plus d’informations sur les concentrateurs Event Hub, voir la documentation Azure Service Bus.For more about event hubs, see the Azure Service Bus documentation.

Notes

Pour consulter une version plus détaillée de cette procédure, voir Créer un espace de noms Event Hubs et un concentrateur d’événements avec le portail Azure.For a more detailed version of this procedure, see Create an Event Hubs namespace and an event hub using the Azure portal.

Créer un concentrateur Event Hub et un espace de nomsCreate a namespace and event hub

Dans cette procédure, vous allez commencer par créer un espace de noms Event Hub, puis ajouter un concentrateur Event Hub à cet espace de noms.In this procedure, you first create an event hub namespace, and then you add an event hub to that namespace. Les espaces de noms Event Hub sont utilisés pour regrouper logiquement des instances Event Hub associées.Event hub namespaces are used to logically group related event bus instances.

  1. Connectez-vous au portail Azure, puis cliquez sur Créer une ressource > Internet des objets > Hub d’événements.Log in to the Azure portal and click Create a resource > Internet of Things > Event Hub.

  2. Dans le volet Créer un espace de noms, entrez un nom d’espace de noms, par exemple <yourname>-eh-ns-demo.In the Create namespace pane, enter a namespace name such as <yourname>-eh-ns-demo. Vous pouvez utiliser n’importe quel nom pour l’espace de noms, mais il doit être valide pour une URL et unique dans 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. Sélectionnez un abonnement, créez ou choisissez un groupe de ressources, puis cliquez sur Créer.Select a subscription and create or choose a resource group, then click Create.

    Create event hub namespace in Azure portal
  4. Lorsque le déploiement de l’espace de noms est terminé, recherchez l’espace de noms Event Hub dans la liste de ressources Azure.When the namespace has finished deploying, find the event hub namespace in your list of Azure resources.

  5. Cliquez sur le nouvel espace de noms, puis, dans le volet d’espace de noms, cliquez sur Hub d’événements.Click the new namespace, and in the namespace pane, click Event Hub.

    Bouton Ajouter un hub d’événements permettant de créer un concentrateur Event Hub

  6. Nommez le nouveau concentrateur Event Hub asa-eh-frauddetection-demo.Name the new event hub asa-eh-frauddetection-demo. Vous pouvez utiliser un autre nom.You can use a different name. Le cas échéant, prenez-en note, car vous devrez l’utiliser ultérieurement.If you do, make a note of it, because you need the name later. Pour le moment, vous n’avez pas besoin de définir d’autres options pour le concentrateur Event Hub.You don't need to set any other options for the event hub right now.

    Name event hub in Azure portal
  7. Cliquez sur Créer.Click Create.

Accorder l’accès au concentrateur Event Hub et obtenir une chaîne de connexionGrant access to the event hub and get a connection string

Pour qu’un processus puisse envoyer des données à un concentrateur Event Hub, ce concentrateur doit disposer d’une stratégie autorisant un accès approprié.Before a process can send data to an event hub, the event hub must have a policy that allows appropriate access. La stratégie d’accès génère une chaîne de connexion qui inclut des informations d’autorisation.The access policy produces a connection string that includes authorization information.

  1. Dans le volet d’espace de noms, cliquez sur Hubs d’événements, puis sur le nom de votre nouvel hub d’événements.In the event namespace pane, click Event Hubs and then click the name of your new event hub.

  2. Dans le volet de hub d’événements, cliquez sur Stratégies d’accès partagé, puis sur + Ajouter.In the event hub pane, click Shared access policies and then click + Add.

    Notes

    Veillez à utiliser le concentrateur Event Hub et pas l’espace de noms Event Hub.Make sure you're working with the event hub, not the event hub namespace.

  3. Ajoutez la stratégie nommée sa-policy-manage-demo et, pour Revendication, sélectionnez Gérer.Add a policy named sa-policy-manage-demo and for Claim, select Manage.

    Create shared access policy for Stream Analytics
  4. Cliquez sur Créer.Click Create.

  5. Une fois la stratégie déployée, cliquez dessus dans la liste des stratégies d’accès partagé.After the policy has been deployed, click it in the list of shared access policies.

  6. Recherchez la zone intitulée CHAÎNE DE CONNEXION-CLÉ PRIMAIRE, puis cliquez sur le bouton de copie situé à côté de la chaine de connexion.Find the box labeled CONNECTION STRING-PRIMARY KEY and click the copy button next to the connection string.

    Stream Analytics shared access policy
  7. Collez la chaîne de connexion dans un éditeur de texte.Paste the connection string into a text editor. Vous aurez besoin de cette chaîne de connexion pour la section suivante, une fois que vous lui aurez apporté quelques légères modifications.You need this connection string for the next section, after you make some small edits to it.

    La chaîne de connexion ressemble à ce qui suit :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
    

    Notez que la chaîne de connexion contient plusieurs paires clé-valeur, séparées par des points-virgules : Endpoint, SharedAccessKeyName, SharedAccessKey et EntityPath.Notice that the connection string contains multiple key-value pairs, separated with semicolons: Endpoint, SharedAccessKeyName, SharedAccessKey, and EntityPath.

Configuration et démarrage de l’application de génération d’événementsConfigure and start the event generator application

Avant de démarrer l’application TelcoGenerator, vous devez la configurer afin qu’elle envoie des enregistrements d’appels au concentrateur Event Hub que vous venez de créer.Before you start the TelcoGenerator app, you must configure it so that it will send call records to the event hub you created.

Configurer l’application TelcoGeneratorConfigure the TelcoGenerator app

  1. Dans l’éditeur dans lequel vous avez copié la chaîne de connexion, prenez note de la valeur EntityPath, puis supprimez la paire EntityPath (n’oubliez pas de supprimer le point-virgule qui la précède).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. Dans le dossier où vous avez décompressé le fichier TelcoGenerator.zip, ouvrez le fichier telcodatagen.exe.config dans un éditeur.In the folder where you unzipped the TelcoGenerator.zip file, open the telcodatagen.exe.config file in an editor. (Comme il existe plusieurs fichiers .config, veillez à ouvrir celui qui convient.)(There is more than one .config file, so be sure that you open the right one.)

  3. Dans l’élément <appSettings> :In the <appSettings> element:

    • Définissez la valeur de la clé EventHubName sur le nom du concentrateur Event Hub (autrement dit, la valeur du chemin d’accès de l’entité).Set the value of the EventHubName key to the event hub name (that is, to the value of the entity path).
    • Définissez la valeur de la clé Microsoft.ServiceBus.ConnectionString sur la chaîne de connexion.Set the value of the Microsoft.ServiceBus.ConnectionString key to the connection string.

    La section <appSettings> doit ressembler à l’exemple qui suit.The <appSettings> section will look like the following example. (Par souci de clarté, les lignes sont incluses dans un wrapper et certains caractères ont été supprimés dans le jeton d’autorisation.)(For clarity, the lines are wrapped and some characters have been removed from the authorization token.)

    Fichier config de TelcoGenerator montrant la chaîne de connexion et le nom du hub d’événements

  4. Enregistrez le fichier .Save the file.

Démarrer l’applicationStart the app

  1. Ouvrez une fenêtre Commande et accédez au dossier dans lequel l’application TelcoGenerator est décompressée.Open a command window and change to the folder where the TelcoGenerator app is unzipped.

  2. Entrez la commande suivante :Enter the following command:

    ```cmd
    telcodatagen.exe 1000 0.2 2
    ```
    

    Les paramètres sont les suivants :The parameters are:

    • Nombre d’enregistrements des détails des appels par heure.Number of CDRs per hour.
    • Probabilité de fraude de carte SIM : Fréquence, exprimée en pourcentage de l’ensemble des appels, à laquelle l’application doit simuler un appel frauduleux.SIM Card Fraud Probability: How often, as a percentage of all calls, that the app should simulate a fraudulent call. La valeur 0,2 signifie qu’environ 20 % des enregistrements d’appels semblent frauduleux.The value 0.2 means that about 20% of the call records will look fraudulent.
    • Durée en heures.Duration in hours. Nombre d’heures pendant lesquelles l’application doit s’exécuter.The number of hours that the app should run. Vous pouvez également arrêter l’application à tout moment en appuyant sur Ctrl+C au niveau de la ligne de commande.You can also stop the app any time by pressing Ctrl+C at the command line.

    Après quelques secondes, l’application commence à afficher des enregistrements des appels téléphoniques à l’écran à mesure qu’elle les envoie au concentrateur Event Hub.After a few seconds, the app starts displaying phone call records on the screen as it sends them to the event hub.

Voici certains champs clés que vous utiliserez dans cette application de détection des fraudes en temps réel :Some of the key fields that you will be using in this real-time fraud detection application are the following:

EnregistrementRecord DéfinitionDefinition
CallrecTime Horodatage de l’heure de début d’appel.The timestamp for the call start time.
SwitchNum Commutateur téléphonique utilisé pour connecter l’appel.The telephone switch used to connect the call. Pour cet exemple, les commutateurs sont des chaînes qui représentent le pays/région d’origine (États-Unis, Chine, Royaume-Uni, Allemagne ou Australie).For this example, the switches are strings that represent the country/region of origin (US, China, UK, Germany, or Australia).
CallingNum Numéro de téléphone de l’appelant.The phone number of the caller.
CallingIMSI Identité de l’abonné mobile international (IMSI).The International Mobile Subscriber Identity (IMSI). Il s’agit de l’identificateur unique de l’appelant.This is the unique identifier of the caller.
CalledNum Numéro de téléphone du destinataire de l’appel.The phone number of the call recipient.
CalledIMSI Identité de l'abonné mobile international (IMSI).International Mobile Subscriber Identity (IMSI). Il s’agit de l’identificateur unique du destinataire de l’appel.This is the unique identifier of the call recipient.

Créer un travail Stream Analytics pour gérer les données de fluxCreate a Stream Analytics job to manage streaming data

Maintenant que vous disposez d’un flux des événements d’appel, vous pouvez configurer un travail Stream Analytics.Now that you have a stream of call events, you can set up a Stream Analytics job. Le travail lit les données à partir du concentrateur Event Hub que vous avez configuré.The job will read data from the event hub that you set up.

Créer le travailCreate the job

  1. Dans le portail Azure, cliquez sur Créer une ressource > Internet des objets > tâche Stream Analytics.In the Azure portal, click Create a resource > Internet of Things > Stream Analytics job.

  2. Nommez le travail asa_frauddetection_job_demo, puis spécifiez un abonnement, un groupe de ressources et un emplacement.Name the job asa_frauddetection_job_demo, specify a subscription, resource group, and location.

    Il est judicieux de placer le travail et le concentrateur Event Hub dans la même région afin d’optimiser les performances. Ce faisant, vous ne payez pas pour transférer des données entre les régions.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. Cliquez sur Créer.Click Create.

    Le travail est créé, et le portail en affiche les détails.The job is created and the portal displays job details. Rien n’est en cours d’exécution cependant. Vous devez configurer le travail pour qu’il puisse être démarré.Nothing is running yet, though—you have to configure the job before it can be started.

Configurer les entrées du travailConfigure job input

  1. Dans le tableau de bord ou le volet Toutes les ressources, recherchez et sélectionnez le travail Stream Analytics asa_frauddetection_job_demo.In the dashboard or the All resources pane, find and select the asa_frauddetection_job_demo Stream Analytics job.

  2. Dans la section Aperçu du volet du travail Stream Analytics, cliquez sur la zone Entrée.In the Overview section of the Stream Analytics job pane, click the Input box.

    Zone d’entrée sous Topologie dans le volet du travail Stream Analytics

  3. Cliquez sur Ajouter une entrée de flux et sélectionnez Event Hub.Click Add stream input and select Event Hub. Remplissez ensuite la page Nouvelle entrée avec les informations suivantes :Then fill the New input page with the following information:

    ParamètreSetting Valeur suggéréeSuggested value DescriptionDescription
    Alias d’entréeInput alias CallStreamCallStream Saisissez un nom pour identifier l’entrée du travail.Enter a name to identify the job’s input.
    AbonnementSubscription <Votre abonnement><Your subscription> Sélectionnez l’abonnement Azure dans lequel vous avez créé un Event Hub.Select the Azure subscription that has the Event Hub you created.
    Espace de noms Event HubEvent Hub namespace asa-eh-ns-demoasa-eh-ns-demo Entrez le nom de l’espace de noms Event Hub.Enter the name of the Event Hub namespace.
    Nom de l’Event HubEvent Hub name asa-eh-frauddetection-demoasa-eh-frauddetection-demo Sélectionnez le nom de votre Event Hub.Select the name of your Event Hub.
    Nom de la stratégie du hub d’événementsEvent Hub policy name asa-policy-manage-demoasa-policy-manage-demo Sélectionnez la stratégie d’accès que vous avez créée précédemment.Select the access policy that you created earlier.

    Create Stream Analytics input in portal
  4. Cliquez sur Créer.Click Create.

Créer des requêtes pour transformer des données en temps réelCreate queries to transform real-time data

À ce stade, vous disposez d’un travail Stream Analytics configuré pour lire un flux de données entrantes.At this point, you have a Stream Analytics job set up to read an incoming data stream. L’étape suivante consiste à créer une requête qui analysera les données en temps réel.The next step is to create a query that analyzes the data in real time. Stream Analytics prend en charge un modèle de requête simple et déclaratif pour la description des transformations dans le cadre du traitement en temps réel.Stream Analytics supports a simple, declarative query model that describes transformations for real-time processing. Les requêtes utilisent un langage de type SQL dont certaines extensions sont propres à Stream Analytics.The queries use a SQL-like language that has some extensions specific to Stream Analytics.

Une requête simple peut lire simplement toutes les données entrantes.A simple query might just read all the incoming data. Toutefois, vous créez souvent des requêtes qui recherchent des données spécifiques ou des relations dans les données.However, you often create queries that look for specific data or for relationships in the data. Dans cette section du didacticiel, vous allez créer et tester plusieurs requêtes pour découvrir quelques méthodes via lesquelles vous pouvez transformer un flux d’entrée pour l’analyse.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.

Les requêtes que vous créez ici affichent uniquement les données transformées à l’écran.The queries you create here will just display the transformed data to the screen. Dans une section ultérieure, vous allez configurer un récepteur de sortie et une requête qui écriront les données transformées dans ce récepteur.In a later section, you'll configure an output sink and a query that writes the transformed data to that sink.

Pour plus d’informations sur ce langage, consultez la page Références sur le langage des requêtes d’Azure Stream Analytics.To learn more about the language, see the Azure Stream Analytics Query Language Reference.

Obtenir des exemples de données pour tester des requêtesGet sample data for testing queries

L’application TelcoGenerator envoie des enregistrements d’appels au concentrateur Event Hub, et votre travail Stream Analytics est configuré pour la lecture d’un concentrateur Event Hub.The TelcoGenerator app is sending call records to the event hub, and your Stream Analytics job is configured to read from the event hub. Vous pouvez utiliser une requête pour tester le travail afin de vous assurer qu’il lit correctement.You can use a query to test the job to make sure that it's reading correctly. Pour tester une requête dans la console Azure, vous avez besoin d’exemples de données.To test a query in the Azure console, you need sample data. Pour cette procédure pas à pas, vous allez extraire des exemples de données à partir du flux entrant dans le concentrateur Event Hub.For this walkthrough, you'll extract sample data from the stream that's coming into the event hub.

  1. Assurez-vous que l’application TelcoGenerator s’exécute et qu’elle produit des enregistrements d’appels.Make sure that the TelcoGenerator app is running and producing call records.

  2. Dans le portail, retournez dans le volet du travail Stream Analytics.In the portal, return to the Streaming Analytics job pane. (Si vous avez fermé le volet, recherchez asa_frauddetection_job_demo dans le volet Toutes les ressources.)(If you closed the pane, search for asa_frauddetection_job_demo in the All resources pane.)

  3. Cliquez dans la zone Requête.Click the Query box. Azure répertorie les entrées et sorties qui sont configurées pour le travail. Vous pouvez également utiliser Azure pour créer une requête qui vous permettra de transformer le flux d’entrée lorsqu’il est envoyé vers la sortie.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. Dans le volet Requête, cliquez sur les points situés à côté de l’entrée CallStream, puis sélectionnez Exemple de données de l’entrée.In the Query pane, click the dots next to the CallStream input and then select Sample data from input.

    Options du menu permettant d’utiliser des exemples de données pour l’entrée du travail Stream Analytics avec l’option Exemple de données de l’entrée sélectionnée

  5. Définissez l’option Minutes sur 3, puis cliquez sur OK.Set Minutes to 3 and then click OK.

    Options d’échantillonnage du flux d’entrée, avec 3 minutes sélectionnées

    À partir du flux d’entrée, Azure échantillonne les données pour une valeur correspondant à une durée de 3 minutes, et vous informe lorsque l’échantillon est prêt.Azure samples 3 minutes' worth of data from the input stream and notifies you when the sample data is ready. (Cette opération prend quelques instants.)(This takes a short while.)

L’exemple de données est stocké temporairement et disponible tant que la fenêtre de requête est ouverte.The sample data is stored temporarily and is available while you have the query window open. Si vous la fermez, l’exemple de données est abandonné, et vous devez en créer un autre.If you close the query window, the sample data is discarded, and you'll have to create a new set of sample data.

Vous pouvez également obtenir un fichier .json qui contient des exemples de données de GitHub, puis charger ce fichier .json dont vous pouvez utiliser les exemples de données pour l’entrée 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.

Procéder à un test à l’aide d’une requête directeTest using a pass-through query

Si vous voulez archiver tous les événements, vous pouvez utiliser une requête directe pour lire tous les champs dans la charge utile de l’événement.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. Dans la fenêtre de requête, entrez la requête suivante :In the query window, enter this query:

    SELECT 
        *
    FROM 
        CallStream
    

    Notes

    Comme dans SQL, les mots clés ne respectent pas la casse, et les espaces blancs ne sont pas significatifs.As with SQL, keywords are not case-sensitive, and whitespace is not significant.

    Dans cette requête, CallStream est l’alias que vous avez spécifié lorsque vous avez créé l’entrée.In this query, CallStream is the alias that you specified when you created the input. Si vous en avez utilisé un autre, utilisez plutôt ce nom.If you used a different alias, use that name instead.

  2. Cliquez sur Test.Click Test.

    Le travail Stream Analytics exécute la requête dans l’exemple de données et affiche la sortie au bas de la fenêtre.The Stream Analytics job runs the query against the sample data and displays the output at the bottom of the window. Les résultats indiquent que le concentrateur Event Hub et le travail Stream Analytics sont correctement configurés.The results indicate that the Event Hub and the Streaming Analytics job are configured correctly. (Comme indiqué, vous allez créer ultérieurement un récepteur de sortie dans lequel la requête pourra écrire des données.)(As noted, later you'll create an output sink that the query can write data to.)

    Sortie du travail Stream Analytics, affichant 73 enregistrements générés

    Le nombre exact d’enregistrements que vous pouvez observer dépend du nombre d’enregistrements qui ont été capturés dans votre échantillon de 3 minutes.The exact number of records you see will depend on how many records were captured in your 3-minute sample.

Réduire le nombre de champs à l’aide d’une projection de colonneReduce the number of fields using a column projection

Dans de nombreux cas, il n’est pas nécessaire d’insérer toutes les colonnes du flux d’entrée pour l’analyse.In many cases, your analysis doesn't need all the columns from the input stream. Vous pouvez utiliser une requête pour projeter moins de champs retournés que dans la requête directe.You can use a query to project a smaller set of returned fields than in the pass-through query.

  1. Dans l’éditeur de code, modifiez la requête comme suit :Change the query in the code editor to the following:

    SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNum, CalledNum 
    FROM 
        CallStream
    
  2. Cliquez de nouveau sur Test.Click Test again.

    Sortie du travail Stream Analytics pour la projection avec 25 enregistrements

Nombre d’appels entrants par région : Fenêtre bascule avec agrégationCount incoming calls by region: Tumbling window with aggregation

Supposons que vous souhaitiez compter le nombre d’appels entrants par région.Suppose you want to count the number of incoming calls per region. Dans les données de flux, lorsque vous souhaitez effectuer des fonctions d’agrégation telles que le comptage, vous devez segmenter le flux en unités temporelles (puisque le flux de données proprement dit est en réalité un nombre infini).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). Pour ce faire, utilisez une fonction de fenêtre Stream Analytics.You do this using a Streaming Analytics window function. Vous pouvez alors utiliser les données contenues dans cette fenêtre comme unité.You can then work with the data inside that window as a unit.

Pour cette transformation, vous souhaitez une séquence de fenêtres temporelles ne se chevauchant pas ; chaque fenêtre contient un ensemble distinct de données que vous pouvez regrouper et agréger.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. Ce type de fenêtre est appelé fenêtre bascule.This type of window is referred to as a Tumbling window. Dans la fenêtre bascule, vous pouvez obtenir le nombre d’appels entrants, regroupés par SwitchNum, qui représente le pays/la région d'où provient de l’appel.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. Dans l’éditeur de code, modifiez la requête comme suit :Change the query in the code editor to the following:

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

    Cette requête utilise le mot-clé Timestamp By dans la clause FROM pour spécifier le champ d’horodatage à utiliser dans le flux d’entrée pour définir la fenêtre bascule.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. Dans ce cas, la fenêtre divise les données en segments en fonction du champ CallRecTime dans chaque enregistrement.In this case, the window divides the data into segments by the CallRecTime field in each record. (Si aucun champ n’est spécifié, l’opération de fenêtrage utilise l’heure d’arrivée de chaque événement dans le concentrateur Event Hub.)(If no field is specified, the windowing operation uses the time that each event arrives at the event hub. Voir « Heure d’arrivée par rapport à l’heure de l’application » dans Informations de référence sur le langage de requête Stream Analytics.See "Arrival Time Vs Application Time" in Stream Analytics Query Language Reference.

    La projection inclut System.Timestamp, qui retourne un horodatage pour la fin de chaque fenêtre.The projection includes System.Timestamp, which returns a timestamp for the end of each window.

    Pour spécifier que vous souhaitez utiliser une fenêtre bascule, vous utilisez le TUMBLINGWINDOW fonctionner dans le GROUP BY clause.To specify that you want to use a Tumbling window, you use the TUMBLINGWINDOW function in the GROUP BY clause. Dans la fonction, indiquez une unité de temps (d’une microseconde à un jour) et une taille de fenêtre (nombre d’unités).In the function, you specify a time unit (anywhere from a microsecond to a day) and a window size (how many units). Dans cet exemple, la fenêtre bascule se compose d’intervalles de 5 secondes, vous obtenez un nombre par pays/région pour la valeur de chaque 5 secondes des appels.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. Cliquez de nouveau sur Test.Click Test again. Dans les résultats, notez que les horodatages indiqués sous WindowEnd sont exprimés par incréments de 5 secondes.In the results, notice that the timestamps under WindowEnd are in 5-second increments.

    Sortie du travail Stream Analytics pour l’agrégation, affichant 13 enregistrements

Détecter une fraude à la carte SIM à l’aide d’une jointure réflexiveDetect SIM fraud using a self-join

Pour cet exemple, envisagez l’utilisation frauduleuse suivante : appels provenant d’un même utilisateur, mais à différents lieux, espacés de 5 secondes à chaque fois.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. Par exemple, un même utilisateur ne peut pas légitimement passer simultanément un appel depuis les États-Unis et l’Australie.For example, the same user can't legitimately make a call from the US and Australia at the same time.

Pour ces cas, vous pouvez utiliser une jointure réflexive des données de flux pour joindre le flux à lui-même en fonction de la valeur 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. Vous pouvez ensuite rechercher pour appel les enregistrements dans lesquels le CallingIMSI valeur (numéro d’origine) est identique, mais la SwitchNum valeur (pays/région d’origine) n’est pas le même.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.

Si vous utilisez une jointure avec des données de flux, la jointure doit indiquer certaines limites relatives à l’intervalle pouvant séparer des lignes correspondantes dans le temps.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. (Comme indiqué précédemment, les données de flux sont effectivement sans fin.) Les limites temporelles de la relation sont spécifiées dans la clause ON de la jointure, à l’aide de la fonction 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. Dans ce cas, la jointure est basée sur un intervalle de 5 secondes des données d’appels.In this case, the join is based on a 5-second interval of call data.

  1. Dans l’éditeur de code, modifiez la requête comme suit :Change the query in the code editor to the following:

     ```SQL
     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
     ```
    

    Cette requête est semblable aux jointures SQL excepté pour la fonction DATEDIFF de la jointure.This query is like any SQL join except for the DATEDIFF function in the join. Cette version de DATEDIFF est propre à Stream Analytics et doit apparaître dans la clause ON...BETWEEN.This version of DATEDIFF is specific to Streaming Analytics, and it must appear in the ON...BETWEEN clause. Les paramètres sont une unité de temps (des secondes dans cet exemple) et les alias des deux sources pour la jointure.The parameters are a time unit (seconds in this example) and the aliases of the two sources for the join. Cela diffère de la fonction DATEDIFF SQL standard.This is different from the standard SQL DATEDIFF function.

    La clause WHERE inclut la condition qui marque l’appel frauduleux : les commutateurs d’origine ne sont pas identiques.The WHERE clause includes the condition that flags the fraudulent call: the originating switches are not the same.

  2. Cliquez de nouveau sur Test.Click Test again.

    Sortie du travail Stream Analytics pour la jointure réflexive, affichant 6 enregistrements générés

  3. Cliquez sur Enregistrer pour enregistrer la requête de jointure réflexive dans le cadre du travail Stream Analytics.Click Save to save the self-join query as part of the Streaming Analytics job. (Elle n’enregistre pas l’exemple de données.)(It doesn't save the sample data.)

    Save Stream Analytics query in portal

Créer un récepteur de sortie pour stocker les données transforméesCreate an output sink to store transformed data

Vous avez défini un flux d’événements, une entrée de concentrateur Event Hub pour ingérer des événements, et une requête pour effectuer une transformation sur le flux.You've defined an event stream, an event hub input to ingest events, and a query to perform a transformation over the stream. La dernière étape consiste à définir un récepteur de sortie pour le travail, c’est-à-dire un emplacement pour y écrire le flux transformé.The last step is to define an output sink for the job—that is, a place to write the transformed stream to.

Vous pouvez utiliser de nombreuses ressources comme récepteurs de sortie : une base de données SQL Server, le stockage Table, le stockage Data Lake, Power BI et même un autre concentrateur Event Hub.You can use many resources as output sinks—a SQL Server database, table storage, Data Lake storage, Power BI, and even another event hub. Pour ce tutoriel, vous allez écrire le flux dans Stockage Blob Azure, qui est le choix par défaut pour la collecte des informations sur les événements pour une analyse ultérieure, car il prend en charge les données non structurées.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.

Si vous possédez déjà un compte de stockage d’objets blob, vous pouvez l’utiliser.If you have an existing blob storage account, you can use that. Pour ce tutoriel, vous allez apprendre à créer un compte de stockage.For this tutorial, you will learn how to create a new storage account.

Créer un compte de stockage Blob AzureCreate an Azure Blob Storage account

  1. Dans le coin supérieur gauche du portail Azure, sélectionnez Créer une ressource > Stockage > Compte de stockage.From the upper left-hand corner of the Azure portal, select Create a resource > Storage > Storage account. Dans la page de travail du compte de stockage, définissez le paramètre Nom sur « asaehstorage », le paramètre Emplacement sur « USA Est », le paramètre Groupe de ressources sur « asa-eh-ns-rg » (pour bénéficier de meilleures performances, hébergez le compte de stockage dans le même groupe de ressources que le travail Stream Analytics).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). Vous pouvez conserver les valeurs par défaut des autres paramètres.The remaining settings can be left to their default values.

    Créer un compte de stockage dans le portail Azure

  2. Dans le portail Azure, retournez dans le volet du travail Stream Analytics.In the Azure portal, return to the Streaming Analytics job pane. (Si vous avez fermé le volet, recherchez asa_frauddetection_job_demo dans le volet Toutes les ressources.)(If you closed the pane, search for asa_frauddetection_job_demo in the All resources pane.)

  3. Dans la section Topologie de la tâche, cliquez sur la zone Sortie.In the Job Topology section, click the Output box.

  4. Dans le volet Sorties, cliquez sur Ajouter et sélectionnez stockage Blob.In the Outputs pane, click Add and select Blob storage. Remplissez ensuite la page Nouvelle sortie avec les informations suivantes :Then fill out the New output page with the following information:

    ParamètreSetting Valeur suggéréeSuggested value DescriptionDescription
    Alias de sortieOutput alias CallStream-FraudulentCallsCallStream-FraudulentCalls Saisissez un nom pour identifier la sortie du travail.Enter a name to identify the job’s output.
    AbonnementSubscription <Votre abonnement><Your subscription> Sélectionnez l’abonnement Azure contenant le compte de stockage que vous avez créé.Select the Azure subscription that has the storage account you created. Le compte de stockage peut être dans le même abonnement ou dans un abonnement distinct.The storage account can be in the same or in a different subscription. Cet exemple suppose que vous avez créé le compte de stockage dans le même abonnement.This example assumes that you have created storage account in the same subscription.
    Compte de stockageStorage account asaehstorageasaehstorage Entrez le nom du compte de stockage que vous avez créé.Enter the name of the storage account you created.
    ConteneurContainer asa-fraudulentcalls-demoasa-fraudulentcalls-demo Choisissez Créer et entrez un nom de conteneur.Choose Create new and enter a container name.

    Create blob output for Stream Analytics job
  5. Cliquez sur Enregistrer.Click Save.

Démarrer le travail Stream AnalyticsStart the Streaming Analytics job

Le travail est maintenant configuré.The job is now configured. Vous avez spécifié une entrée (le concentrateur Event Hub), une transformation (la requête pour rechercher des appels frauduleux) et une sortie (un stockage d’objets blob).You've specified an input (the event hub), a transformation (the query to look for fraudulent calls), and an output (blob storage). À présent, vous pouvez démarrer le travail.You can now start the job.

  1. Vérifiez que l’application TelcoGenerator est en cours d’exécution.Make sure the TelcoGenerator app is running.

  2. Dans le volet du travail, cliquez sur Démarrer.In the job pane, click Start. Dans le volet Démarrer le travail, sélectionnez Maintenant pour l’option Heure de début de la sortie de la tâche.In the Start job pane, for Job output start time, select Now.

    Démarrage de la tâche Stream Analytics

Examiner les données transforméesExamine the transformed data

À présent, vous disposez d’un travail Stream Analytics complet.You now have a complete Streaming Analytics job. Le travail examine un flux de métadonnées d’appels téléphoniques, recherche les appels frauduleux en temps réel et écrit des informations liées à ces appels frauduleux dans un espace de stockage.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.

Pour terminer ce didacticiel, vous souhaiterez peut-être examiner les données capturées par le travail Stream Analytics.To complete this tutorial, you might want to look at the data being captured by the Streaming Analytics job. Les données sont écrites dans Stockage Blob Azure dans des segments (fichiers).The data is being written to Azure Blog Storage in chunks (files). Vous pouvez utiliser n’importe quel outil pour lire Stockage Blob Azure.You can use any tool that reads Azure Blob Storage. Comme indiqué dans la section Prérequis, vous pouvez utiliser des extensions Azure dans Visual Studio ou un outil comme l’Explorateur Stockage Azure 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.

Lorsque vous examinez les contenus d’un fichier dans le stockage d’objets blob, ce que vous voyez ressemble à ce qui suit :When you examine the contents of a file in blob storage, you see something like the following:

Stockage d’objets blob Azure avec sortie Stream Analytics

Supprimer des ressourcesClean up resources

Il existe des articles supplémentaires sur les scénarios de détection des fraudes qui s’appuient sur les ressources que vous avez créées dans ce didacticiel.There are additional articles that continue with the fraud-detection scenario and use the resources you've created in this tutorial. Si vous souhaitez poursuivre, consultez les suggestions faites sous Étapes suivantes.If you want to continue, see the suggestions under Next steps.

Toutefois, si vous en avez terminé et n’avez pas besoin des ressources que vous avez créées, vous pouvez les supprimer afin de n’encourir aucuns frais Azure inutiles.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. Dans ce cas, nous vous suggérons de procéder comme suit :In that case, we suggest that you do the following:

  1. Arrêtez le travail Stream Analytics.Stop the Streaming Analytics job. Dans le volet Travaux, cliquez sur Arrêter en haut.In the Jobs pane, click Stop at the top.
  2. Arrêtez l’application TelcoGenerator.Stop the Telco Generator app. Dans la fenêtre de commande où vous avez démarré l’application, appuyez sur Ctrl+C.In the command window where you started the app, press Ctrl+C.
  3. Si vous avez créé un compte de stockage d’objets blob pour ce didacticiel, supprimez-le.If you created a new blob storage account just for this tutorial, delete it.
  4. Supprimez le travail Stream Analytics.Delete the Streaming Analytics job.
  5. Supprimez le concentrateur Event Hub.Delete the event hub.
  6. Supprimez l’espace de noms Event Hub.Delete the event hub namespace.

Obtenir de l’aideGet support

Pour obtenir une assistance, consultez le forum Azure Stream Analytics.For further assistance, try the Azure Stream Analytics forum.

Étapes suivantesNext steps

Vous pouvez poursuivre ce didacticiel en lisant l’article suivant :You can continue this tutorial with the following article:

Pour plus d’informations sur Stream Analytics en général, consultez les articles suivants :For more information about Stream Analytics in general, see these articles: