写点什么

基于 Azure 数据湖分析与 U-SQL 实现大数据查询处理

  • 2019-10-16
  • 本文字数:10028 字

    阅读完需:约 33 分钟

基于Azure 数据湖分析与U-SQL实现大数据查询处理

本文要点

  • Azure 数据湖分析与数据湖存储是微软 Azure 数据湖解决方案中的关键组件。

  • Azure 数据湖分析当前只适用于批处理工作负载。对于流数据处理和事件处理工作负载,可使用 Azure 提供的其它数据分析解决方案,例如 HDInsight、Azure Databricks 等。

  • Azure 数据湖分析提供了一种新的大数据查询和处理语言,称为 U-SQL。

  • U-SQL 结合了 SQL 和 C#的理念和结构。U-SQL 强大之处来自于 SQL 的简单和声明性本质,以及 C#提供的具有丰富类型和表达式的编程能力。

  • U-SQL 提供了模式化视图,可操作存储在文件中的非结构化数据。与由关系数据库管理的结构化数据非常类似,U-SQL 也提供了通用的元数据目录系统。


目前大数据和Hadoop技术已历经十多年的发展,大数据和大数据分析受到前所未有的重视。Hadoop 的最初版本仅支持批处理工作负载,现在 Hadoop 生态已具有处理结构化数据、流数据、事件处理、机器学习等工作负载以及处理图数据的工具。


尽管 Hadoop 生态中具有大量的工具,提供了完整的特性集,例如HiveImpalaPigStormMahout等。但 Spark 等新兴数据分析工具的出现,为处理多类型复杂工作提供了集成解决方案。


Azure 数据湖分析(简称 ADLA)是一种新推出的大数据分析引擎。ADLA 是由微软Azure cloud完全托管和提供的按需分析服务。ALDA 与Azure 数据湖存储HDInsight一并形成了微软基于云的数据湖和分析工具集。ADLA 提供了一种新的大数据查询和处理语言,称为U-SQL。下面本文将介绍 U-SQL 语言,以及如何在应用中使用该语言。

Azure 数据湖

Azure 数据湖是微软基于 Azure 公有云提供的数据湖工具集,其中包括多种服务,涉及数据存储、数据处理、数据分析,以及 NoSQL 存储、关系数据库、数据仓库和 ETL 工具等相关配套服务。

数据存储服务

  • Azure 数据湖存储(简称 ADLS):一种基于开放 HDFS 标准的可扩展云存储,针对数据分析应用。

  • Azure Blob Storage:一种用于 Azure 的通用托管对象存储。

数据分析和处理服务

  • Azure 数据湖分析(简称 ADLA):一种 Azure 云上的完全托管按需分析服务。ADLA不仅支持.NET、R 和 Python 语言,还支持一种称为 U-SQL 的全新大数据处理语言。

  • HDInsight:运行在 Azure 云上,提供基于Hortonworks Data Platform(HDP)Hadoop 发行版的托管 Hadoop 集群。HDInsight 支持包括 Spark、Hive、Map Reduce、HBase、Storm 和 Kafka 等多种 Hadoop 生态系统工具。

  • Azure Databricks:一种基于 Azure Spark 的托管无服务器分析服务。其提供 Jupyter/ iPython/Zeppelin 等风格的 Notebook 交互特性,并支持 Scala、Python、R 和 SQL 等语言。

配套服务

  • Cosmos DB:Azure 上托管的无服务器数据库服务,提供多模 NoSQL 服务。

  • Azure SQL Database:Azure 上托管的关系数据库即服务(DBaaS)

  • Azure SQL Datawarehouse:基于云的企业数据仓库(EDW,Enterprise Data Warehouse)服务。它使用了为用户熟知的分布式系统和数据仓库理念,例如 MPP、列存储、压缩等,确保了服务对复杂查询的高性能。

  • Azure Analysis Service :Azure 上完全托管的数据分析引擎,用于构建云上的语义模型。它基于为用户熟悉的 SQL Server Analysis Server(基于 SQL Sever 的本地部署分析引擎)构建。目前,Azure Analysis Servives 仅支持二维表模型,不支持多维模型(即数据立方体)。

  • Azure Data Factory:一种基于云的无服务器 ETL 和数据集成服务,为 50 多种云和本地部署系统与服务提供开箱即可用的连接器,包括 Azure Blob Storage、Cosmos DB、Azure SQL Database,以及本地部署的 SQL Server、MySQL、PostgreSQL 数据库,甚至支持 SFDC、Dropbox 等第三方服务。它实现了数据在云服务器间的移动,并支持数据在本地部署系统和云间的相互移动。


