Serveur minecraft

Azure Data Lake Analytics et U-SQL – Un bon serveur Minecraft

Le 3 novembre 2019 - 27 minutes de lecture

Points clés à retenir

  • Azure Data Lake Analytics, avec Azure Data Lake Storage, est un composant clé de la solution Azure Data Lake de Microsoft.
  • Actuellement, Azure Data Lake Analytics ne peut être utilisé que pour des charges de travail par lots. Pour les charges de travail de diffusion en continu et de traitement d'événements, vous devez utiliser d'autres solutions d'analyse Big Data sur Azure telles que HDInsight ou Azure Databricks.
  • Azure Data Lake Analytics introduit un nouveau langage de requête et de traitement Big Data appelé U-SQL.
  • U-SQL combine les concepts et les constructions de SQL et de C #; la puissance de U-SQL provient de la simplicité et de la nature déclarative de SQL, ainsi que de la puissance de programmation de C #, y compris les types et expressions riches.
  • U-SQL fonctionne sur des données non structurées stockées dans des fichiers et fournit une vue schématisée par dessus. Il fournit également un système de catalogue de métadonnées général très similaire aux bases de données relationnelles pour les données structurées.

Même si les technologies Big Data et Hadoop datent de plus de dix ans, les analyses Big Data et Big Data sont plus pertinentes que jamais. Alors que la version initiale de Hadoop ne pouvait gérer que des charges de travail par lots, l'écosystème Hadoop dispose désormais d'outils pour d'autres cas d'utilisation tels que les données structurées, les données en continu, le traitement des événements, les charges de travail d'apprentissage automatique et le traitement des graphes.

Alors que Hadoop écosystémique dispose de nombreux outils, tels que Hive, Impala, Pig, Storm et Mahout, pour fournir l’ensemble complet de fonctionnalités, le nouveau cadre d’analyse des données, tel que Spark, intègre une approche intégrée permettant de gérer différents types de charges de travail.

Azure Data Lake Analytics, ou ADLA, est l'un des moteurs d'analyse Big Data les plus récents. ADLA est le service d’analyse à la demande entièrement géré de Microsoft sur le cloud Azure. Avec Azure Data Lake Storage et HDInsight, Azure Data Lake Analytics constitue l’offre complète de solutions et d’analyses de données hébergées sur le cloud de Microsoft. Azure Data Lake Analytics introduit un nouveau langage de requête et de traitement Big Data appelé U-SQL. Cet article fournit une vue d'ensemble du langage U-SQL et de son utilisation dans les applications.

Azure Data Lake

Azure Data Lake est l’offre de Microsoft Data Lake sur le cloud public Azure et comprend plusieurs services, notamment le stockage, le traitement, l’analyse et d’autres services complémentaires tels que le magasin NoSQL, la base de données relationnelle, l’entrepôt de données et les outils ETL.

Services de stockage

  • Azure Data Lake Storage ou ADLS – Azure Data Lake Storage est un stockage en nuage évolutif spécialement conçu à des fins d'analyse, basé sur le standard HDFS ouvert.
  • Azure Blob Storage – Stockage d'objet géré à usage général pour Azure.

Services d'analyse et de traitement

  • Azure Data Lake Analytics ou ADLA – Service d'analyse à la demande entièrement géré sur le cloud Azure. Prise en charge du nouveau langage de traitement de données volumineuses U-SQL, à l'exception de .NET, R et Python.
  • HDInsight– HDInsight fournit des clusters Hadoop gérés s'exécutant sur Azure et est basé sur la distribution Hadoop de Hortonworks Data Platform (HDP). Prend en charge les outils écosystémiques Hadoop, notamment Spark, Hive, Map Reduced, HBase, Storm et Kafka.
  • Azure Databricks: service d'analyse sans serveur géré basé sur Azure Spark. Prend en charge une expérience de type bloc-notes semblable à Jupyter / iPython / Zeppelin, ainsi que d'autres fonctionnalités de communication, et prend en charge Scala, Python, R et SQL.

