基於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_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#代碼。

圖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數據間執行內連接運算得到的。

圖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或自定義的報告中使用。

圖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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章