图 1 给出了微软在 Azure Cloud 上提供的各种云服务。



图 1:Azure 数据湖提供的各种服务


图 2 给出了 Azure 云平台上提供的基于大数据和数据湖的应用架构。



图 2:Azure 上的典型大数据/数据湖/ETL/数据分析架构

U-SQL 简介

U-SQL 是 Azure 数据湖分析提供的大数据查询和处理语言。 它是微软专为 Azure 数据湖分析创建的一种新语言。U-SQL 结合了类 SQL 的声明性语言与 C#提供的包括丰富类型和表达式在内的编程功能,提供了为用户所熟知的大数据处理概念,例如“读取时模式”(Schema on Read)、“惰性计算”(Lazy Evaluation)、自定义处理器和 Reducer 等。熟悉 Pig、Hive 和 Spark 等开发的数据工程师会触类旁通。同时,具有 C#和 SQL 知识的开发人员也会感觉 U-SQL 易于学习,并由此入手。



图 3:U-SQL 与 C#、SQL 间的相互关系


尽管 U-SQL 使用了 SQL 中的多个概念和关键词,但是它并非 ANSI SQL 兼容的。它定义了关键字 EXTRACT and OUTPUT,增加了对非结构化文件的处理能力。


当前,ADLA 和 U-SQL 仅支持批处理,并不支持流数据分析或事件分析。

概念和 U-SQL 脚本

  • U-SQL 的查询和处理逻辑需编写在“U-SQL 脚本”,是扩展名“.usql”的文本文件。脚本文件可使用 Visual Studio IDE 或 Azure Portal 编写。在 Visual Studio 中,U-SQL 项目除了了一些相关文件引用组件之外,还可包含多个脚本和代码。


图 4 给出了 Visual Studio IDE 中的 U-SQL 项目截图。



图 4:Visual Studio 中的 U-SQL 项目


  • U-SQL 脚本遵循 Pig、Spark 等大数据语言所使用的 ETL 和加载/输出模式,支持从文本文件(包括非结构化文本文件和 JSON、XML 等半结构化文件)和数据库表中抽取数据。

  • U-SQL 在从文件中抽取非结构化数据时会形成模式,这有助于对所抽取数据执行类 SQL 操作。

  • Rowset 类型是 U-SQL 中的重要数据结构,适用于从输入文件和数据库表中抽取数据、执行数据格式转换、写入目的地等操作。Rowset 是无序结构,支持 Azure 数据分析引擎中使用多个节点的并发处理。

  • U-SQL 脚本支持使用 C#的类型、操作符和表达式。

  • U-SQL 脚本支持使用大多数 SQL 结构体,包括 SELECT、WHERE、JOIN 等数据定义语言(DDL)和数据操作语言(DML),注意所有关键字必须大写。

  • U-SQL 支持 IF/ELSE 等程序控制流结构,但不支持 While 和 For 循环。



图 5:U-SQL 脚本中的数据流

U-SQL 本地开发环境

为支持在本地机器和笔记本电脑上使用 U-SQL 和 Azure 数据湖,微软提供了类模拟器安装程序。开发环境需要下列组件:


  1. Visual Studio 2017 或 2019;

  2. Azure SDK 2.7.1 及更高版本。其与客户端 SDK 一并支持与 Azure 云服务器的交互,存储和计算等服务会需要它。

  3. Azure 数据湖和 Stream Analytics Tools for Visual Studio(2.4 版)。它们是本地 U-SQL 和 Azure 数据湖开发的插件。开发人员一旦安装它们,Visual Studio 中就会添加相关 Azure 数据湖分析及相关项目模板。开发人员可以通过选择 U-SQL Project 着手开发。



图 6:新建项目模板的截图

首个 U-SQL 脚本