Services complémentaires

  • Base de données Cosmos – Service de base de données NoSQL multi-modal géré sans serveur sur Azure.
  • Azure SQL Database – Base de données relationnelle gérée sous forme de service / DBaaS sur Azure.
  • Azure SQL Datawarehouse – Solution EDW (Enterprise Data Warehouse) basée sur le cloud s'exécutant sur Azure. Il utilise des concepts familiers de systèmes distribués et d'entreposage de données tels que le traitement massivement parallèle (MPP), le stockage en colonnes, la compression, etc. pour garantir des performances rapides pour les requêtes complexes.
  • Azure Analysis Service – Un moteur d'analyse entièrement géré sur Azure; aide à construire des modèles sémantiques sur le cloud. Il est basé sur SQL Server Analysis Server, un moteur d’analyse local basé sur SQL Server. À partir de maintenant, Azure Analysis Service ne prend en charge que les modèles tabulaires et non les modèles multidimensionnels (vous vous souvenez de cubes?).
  • Azure Data Factory – Un service d'intégration de données et d'ETL basé sur le cloud. Il est sans serveur et fournit des connecteurs prêts à l'emploi à plus de 50 systèmes / services en nuage ou sur site tels que Azure Blob Storage, Cosmos DB, Azure SQL Database, sur le serveur SQL / MySQL / PostgreSQL et même des services tiers tels que SFDC. , Dropbox, etc. Il peut déplacer des données entre services cloud, de systèmes sur site vers le cloud ou inversement.

La figure 1 ci-dessous présente ces différentes offres de Microsoft sur le cloud Azure.

[Click on the image to enlarge it]

Figure 1: Services dans l’offre Azure Data Lake

L'architecture des applications Big Data et Data Lake sur la plate-forme cloud Azure est illustrée ci-dessous à la figure 2.

[Click on the image to enlarge it]


Figure 2: Architecture typique Big Data / Data Lake / ETL / Analytics sur Azure

U-SQL Introduction

U-SQL est le langage de requête et de traitement Big Data pour Azure Data Lake Analytics. C’est un nouveau langage créé par Microsoft, spécialement pour Azure Data Lake Analytics. U-SQL associe un langage déclaratif de type SQL à la puissance de programmation de C #, y compris les types et expressions riches en C #. U-SQL fournit les concepts de traitement de données volumineux bien connus, tels que «schéma à la lecture», «évaluation lazy», processeurs personnalisés et réducteurs. Les ingénieurs de données ayant déjà utilisé des langages tels que Pig, Hive et Spark trouveraient des similitudes avec ceux-ci. Les développeurs ayant des connaissances en C # et en SQL trouveraient U-SQL facile à apprendre et à utiliser.


Figure 3: Liens entre U-SQL et C # et SQL

Bien que U-SQL utilise de nombreux concepts et mots-clés du langage SQL, il n’est pas compatible ANSI SQL. Il ajoute des capacités de gestion de fichiers non structurées à l'aide de mots clés tels que EXTRAIT et SORTIE.
Actuellement, ADLA et U-SQL ne peuvent être utilisés que pour le traitement par lots. Il ne fournit pas d’analyse de flux ni de capacité de traitement des événements.

Concepts et scripts U-SQL

  • La logique de requête et de traitement U-SQL est écrite dans des fichiers avec l'extension ".usql" appelés scripts U-SQL. Visual Studio IDE ou le portail Azure peuvent être utilisés pour la création de ces scripts. Un projet U-SQL dans Visual Studio contient plusieurs scripts, code derrière des fichiers et assemblys de référence associés.

La figure 4 ci-dessous montre une capture d'écran d'un projet U-SQL dans Visual Studio IDE.


