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

阅读数:803 2019 年 10 月 16 日 08:00

基于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 生态中具有大量的工具,提供了完整的特性集,例如 Hive Impala Pig Storm Mahout 等。但 Spark 等新兴数据分析工具的出现,为处理多类型复杂工作提供了集成解决方案。

Azure 数据湖分析(简称 ADLA)是一种新推出的大数据分析引擎。ADLA 是由微软 Az ure c loud 完全托管和提供的按需分析服务。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 上提供的各种云服务。

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

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

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

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

图 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 易于学习,并由此入手。

基于Azure 数据湖分析与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 项目截图。

基于Azure 数据湖分析与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 循环。

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

图 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 着手开发。

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

图 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:餐馆最受欢迎菜品的标识符;

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

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

图 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_ratings
TO "/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 @bestOnlineRestaurants
TO @outputFile
USING Outputters.Tsv(outputHeader:true); // 将列名或表头写入输出文件。

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

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

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

图 8:具有多个脚本和相关代码文件的 U-SQL 项目
复制代码
// 相关 C#代码文件:RestaurantScript.usql.cs
namespace 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 @bestOnlineRestaurants
TO @outputFile
USING Outputters.Tsv(outputHeader:true); // 将列名或表头写入输出文件。

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

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

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

复制代码
// 脚本:RestaurantScript.usql
DECLARE @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.Ingredients
FROM @bestOnlineRestaurants AS r
INNER JOIN @dish_ingredients AS i
ON r.FavoriteDishId == i.DishId;
// 结果写入输出文件中。
OUTPUT @rs_innerJn
TO @outputFile
USING Outputters.Tsv(outputHeader:true);

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

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

图 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 @output
TO @outputFile
USING 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.usql
DECLARE @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.LowRatedRestaurants
SELECT * 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 @result
TO "/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)
AS
BEGIN
@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 或自定义的报告中使用。

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

图 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

评论

发布