为构建首个 U-SQL 脚本,所使用的数据集是班加罗尔餐馆评分数据。原数据是 CSV 文件格式,其中各数据列定义如下:


  • rest_id:餐馆的唯一标识符;

  • name:餐馆名称;

  • address:餐馆地址;

  • online_order:餐馆是否提供在线订餐服务;

  • book_table:餐馆是否提供预定;

  • rate:餐馆总体评分,按 1-5 级给出;

  • votes:餐馆的总评价数;

  • phone:餐馆联系电话;

  • location:餐馆所在商圈;

  • rest_type:餐馆类型(例如:便餐、快餐、外卖、烘焙、甜品店等);

  • favorite_dish_id:餐馆最受欢迎菜品的标识符;


下图中给出了部分示例数据。



图 7:餐馆评级表中的部分示例数据


下面的脚本实现从 CSV 文件读取餐馆评分数据,并将同一数据写入到一个 TSV 文件中。该脚本中并未执行数据转换操作。


// 脚本:RestaurantScript.usql// 从CSV文件抽取数据,存储到Rowset变量“employees”中。@restaurant_ratings =    EXTRACT rest_id int,            name string,            address string,            online_order bool,            book_order bool,            rate double,            votes int,            phone string,            location string,            rest_type string,            favorite_dish_id int    FROM "/Samples/Data/restaurants_ratings.csv"    USING Extractors.Csv();// 不执行数据转换:抽取的数据输出到一个TSV文件中。OUTPUT @restaurant_ratingsTO "/output/restaurants_out.tsv"USING Outputters.Tsv();
复制代码


该脚本读取整个餐馆数据到 Rowset 变量,并以制表符分隔的格式写入到输出文件。


注意,上例中使用了字符串等 C#数据类型,而非 SQL 中通常使用的 char/varchar 类型。其中不仅使用了 C#的数据类型,而且利用了表达式及其它所有表述性编程语言的优点。

执行数据转换操作的 U-SQL 脚本

// 脚本:RestaurantScript.usql// 定义输入、输出文件名和路径的变量。DECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";DECLARE @outputFile = "/output/restaurants_out.tsv";// 数据从输入CSV文件中抽取,存储在Rowset变量employees中。@restaurant_ratings =    EXTRACT rest_id int,            name string,            address string,            online_order bool,            book_order bool,            rate double,            votes int,            phone string,            location string,            rest_type string,            favorite_dish_id int    FROM @inputFile    USING Extractors.Csv(skipFirstNRows:1); // 跳过含有表头的第一行。// 数据转换操作:重命名数据列,过滤掉行号数据。@bestOnlineRestaurants =    SELECT name.ToUpper() AS Name,    // 将餐馆名称转换为大写。           rate AS Rating,           online_order AS OnlineOrder,           phone AS Phone,           location AS Location,           rest_type AS Category,           favorite_dish_id AS FavoriteDishId    FROM @restaurants_rating    WHERE rate > 4 && online_order == true;// 将经转换的数据写入输出文件。OUTPUT @bestOnlineRestaurantsTO @outputFileUSING Outputters.Tsv(outputHeader:true); // 将列名或表头写入输出文件。
复制代码

使用自定义代码扩展 U-SQL 表达式

U-SQL 支持 C#语言编写的自定义表达式。C#代码形成独立于脚本的文件。注意,下图展示的.usql 文件,具有关联的.usql.cs 文件,存储相关的自定义 C#代码。



图 8:具有多个脚本和相关代码文件的 U-SQL 项目