Figure 4: Un projet U-SQL dans Visual Studio

  • Les scripts U-SQL suivent les modèles ETL (Extract / Retrieve, Transform et Load / Output) bien connus, utilisés par d’autres langages de données volumineuses tels que Pig ou Spark. Il peut extraire des données de fichiers texte (fichiers texte non structurés et fichiers semi-structurés tels que JSON ou XML) et de tableaux.
  • U-SQL impose un schéma lors de la récupération de données non structurées à partir de fichiers – cela facilite la réalisation d'opérations similaires à celles de SQL.
  • Rowset est la structure de données principale de U-SQL. Il est utilisé pour extraire les données du fichier / de la table d’entrée et pour effectuer une transformation, ainsi que pour écrire dans la destination de sortie. Les ensembles de lignes ne sont pas ordonnés, ce qui aide Azure Data Analytics Engine à mettre en parallèle le traitement à l'aide de plusieurs nœuds de traitement.
  • Les scripts U-SQL peuvent utiliser des types, des opérateurs et des expressions à partir de C #.
  • Les scripts U-SQL utilisent des constructions SQL comme SÉLECTIONNER, , JOINDRE et autres définitions de données (DDL) et langage de manipulation de données (DML). Tous les mots-clés doivent être écrits en majuscules seulement.
  • Prend en charge les structures de flux de contrôle telles que IF ELSE, mais ne prend pas en charge les boucles While ou For.

[Click on the image to enlarge it]


Figure 5: Flux de données dans le script U-SQL

Ce qui est requis pour le développement local U-SQL

Microsoft fournit une configuration semblable à un émulateur pour essayer U-SQL et Azure Data Lake sur une machine locale ou un ordinateur portable. Pour cela, trois composants sont nécessaires:

  1. Visual Studio 2017 ou 2019
  2. Kit de développement logiciel (SDK) Azure (version 2.7.1 ou ultérieure) qui accompagne les kits de développement logiciel côté client pour interagir avec les services cloud Azure et est nécessaire pour le stockage, les calculs, etc.
  3. Azure Data Lake et Stream Analytics Tools pour Visual Studio (version 2.4), qui est un plug-in pour le développement local U-SQL et Azure Data Lake. Une fois cette installation effectuée, les modèles de projet Azure Data Lake Analytics (et autres) pertinents sont ajoutés à Visual Studio, comme indiqué ci-dessous. Sélectionnez U-SQL Project pour commencer.

[Click on the image to enlarge it]


Figure 6: capture d'écran du nouveau modèle de projet

Premier script U-SQL

Pour le premier script U-SQL, nous utiliserions un ensemble de données qui constitue l’évaluation des restaurants à Bangalore, en Inde. Les données brutes sont dans des fichiers CSV et ont les colonnes suivantes:

  • rest_id – Identifiant unique du restaurant
  • nom – nom du restaurant
  • adresse – adresse du restaurant
  • online_order – si la commande en ligne est disponible dans le restaurant ou non
  • book_table – indique si les options de réservation de table sont disponibles ou non
  • rate – note générale du restaurant sur 5
  • votes – nombre total de votes pour le restaurant
  • phone – numéro de téléphone du restaurant
  • emplacement – quartier dans lequel se trouve le restaurant
  • rest_type – type de restaurant (par exemple, restaurants décontractés, bouchées rapides, livraisons, boulangerie, salon de desserts, etc.)
  • favorite_dish_id – identifiant du plat préféré du restaurant

Le tableau ci-dessous montre les exemples de données.

[Click on the image to enlarge it]

Figure 7: Tableau de classement des restaurants avec exemple de données

Le script ci-dessous lit les données de classification des restaurants à partir d'un fichier CSV et les écrit dans un fichier TSV. Il n’utilise pas encore d’étape de transformation.

// Script - RestaurantScript.usql
// Les données sont extraites du fichier d'entrée (CSV) et stockées dans la variable de jeu de lignes d'employés
@restaurant_ratings =
    EXTRACT rest_id int,
            chaîne de nom,
            chaîne d'adresse,
            online_order bool,
            book_order bool,
            tarif double,
            votes int,
            chaîne de téléphone,
            chaîne de localisation,
            chaîne rest_type,
            favorite_dish_id int
    FROM "/Samples/Data/restaurants_ratings.csv"
    USING Extractors.Csv ();

// Aucune transformation - les données extraites sont chargées telles quelles dans le fichier de sortie (TSV)
SORTIE @restaurant_ratings
TO "/output/restaurants_out.tsv"
USING Outputters.Tsv ();