// 相关C#代码文件:RestaurantScript.usql.csnamespace UsqlApp1{    public static class Helpers    {        public static string FormatRestaurantName(string name, string location, string restaurantType)        {            return name + " (" + restaurantType + ") - " + location;   // 注意:U-SQL尚不支持新的C# 7.0字符串操作。               // return $"{name} ( {restaurantType} ) - {location}";        }    }}// 脚本:RestaurantScript.usql// 定义输入、输出文件名和路径的变量。DECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";DECLARE @outputFile = "/output/restaurants_out.tsv";// 数据从输入CSV文件中抽取,存储在Rowset变量employees中。@restaurant_ratings =    EXTRACT rest_id int,            name string,            address string,            online_order bool,            book_order bool,            rate double,            votes int,            phone string,            location string,            rest_type string,            favorite_dish_id int    FROM @inputFile    USING Extractors.Csv(skipFirstNRows:1); // 跳过含有表头的第一行。// 数据转换过程:重命名数据列,滤掉行号。@bestOnlineRestaurants =    SELECT USQLApp1.Helpers.FormatRestaurantName(name, location, rest_type) AS Name,           rate AS Rating,           online_order AS OnlineOrder,           phone AS Phone,           favorite_dish AS FavoriteDish    FROM @restaurant_ratings    WHERE rate > 4 && online_order == true;// 将转换后的数据写入输出文件。OUTPUT @bestOnlineRestaurantsTO @outputFileUSING Outputters.Tsv(outputHeader:true); // 将列名或表头写入输出文件。
复制代码

执行连接运算的 U-SQL 脚本

U-SQL 支持对两个不同数据集执行连接运算,可实现内连接、外连接、交叉连接等运算。


在下面的示例代码段中,执行了餐馆数据集和菜品食材数据集间的内连接运算。


// 脚本:RestaurantScript.usqlDECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";DECLARE @outputFile = "/output/restaurants_out.tsv";// 数据从输入CSV文件中抽取,存储在Rowset变量employees中。@restaurant_ratings = // 代码同上,此处略。// 数据转换过程:重命名数据列,过滤掉行号。@bestOnlineRestaurants = // 代码同上,此处略。
复制代码


现在,我们需要的是菜品及其中食材的数据。尽管这些数据通常可从外部数据源抽取,但在该代码中使用了内存中的 Rowset 变量。


// 定义内存中Rowset变量,存储菜品食材数据,包括菜品标识、菜品名称和食材。@dish_ingredients =    SELECT        * FROM              (VALUES               (1, "Biryani", "Rice, Indian spices, Vegetables, Meat, Egg, Yoghurt, Dried Fruits"),               (2, "Masala Dosa", "rice, husked black gram, mustard seeds, fenugreek seeds, salt, vegetable oil, potatoes, onion, green chillies, curry leaves, turmeric"),               (3, "Cake", " sugar, butter, egg, cocoa, creme, salt")              ) AS D(DishId, Dish, Ingredients);// 在Rowset变量@bestOnlineRestaurants和@dish_ingredients间执行内连接运算。@rs_innerJn = SELECT        r.Name,        r.Rating,        i.Dish,        i.IngredientsFROM @bestOnlineRestaurants AS rINNER JOIN @dish_ingredients AS iON r.FavoriteDishId == i.DishId;// 结果写入输出文件中。OUTPUT @rs_innerJnTO @outputFileUSING Outputters.Tsv(outputHeader:true);
复制代码


该代码返回高评分的餐馆和其最受欢迎菜品的食材清单。这是通过对餐馆数据和菜品食材 Rowset 数据间执行内连接运算得到的。



图 9:具有多个脚本和相关代码文件的 U-SQL 项目

使用内建函数的 U-SQL 脚本

U-SQL 提供了大量内建函数,包括聚合、分析函数、分级函数等。以下仅列出部分示例:


函数类型示例
聚合函数(Aggregate Functions)AVG、SUM、COUNT、STDEV(标准偏差)、MIN、MAX等。
分析函数(Analytical Functions)FIRST_VALUE、LAST_VALUE、LAG、LEAD、PERCENTILE_CONT等。
排名函数(Ranking Functions)RANK、 DENSE_RANK、NTILE、 ROW_NUMBER等。


下面的示例脚本对餐馆数据集使用内建聚合函数,包括 MIN、MAX、AVG 和 STDEV。


// 定义输入和输出文件的变量。DECLARE @inputFile = "/Samples/Data/restaurants_raw_data.csv";DECLARE @outputFile = "/output/restaurants_aggr.csv";@restaurant_ratings =    EXTRACT rest_id int,            name string,            address string,            online_order bool,            book_order bool,            rate double,            votes int,            phone string,            location string,            rest_type string,            favorite_dish_id int    FROM @inputFile    USING Extractors.Csv(skipFirstNRows:1);@output =    SELECT           rest_type AS RestaurantType,           MIN(rate) AS MinRating,           MAX(rate) AS MaxRating,           AVG(rate) AS AvgRating,           STDEV(rate) AS StdDevRating    FROM @restaurants_ratings    GROUP BY rest_type;// 写入到输出文件。OUTPUT @outputTO @outputFileUSING Outputters.Csv(outputHeader:true);
复制代码

U-SQL 目录

上面介绍主要关注的是如何从文件中读写非结构化和半结构化数据。当然,U-SQL 的强大之处在于操作存储在文件中的非结构化数据,并对所抽取数据构建模式化视图,但是 U-SQL 同样可管理结构化数据。它提供了类似于 Hive 的通用元数据目录系统。下面列出了 U-SQL 支持的主要对象:


  • 数据库:和 Hive 等大数据系统一样,U-SQL 同样支持数据库。

  • 数据库模式:和关系数据库一样,按数据库方式表示模式相关对象。

  • 数据库表和索引:数据库表是管理结构化数据的容器,实现按列存储不同类型的数据。数据库表中,数据是存储在文件中的。除了对非结构数据的模式化视图之外,数据库表还提供其它一些优点,包括支持索引,以及将数据按桶(bucket)分布在多个分区表中,分别以独立文件形式存储。

  • 视图:U-SQL 视图分为两类:一类是基于 U-SQL 表的视图,另一类是指向文件的视图,需使用 EXTRACT 获取数据。

  • 函数:支持标量和数据库表赋值.

  • 过程:类似于函数,但不返回任何值。

  • 程序集(Assemblies):U-SQL 支持存储.NET 程序集,实现扩展 U-SQL 脚本形成自定义表达式。


现在回到上面的餐馆评分示例。我们希望进一步分析那些低评分的餐馆。为实现此,我们需要抽取所有评分低于四级的餐馆到一张表中,以做进一步分析。

U-SQL 数据库、数据库表和索引

示例代码在数据库中创建了一个具有模式和索引键的 U-SQL 数据库。代码中并未指定创建的模式,因此类似于 SQL Sever 中的操作,数据库表创建使用的是数据库内置的缺省模式“dbo”。


下面给出创建数据库表的示例代码。


// 脚本:RestaurantScript.usqlDECLARE @inputFile = "/Samples/Data/restaurants_ratings.csv";DECLARE @outputFile = "/output/restaurants_out.tsv";// 数据从输入CSV文件中抽取,存储在Rowset变量employees中。@restaurant_ratings = // 代码同上,在此略。// 数据转换过程:过滤出所有评分低于4级的餐馆。@lowRatedRestaurants =    SELECT rest_id AS RestaurantId,           name AS Name,           rate AS Rating,           online_order AS OnlineOrder,           phone AS Phone,           location AS Location,           rest_type AS Category,           favorite_dish_id AS FavoriteDishId    FROM @restaurants_ratings    WHERE rate < 4;// 将低评分餐馆的详细数据插入到U-SQL目录中。// 判断数据库是否存在。如不存在,则新建数据库。CREATE DATABASE IF NOT EXISTS RestaurantsDW;USE RestaurantsDW;// 判定数据库表是否存在。如已存储,则删除。DROP TABLE IF EXISTS dbo.LowRatedRestaurants;// 指定列模式和索引,创建数据库表。CREATE TABLE dbo.LowRatedRestaurants(    RestaurantId int,    Name string,    INDEX idx        CLUSTERED (Name DESC)        DISTRIBUTED BY HASH(Name),    Rating double,    OnlineOrder bool,    Phone string,    Location string,    Category string,    FavoriteDishId int);// 将Rowset数据插入到新建的U-SQL数据库表中。INSERT INTO dbo.LowRatedRestaurantsSELECT * FROM @lowRatedRestaurants;
复制代码

U-SQL 视图

类似于数据库视图,U-SQL 视图也不对数据做物理保存,只是对存储在数据库表或文件中的数据提供一种视图。视图可以基于数据库表,也可以基于文件的抽取数据。


下面的示例脚本展示了如何基于所抽取的数据创建视图。