Les scripts écrivent l'intégralité des ensembles de lignes de restaurant dans le fichier de sortie dans un format séparé par des tabulations.

Notez que les types de données C # sont utilisés ici (par exemple, chaîne et non car / varchar comme généralement utilisé dans SQL). Nous pouvons non seulement utiliser les types de données de C #, mais aussi les expressions et tous les avantages d'un langage de programmation expressif.

Script U-SQL avec étape de transformation

// Script - RestaurantScript.usql
// Variables pour le nom et les chemins du fichier d'entrée et de sortie
DECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";
DECLARE @outputFile = "/output/restaurants_out.tsv";

// Les données sont extraites du fichier d'entrée (CSV) et stockées dans la variable de jeu de lignes d'employés
@restaurant_ratings =
    EXTRACT rest_id int,
            chaîne de nom,
            chaîne d'adresse,
            online_order bool,
            book_order bool,
            tarif double,
            votes int,
            chaîne de téléphone,
            chaîne de localisation,
            chaîne rest_type,
            favorite_dish_id int
    DE @inputFile
    UTILISER Extractors.Csv (skipFirstNRows: 1); // Ignorer la première ligne contenant des en-têtes

// Étape de transformation: les colonnes sont renommées et aucune ligne n'est filtrée
@bestOnlineRestaurants =
    SELECT name.ToUpper () AS Name, // Conversion des noms en majuscules
           rate AS Rating,
           online_order AS Online Ordre,
           phone AS Phone,
           emplacement AS Location,
           Rest_type AS Catégorie,
           favorite_dish_id AS FavoriteDishId
    DE @restaurants_rating
    WHERE rate> 4 && online_order == true;

// Charge les données transformées dans le fichier de sortie
SORTIE @bestOnlineRestaurants
TO @outputFile
USING Outputters.Tsv (outputHeader: true); // Écrire les noms de colonnes / en-têtes dans le fichier de sortie

Étendre l'expression U-SQL à l'aide d'un code personnalisé

U-SQL prend en charge les expressions personnalisées écrites en code C #. Le code C # réside dans le code derrière les fichiers. Notez que dans le diagramme ci-dessous, chaque fichier .usql est associé à un fichier .usql.cs contenant le code C # personnalisé.

Figure 8: Projet U-SQL avec plusieurs scripts et code derrière des fichiers

// Code derrière le fichier C # - RestaurantScript.usql.cs
espace de noms UsqlApp1

    Aides publiques de classe statique
    
        chaîne publique statique FormatRestaurantName (nom de la chaîne, emplacement de la chaîne, chaîne restaurantType)
        
            return name + "(" + restaurantType + ") -" + location;
   // Notez que U-SQL ne supporte pas encore la nouvelle interpolation de chaîne C # 7.0
               // return $ "name (restaurantType) - location";
        
    


// Script - RestaurantScript.usql
// Variables pour le nom et les chemins du fichier d'entrée et de sortie
DECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";
DECLARE @outputFile = "/output/restaurants_out.tsv";

// Les données sont extraites du fichier d'entrée (CSV) et stockées dans la variable de jeu de lignes d'employés
@restaurant_ratings =
    EXTRACT rest_id int,
            chaîne de nom,
            chaîne d'adresse,
            online_order bool,
            book_order bool,
            tarif double,
            votes int,
            chaîne de téléphone,
            chaîne de localisation,
            chaîne rest_type,
            favorite_dish_id int
    DE @inputFile
    UTILISER Extractors.Csv (skipFirstNRows: 1); // Ignorer la première ligne contenant des en-têtes

// Étape de transformation: les colonnes sont renommées et aucune ligne n'est filtrée
@bestOnlineRestaurants =
    SELECT USQLApp1.Helpers.FormatRestaurantName (nom, emplacement, type de repos), nom AS,
           rate AS Rating,
           online_order AS Online Ordre,
           phone AS Phone,
           favorite_dish AS FavoriteDish
    DE @restaurant_ratings
    WHERE rate> 4 && online_order == true;

// Charge les données transformées dans le fichier de sortie
SORTIE @bestOnlineRestaurants
TO @outputFile
USING Outputters.Tsv (outputHeader: true); // Écrire les noms de colonnes / en-têtes dans le fichier de sortie

Script U-SQL effectuant des jointures

U-SQL prend en charge les jointures entre deux jeux de données différents. Il fournit une jointure interne, une jointure externe, une jointure croisée, etc.
Dans l'extrait de code suivant, nous effectuons une jointure interne entre un jeu de données restaurants et un jeu de données d'ingrédients de plat.

// Script - RestaurantScript.usql
DECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";
DECLARE @outputFile = "/output/restaurants_out.tsv";

// Les données sont extraites du fichier d'entrée (CSV) et stockées dans la variable de jeu de lignes d'employés
@restaurant_ratings = // Code non affiché pour des raisons de brièveté. Exactement le même code que l'exemple ci-dessus

// Étape de transformation: les colonnes sont renommées et aucune ligne n'est filtrée
@bestOnlineRestaurants = // Code non affiché par souci de concision. Exactement le même code que l'exemple ci-dessus

Maintenant, nous aurions besoin de données sur les plats et leurs ingrédients. Bien que ces données soient généralement présentes dans une source externe, nous utiliserions ici un ensemble de lignes en mémoire.

// Déclarez un jeu de lignes en mémoire pour les ingrédients de plat contenant l'identifiant du plat, le nom du plat et // les ingrédients.

@dish_ingredients =
    SÉLECTIONNER
        * DE
              (VALEURS
               (1, "Biryani", "Riz, épices indiennes, légumes, viande, oeuf, yaourt, fruits secs"),
               (2, "Masala Dosa", "riz noir décortiqué, graines de moutarde, graines de fenugrec, sel, huile végétale, pommes de terre, oignons, piments verts, feuilles de curry, curcuma"),
               (3, "Cake", "sucre, beurre, oeuf, cacao, crème, sel")
              ) AS D (DishId, Dish, Ingredients);
// Effectuer une jointure interne entre @bestOnlineRestaurants et @dish_ingredients rangset
@rs_innerJn = SELECT
        r.Nom,
        r.Évaluation,
        i.Dish,
        Ingrédients
DE @bestOnlineRestaurants AS r
INNER JOIN @dish_ingredients AS i
ON r.FavoriteDishId == i.DishId;

// Ecrire dans le fichier de sortie
SORTIE @rs_innerJn
TO @outputFile
USING Outputters.Tsv (outputHeader: true);

Cela renvoie les restaurants ayant les cotes les plus élevées, ainsi que les détails des ingrédients de son plat préféré, qui sont récupérés en rejoignant l'ensemble de lignes de détails de restaurant avec un ensemble de lignes d'ingrédients de plat par le biais d'une jointure interne.

[Click on the image to enlarge it]

Figure 9: Projet U-SQL avec plusieurs scripts et code derrière des fichiers

Script U-SQL utilisant des fonctions intégrées

U-SQL fournit une multitude de fonctions intégrées, notamment des fonctions d'agrégat, d'analyse, de classement, etc. Vous trouverez ci-dessous quelques exemples.

Type de fonction Exemple
Fonctions d'agrégat AVG, SUM, COUNT, STDEV (écart type), MIN, MAX, etc.
Fonctions analytiques FIRST_VALUE, LAST_VALUE, LAG, LEAD, PERCENTILE_CONT etc.
Fonctions de classement RANK, DENSE_RANK, NTILE, ROW_NUMBER, etc.

Dans le script ci-dessous, nous utilisons des fonctions d'agrégation intégrées telles que MIN, MAX, AVG et STDEV pour le restaurant.

// Déclarer des variables pour les fichiers d'entrée et de sortie
DECLARE @inputFile = "/Samples/Data/restaurants_raw_data.csv";
DECLARE @outputFile = "/output/restaurants_aggr.csv";