USE DATABASE RestaurantsDW;// 判断视图是否存在。如已存在,则删除。DROP VIEW IF EXISTS RestaurantsView;// 基于抽取数据创建视图。CREATE VIEW RestaurantsView AS      EXTRACT rest_id int,            name string,            address string,            online_order bool,            book_order bool,            rate double,            votes int,            phone string,            location string,            rest_type string,            favorite_dish_id int    FROM "/Samples/Data/restaurants_raw_data.csv"    USING Extractors.Csv(skipFirstNRows:1); // 跳过包含有表头的第一行
复制代码


视图操作代码如下:


@result = SELECT * FROM RestaurantsDW.dbo.RestaurantsView;OUTPUT @resultTO "/output/Restaurants_View.csv"USING Outputters.Csv();
复制代码

U-SQL 表值函数(TVF,table valued functions)

U-SQL 支持标量函数和表值函数(TVF)。函数可输入 0 到多个参数,返回单个标量值,或是一个数据库表,其为一个由列和行组成的数据集。


下面的示例代码片段首先展示了如何创建 TVF,进而展示了如何调用该 TVF 函数。函数接收单个参数输入,返回一个数据库表。


CREATE DATABASE IF NOT EXISTS RestaurantsDW;USE DATABASE RestaurantsDW;DROP FUNCTION IF EXISTS tvf_SearchRestaurants;// 创建TVF,输入参数是字符串类型的餐馆数据,返回包含匹配餐馆详细数据的数据库表。CREATE FUNCTION tvf_SearchRestaurants(@RestaurantType string)RETURNS @searchRestaurants TABLE(rest_id int, name string, address string,                                    online_order bool, book_order bool, rate double,                                    votes int, phone string, location string,                                    rest_type string, favorite_dish_id int)    ASBEGIN    @allRestaurants =        EXTRACT rest_id int,            name string,            address string,            online_order bool,            book_order bool,            rate double,            votes int,            phone string,            location string,            rest_type string,            favorite_dish_id int        FROM "/Samples/Data/restaurants_raw_data.csv"        USING Extractors.Csv(skipFirstNRows:1); // 跳过包含有表头的第一行    @searchRestaurants =        SELECT *        FROM @allRestaurants        WHERE rest_type == @RestaurantType;RETURN;END;
复制代码


调用该 TVF,只需创建并传递“Bakery”参数。该 TVF 函数将返回所有类型为“Bakery”的餐馆。


OUTPUT RestaurantsDW.dbo.tvf_SearchRestaurants("Bakery")TO "/output/BakeryRestaurants.csv"USING Outputters.Csv();
复制代码

研究实例

下面给出一个研究实例,重点关注如何在一个已运作多年的大型数字转换战略计划中使用 Azure 数据湖分析和 U-SQL 语言。实例的客户是一家大型保险专业机构,在过去一年中收购了多家保险公司和经纪商。因此,客户使用了多个客户系统,以电子邮件、文本短消息、Web、移动聊天和呼叫(入站和出站)等方式与其顾客交互。由于采用了多种折衷方案,分析客户交互数据是非常困难的。


由此,该客户考虑着手建立全渠道平台和整合的客服中心,希望通过多种联系渠道(包括电子邮件、文本、聊天机器人、联络中心语音呼叫等)为顾客提供服务。客户最直接的技术选择是去分析来自不同来源的数据,包括电子邮件,文本短信、聊天和通话记录等。


为解决如何对来自各系统不同格式数据分析的迫切需求,该研究实例中开发了一个基于 Azure 数据湖的解决方案,将多源系统迁移到 Azure 数据湖存储,进而使用 Azure 数据湖分析和 U-SQL 进行分析。


  1. 摄取(Ingest)阶段:在接收阶段,使用 Azure Data Factory ETL 服务将来自不同来源的非结构化和结构化数据(电子邮件/文本/聊天数据以及呼叫日志)迁移到 Azure 中。

  2. 存储(Store)阶段:原始数据以纯文本文件存储在 Azure 数据湖存储(ADLS)中。

  3. 分析(Analyze)阶段:使用 U-SQL 执行各种类型的分析,包括过滤、联接、聚合、窗口操作等。

  4. 模型和提供服务(Model and Serve)阶段:经分析的数据存储在结构化表中,供用户以后从 Power BI 或自定义的报告中使用。



图 10:Azure Data Analytics 流水线

总结