@restaurant_ratings =
    EXTRACT rest_id int,
            chaîne de nom,
            chaîne d'adresse,
            online_order bool,
            book_order bool,
            tarif double,
            votes int,
            chaîne de téléphone,
            chaîne de localisation,
            chaîne rest_type,
            favorite_dish_id int
    DE @inputFile
    UTILISER Extractors.Csv (skipFirstNRows: 1);

@output =
    SÉLECTIONNER
           rest_type AS RestaurantType,
           MIN (rate) AS MinRating,
           MAX (rate) AS MaxRating,
           AVG (rate) AS Moyenne,
           STDEV (rate) AS StdDevRating
    DE @restaurants_ratings
    GROUP BY rest_type;

// Ecrire dans le fichier de sortie
OUTPUT @output
TO @outputFile
USING Outputters.Csv (outputHeader: true);

Catalogue U-SQL

Jusqu'à présent, nous nous sommes concentrés sur les données non structurées et semi-structurées lues à partir de fichiers et écrites dans des fichiers. L’une des forces de U-SQL est d’exploiter des données non structurées stockées dans des fichiers et de fournir une vue schématisée au-dessus de données non structurées, mais il peut gérer des données structurées. Il fournit un système de catalogue de métadonnées général comme Hive. Vous trouverez ci-dessous une liste des principaux objets pris en charge par U-SQL:

  • Base de données: U-SQL prend en charge des bases de données similaires à d’autres systèmes Big Data comme Hive.
  • Schéma de base de données: Les objets liés au groupe de schémas de base de données présents dans une base de données, exactement comme des bases de données relationnelles.
  • Tables et index: Les tables sont des conteneurs pour contenir des données structurées. Les tables peuvent contenir des colonnes de différents types de données. Les données de la table sont stockées dans des fichiers. Les tables offrent des avantages supplémentaires au-delà des vues schématisées par rapport aux fichiers non structurés tels que l'indexation, le partitionnement des données de table en plusieurs compartiments, chaque compartiment étant sauvegardé par un fichier.
  • Les vuesLes vues U-SQL sont de deux types: (i) les vues basées sur une table U-SQL et les vues (ii) pointant vers un fichier et utilisant EXTRACT pour obtenir les données.
  • Les fonctions: Prend en charge les fonctions scalaires et les valeurs de table.
  • Procédures: Les procédures ressemblent aux fonctions mais ne renvoient aucune valeur.
  • Assemblées: U-SQL prend en charge le stockage des assemblys .NET qui étend les scripts U-SQL avec une expression personnalisée.

Maintenant, dans notre exemple d’évaluation de la note, nous aimerions analyser davantage les restaurants ayant une faible note. Pour ce faire, nous aimerions déplacer tous les restaurants avec moins de quatre évaluations vers une table U-SQL pour une analyse plus approfondie.

Base de données U-SQL, tables et index

Dans l'exemple ci-dessous. nous allons créer une base de données U-SQL qui sera créée dans la base de données avec une clé de schéma et une clé d'index. Nous ne créons pas de schéma spécifiquement ici. La table sera donc créée sous le schéma par défaut ‘dbo’ (Remember SQL Server?) Dans la base de données.

L'exemple de code ci-dessous montre comment créer cette table.

// Script - RestaurantScript.usql
DECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";
DECLARE @outputFile = "/output/restaurants_out.tsv";

// Les données sont extraites du fichier d'entrée (CSV) et stockées dans la variable de jeu de lignes d'employés
@restaurant_ratings = // Code non affiché pour des raisons de brièveté. Exactement le même code que l'exemple ci-dessus

// Étape de transformation: Ne filtrez que les restaurants notés moins de 4
@lowRatedRestaurants =
    SELECT rest_id AS RestaurantId,
           nom AS Nom,
           rate AS Rating,
           online_order AS Online Ordre,
           phone AS Phone,
           emplacement AS Location,
           Rest_type AS Catégorie,
           favorite_dish_id AS FavoriteDishId
    DE @restaurants_ratings
    O taux <4;

// Insérer les détails de restaurant classés faibles dans le catalogue U-SQL
// Crée la base de données si elle n'existe pas déjà
CREER UNE BASE DE DONNEES SI N'EXISTE PAS RestaurantsDW;
UTILISER RestaurantsDW;

// Supprime la table si elle existe
DROP TABLE SI EXISTS dbo.LowRatedRestaurants;

// Crée la table en spécifiant le schéma de colonne et l'index
CREATE TABLE dbo.LowRatedRestaurants (
    RestaurantId int,
    Chaîne de nom,
    INDEX idx
        CLUSTERED (Nom DESC)
        DISTRIBUÉ PAR HASH (Nom),
    Note double,
    OnlineOrder bool,
    Chaîne téléphonique,
    Chaîne de localisation,
    Chaîne de catégorie,
    FavoriteDishId int
)

// Insérer les données du jeu de lignes dans la table U-SQL créée juste avant
INSÉRER DANS dbo.LowRatedRestaurants
SELECT * FROM @lowRatedRestaurants;

Vues U-SQL

Les vues U-SQL ressemblent aux vues de base de données: elles ne stockent pas les données physiquement et ne fournissent pas une vue des données stockées dans des tables ou des fichiers. Les vues peuvent être basées sur une table ou sur une extraction sur des fichiers.

L’exemple de script ci-dessous montre comment créer une vue basée sur une extraction.

UTILISEZ LA BASE DE DONNEES RestaurantsDW;
// Supprimer la vue si elle existe déjà
DROP VIEW SI EXISTS RestaurantsView;

// Créer la vue basée sur une extraction
CREATE VIEW RestaurantsVoir AS
    EXTRACT rest_id int,
            chaîne de nom,
            chaîne d'adresse,
            online_order bool,
            book_order bool,
            tarif double,
            votes int,
            chaîne de téléphone,
            chaîne de localisation,
            chaîne rest_type,
            favorite_dish_id int
    FROM "/Samples/Data/restaurants_raw_data.csv"
    UTILISER Extractors.Csv (skipFirstNRows: 1); // Ignorer la première ligne contenant des en-têtes

Pour exécuter la vue, le code suivant est utilisé:

@result = SELECT * FROM RestaurantsDW.dbo.RestaurantsView;
OUTPUT @result
TO "/output/Restaurants_View.csv"
USING Outputters.Csv ();

Fonctions évaluées de table U-SQL (TVF)

U-SQL prend en charge la fonction scalaire et la fonction de valeur de table (TVF). Les fonctions prennent zéro à plusieurs arguments et renvoient soit une valeur scalaire unique, soit une table, qui est un ensemble de données composé de colonnes et de lignes.

L'extrait de code ci-dessous montre d'abord comment créer un fichier TVF, puis comment l'invoquer. Il faut un seul paramètre et retourne une table.

CREER UNE BASE DE DONNEES SI N'EXISTE PAS RestaurantsDW;
UTILISEZ LA BASE DE DONNEES RestaurantsDW;

DROP FUNCTION SI EXISTS tvf_SearchRestaurants;

// Créer la fonction de valeur de table qui accepte le type de restaurant en tant que chaîne
// et retourne une table contenant les détails du restaurant correspondant.
CREATE FUNCTION tvf_SearchRestaurants (chaîne @RestaurantType)
RETURNS @searchRestaurants TABLE (id_distant, chaîne de nom, chaîne d’adresse,
                                    online_order bool, book_order bool, tarif double,
                                    votes int, chaîne téléphonique, chaîne d'emplacement,
                                    Rest_type string, favorite_dish_id int)
    COMME
COMMENCER
    @allRestaurants =
        EXTRACT rest_id int,
            chaîne de nom,
            chaîne d'adresse,
            online_order bool,
            book_order bool,
            tarif double,
            votes int,
            chaîne de téléphone,
            chaîne de localisation,
            chaîne rest_type,
            favorite_dish_id int
        FROM "/Samples/Data/restaurants_raw_data.csv"
        UTILISER Extractors.Csv (skipFirstNRows: 1); // Ignorer la première ligne contenant des en-têtes

    @searchRestaurants =
        SELECT *
        DE @allRestaurants
        WHERE rest_type == @RestaurantType;