Azure 数据湖存储和分析与 Azure HDInsight 和 Azure Databricks 一并,已成为执行大数据和分析工作负载的强大工具。尽管该服务集仍处于起步阶段,尚不支持流数据和事件处理功能,但新的 U-SQL 提供了强大的功能。U-SQL 语言将 SQL 的简单性和普遍性与 Mirosoft 的旗舰产品,即强大的 C#语言,结合在一起。此外,Microsoft 的开发工具(例如 Visual Studio)和本地开发/测试功能,支持 U-SQL 在大数据和分析领域具有强大的竞争力。

作者简介

Aniruddha Chakrabarti 已在策略,咨询,产品开发和 IT 服务等领域深耕 19 年,在包括解决方案体系结构、售前、技术体系结构、交付领导力和计划管理等职能部门具有丰富的工作经验。作为 Mphasis 的数字化高级副总裁,Chakrabarti 负责大型数字交易和计划的预售、解决方案、RFP/RFI 和技术架构。在加入 Mphasis 之前,他曾在埃森哲、微软、Target、Misys 和 Cognizant 担任过多种领导职务,以及围绕架构的多种职务。他的关注重点包括云、大数据及其分析、AI/ML、NLP、IoT、分布式系统、微服务和 DevOps。


原文链接:


Azure Data Lake Analytics and U-SQL


2019-10-16 08:002116
用户头像

发布了 391 篇内容, 共 135.0 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

架构师-第二周

师哥

Cache类接口隔离设计

石刻掌纹

Flink on Zeppelin (4) - 机器学习篇

Geek_8o1tcx

大数据 flink 学习 流计算 Zeppelin

使用 Python 制作酷炫多彩的 Jenkins 插件词云图

donghui

jenkins wordcloud

奈学教育《大数据架构师》课程大纲(1)

古月木易

大数据

【摘】Git-从零单排 04期

卡尔

软件设计原则作业

梅子黄时雨

极客大学架构师训练营

第二周作业

Diven

如何看待年仅 28 岁的程序员实现财务自由,宣布从字节跳动退休?

非著名程序员

程序员 自由职业 程序人生 财富

高承实:区块链将对哪些场景赋能,如何赋能?

CECBC

区块链技术 产业 赋能

实时即未来?一个小微企业心中的流计算

Apache Flink

大数据 flink 流计算 实时计算

Flink 在快手实时多维分析场景的应用

Apache Flink

大数据 flink 流计算 实时计算

使用wavm运行wasi wasm程序

Foliage

记录一下,我的记录之道

非著名程序员

学习 程序员 提升认知 工作效率

细说几种内聚

落英亭郎

高内聚 面向对象设计 面向对象思想

奈学教育《大数据架构师》课程大纲(1)

奈学教育

大数据

《实现领域驱动设计》拆书稿 DDD入门 & 领域、子域和限界上下文

三界

架构 领域驱动设计 DDD

数仓大法好!跨境电商 Shopee 的实时数仓之路

Apache Flink

大数据 flink 流计算 实时计算

【玩转写作社区】如何让专业编辑青睐你的文章?被推荐置顶?

InfoQ写作社区官方

写作平台 InfoQ 玩转写作平台 热门活动

UML实践-食堂就餐卡系统

shangyu

极客大学架构师训练营

【面向对象】—依赖倒置、接口隔离

不二架构

极客大学架构师训练营 依赖倒置 接口隔离原则

XSKY发布S3 Console,助力企业轻松玩转非结构化数据可视化管理

XSKY星辰天合

奈学教育《百万架构师》课程大纲(1)

古月木易

极客大学架构师训练营

POJO类中布尔类型为啥不让用isXxx命名

Java课代表

TiDB原理解析

Chank

架构师训练营第二周课程感想1

tuuezzy

Java 架构师

图解 Vue1.0 响应式系统

前端黑板报

源码分析 Vue Reactive

依赖倒置总结

石刻掌纹

二叉查找树的解读和实现

ytao

Java 数据结构

奈学教育《百万架构师》课程大纲(1)

奈学教育

架构师

游戏夜读 | 中国的游戏制作人

game1night

基于Azure 数据湖分析与U-SQL实现大数据查询处理_大数据_Aniruddha Chakrabarti_InfoQ精选文章