REVENIR;
FIN;

Invoquons maintenant la fonction table value que nous venons de créer et transmettons le paramètre ‘Bakery’ en tant que paramètre. Il renverrait tous les restaurants de type Bakery.

SORTIE RestaurantsDW.dbo.tvf_SearchRestaurants ("Bakery")
TO "/output/BakeryRestaurants.csv"
USING Outputters.Csv ();

Étude de cas

L'étude de cas suivante met en évidence l'utilisation du langage U-SQL et Azure Data Lake Analytics dans un vaste programme de transformation numérique stratégique pluriannuel. Au cours de l’année, le client, acteur majeur de l’assurance, a acquis de multiples sociétés d’assurance et de nombreux courtiers. Il a par conséquent utilisé plusieurs systèmes d’engagement de la clientèle pour interagir avec ses clients par courrier électronique, SMS / SMS, discussion en ligne / mobile et appels (entrants et sortants). . En raison de l'approche fracturée, il est devenu très difficile pour le client d'analyser les données d'interaction client.

Alors que le client s’engageait dans la construction d’une plate-forme omnicanal et d’un centre de contact intégré pour le service à la clientèle via différents canaux (e-mail, SMS, chat, appels vocaux de centre de contact), son choix tactique immédiat consistait à analyser les données provenant de diverses sources. e-mail, texte / SMS, chat et journal des appels.

Une solution basée sur Azure Data Lake a été développée pour répondre au besoin immédiat d’analyser des données de différents systèmes, dans différents formats. Les données de différents systèmes sources ont été transférées vers Azure Data Lake Store, puis analysées à l'aide d'Azure Data Lake Analysis et de U-SQL.

  1. Ingérer – Au cours de la phase d'acquisition, les données non structurées et structurées provenant de deux sources différentes (données de courrier électronique / texte / conversation ainsi que le journal des appels) sont transférées vers Azure à l'aide du service ETL Azure Data Factory.
  2. le magasin – Les données brutes sont stockées sur Azure Data Lake Storage / ADLS sous forme de fichiers à plat.
  3. Analyser – Différents types d’analyses, notamment le filtrage, les jointures, l’agrégation, le fenêtrage, etc. sont effectués en U-SQL.
  4. Modèle et servir – Les données analysées sont stockées dans des tables structurées pour une utilisation ultérieure à partir de rapports Power BI / personnalisés par utilisateur.

[Click on the image to enlarge it]


Figure 10: Pipeline Azure Data Analytics

Conclusions

Azure Data Lake Storage et Analytics se sont révélés être une excellente option pour la réalisation de charges de travail de données volumineuses et d’analyses en parallèle avec Azure HDInsight et Azure Databricks. Bien qu’il en soit encore à ses débuts et qu’il ne dispose pas de capacités de streaming et de traitement des événements, son pouvoir réside dans le nouveau langage U-SQL, qui associe la simplicité et l’omniprésence de SQL au phare de Mirosoft, le puissant langage C #. De plus, les outils de développement de Microsoft tels que Visual Studio et les capacités de développement / test locales en font un puissant concurrent dans le domaine des données volumineuses et de l’analyse.

A propos de l'auteur

Aniruddha Chakrabarti a 19 ans d'expérience dans les domaines de la stratégie, du conseil, du développement de produits et des services informatiques. Il possède de l'expérience dans diverses fonctions, notamment l'architecture de solution, les préventes, l'architecture technologique, le leadership dans la livraison et la gestion de programmes. En tant que AVP du numérique dans Mphasis, Chakrabarti est responsable des préventes, des solutions, des RFP / RFI et de l’architecture technologique de grandes transactions et programmes numériques. Avant de rejoindre Mphasis, il a occupé divers postes de direction et d’architecture chez Accenture, Microsoft, Target, Misys et Cognizant. Ses domaines de prédilection sont le cloud, les mégadonnées et les analyses, l'AI / ML, la PNL, l'IoT, les systèmes distribués, les microservices et les DevOps.

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.