2016 年 1 月

第 31 卷,第 1 期

本文章是由機器翻譯。

巨量資料 - 透過使用 U-SQL,讓巨量資料批次分析更容易

Michael Rys |2016 年 1 月

新的 Microsoft Azure 資料湖服務在雲端中的分析 (bit.ly/1VcCkaH) 包含超大規模儲存機制,YARN 為建置基礎的新分析服務 (bit.ly/1iS8xvP),可讓資料開發人員和資料科學家分析所有資料,和 HDInsight (bit.ly/1KFywqg)、 完全受管理的 Hadoop、 Spark、 Storm 和 HBase 服務。Azure 資料湖分析也包含 U SQL、 統一的程式碼的表達能力與 SQL 的優點的語言。U SQL 可擴充的分散式的查詢功能可讓您有效率地分析資料存放區中與跨關聯式存放區,例如 Azure SQL Database。在本文中,我簡述 U SQL,一些靈感和設計原理語言背後的動機,提供一些語言主要部分的範例。

為什麼 U SQL?

如果您分析巨量資料分析的特性,幾項需求,會引發本質上容易使用,但功能強大的語言:

  • 處理任何類型的資料。從分析 BotNet 攻擊模式,從安全性記錄檔來擷取影像和影片進行機器學習服務的功能,語言必須可讓您處理任何資料。
  • 表示複雜且經常專屬的商務演算法,輕鬆地使用自訂程式碼。範例案例中的第一個項目符號點可能需要自訂處理,而通常不太容易在標準查詢語言中,範圍從使用者定義函式到自訂的輸入和輸出格式所表示。
  • 任何大小的資料有效率地調整,而不將焦點放在向外延展拓撲、 配管程式碼或特定的分散式基礎結構的限制。

如何現有的巨量資料語言,堆疊這些需求?

SQL 為基礎的語言,例如 Hive (hive.apache.org) 提供原生會調整、 平行執行和最佳化以宣告式方法。這使得這些簡單易用、 廣泛的開發人員所熟悉且功能強大的分析和倉儲許多標準的類型。不過,其擴充性模型和非結構化資料和檔案支援會經常螺栓而且較難使用。比方說,即使您只想要快速瀏覽檔案或遠端資料來源中的資料,您需要建立類別目錄物件,以 schematize 檔案資料或遠端來源之前,您可以查詢它們,進而減少靈活度。而且雖然 SQL 為基礎的語言通常會有數個擴充點的自訂格式器、 使用者定義函式,以及彙總工具,這是相當複雜,建置、 整合和維護,有不同程度的程式設計模型中的一致性。

程式設計語言為基礎的方法來處理巨量資料,其組件,提供簡單的方法,將自訂程式碼。不過,程式設計人員通常有明確撰寫程式碼的規模與效能,通常會向管理執行拓樸和工作流程,例如不同的執行階段,或是向外延展架構之間的同步處理。此程式碼很難撰寫正確且更加為了獲得最佳效能。有些架構支援宣告式元件,例如語言整合式查詢,或內嵌的 SQL 支援。不過,這個 SQL 可能會整合為缺少工具支援的常值字串。因此,擴充性整合可能會有所限制或 — 因為不會防堵副作用的程序性程式碼 — 硬最佳化而不容易重複使用。

滿足 U SQL 的需求

SQL 式和程序性語言問題納入考量,U SQL 是全新的設計為宣告式的 SQL 語言的進化透過使用者程式碼以 C# 撰寫的原生擴充性。U SQL 統一下列各項:

  • 宣告式和命令式程式碼範例和體驗
  • 經驗擴充與自訂的使用者程式碼的程式語言功能
  • 非結構化或結構化處理所有資料,
  • Azure 資料湖和其他 Azure 資料來源使用聯合的查詢中的資料處理

U SQL 為基礎的宣告式且可擴充的指令碼語言與 Microsoft 內部的經驗所獲得的經驗 (bit.ly/1OGUNIY) 稱為計算最佳化的結構化平行執行,或範圍和現有 T-SQL、 ANSI SQL 和 Hive 之類的語言。比方說,我們根據我們的 SQL 和 U SQL 上目前執行數百個工作的每一天在內部範圍內的程式設計語言整合及執行與最佳化的架構。此外,我們也會對齊 (資料庫、 資料表等) 的中繼資料系統、 使用 T-SQL 和 ANSI SQL 查詢語言,與我們的 SQL server 的大部分客戶是很熟悉的 SQL 語法和語言語意。而我們使用 C# 資料型別和 C# 運算式語言讓您可以順暢地撰寫 C# 述詞與 SELECT 陳述式內部的運算式,並使用 C# 來新增您的自訂邏輯。最後,我們討論 Hive 及其他巨量資料的語言來識別模式和資料處理需求,並將它們整合到我們的架構。

簡單地說,基於 U SQL 語言這些現有的語言和經驗應該代表巨量資料的查詢語言空間中,則為 true 的發展,以讓您輕鬆地開始使用,但強大的最困難的問題。

顯示 U SQL

假設我下載了我的 Twitter 記錄所有我推文,回推和提到為 CSV 檔案,並放到我的 Azure 資料湖存放區。我可以使用 Azure 資料湖 Tools for Visual Studio 在預覽檔案,並了解的結構。我可以這樣使用 [伺服器總管] 中尋找我的資料湖儲存體帳戶並開啟 [總管] 中,於 [我的預設儲存體帳戶。[圖 1 示範資料流 (在本例中我的 CSV 檔)。U SQL 中我使用格式的晚期繫結至我的資料流,因此這個預覽只會顯示資料行分隔符號為基礎,而不會指定型別。

在 Visual Studio 中的資料流預覽
在 Visual Studio 中的 [圖 1 資料資料流預覽

在此情況下,我知道我想要處理資料的結構描述,首先我要只是計算每個 「 網路 」。 推文中的作者的推文 U SQL 指令碼中的 [圖 2 示範處理資料與 U SQL 的三個主要步驟:

  1. 您的來源資料擷取至資料列集。請注意,您只是 schematize 它在您的查詢以擷取陳述式。以 C# 資料型別為基礎的資料型別和指令碼來讀取和 schematize CSV 檔案中使用內建的擷取器程式庫。
  2. 轉換使用 U SQL 或自訂 opertors 一系列的資料列集的操作,通常在一或多個過去的資料列集上建置的每個資料列集。在範例中 [圖 2, ,它是熟悉的 SQL 運算式的 GROUP BY 彙總資料列集擷取運算式所產生的。
  3. 檔案或成 U SQL 資料表,以便儲存以供進一步處理的輸出結果的資料列集。

[圖 2 U SQL 指令碼從 CSV 擷取推文

1 @t = EXTRACT date string
2            , time string
3            , author string
4            , tweet string
5      FROM "/input/MyTwitterHistory.csv"
6      USING Extractors.Csv();
7
8 @res = SELECT author
9             , COUNT(*) AS tweetcount
10        FROM @t
11        GROUP BY author;
12
13 OUTPUT @res TO "/output/MyTwitterAnalysis.csv"
14 ORDER BY tweetcount DESC
15 USING Outputters.Csv();

請注意 U SQL 中的 SQL 關鍵字必須是大寫,以提供從語法的 C# 運算式的語法差異具有相同的關鍵字,但不同的意義。在早期的指令碼中常見的錯誤是使用"As"而不是"AS"將別名指派給我的 SELECT 陳述式中的資料行。正確的格式是大寫,這是 SQL 運算式語法。當然,在編譯時期將會收到錯誤。

也請注意,每個運算式都會指派給變數 (@t 和 @res)。這可讓 U SQL 以累加方式轉換,及結合資料逐步以使用組合功能的 lambda 運算式流程 (類似於簡要說明 Pig [pig.apache.org] 語言)。執行架構中,然後撰寫的運算式結合成單一運算式。單一運算式可以是全域最佳化並向外延展,不可能,如果運算式所要的方式執行逐行。[圖 3 顯示執行圖形產生其中一個之後的查詢,在這篇文章。圖形代表全域最佳化的執行階段編譯器的最佳化工具到達。

在 Visual Studio 中的工作執行圖形
在 Visual Studio 中的 [圖 3 作業執行圖形

U SQL 中的 C# 整合

回到我的範例中,我現在要新增人員推文中提及的其他資訊,並擴充我的彙總,來傳回頻率推文和頻率也正在被提及撰寫我推文的網路中的人員。這個我負責 C# 整合看 U SQL 中。

核心仰賴 U SQL 的 C# 進行其型別系統和純量運算式語言提供豐富的 C# 和 CLR 程式庫類別、 方法、 函數、 運算子和類型的查詢寫入器存取。所有 C# 運算子指派運算子 (=,+ =,依此類推) 除了 U SQL 純量運算式中的有效值。特別是,所有的比較運算子例如 = =、! =、 <>、、 三元比較條件嗎?true 運算式: false 運算式、 null 聯合運算子。支援。即使使用 lambda 運算式 = > U SQL 運算式也可以使用。

這個非常緊密整合與程式設計順暢地在語法上也啟用 U SQL 要整合的 C# Roslyn 編譯器 (bit.ly/1BsPced)。事實上,U SQL 整合可能是最複雜的應用程式的 C# Roslyn 編譯器平台。

有數種方式,如何使用 C# 程式碼,以擴充 U SQL 運算式:

  • 提供內嵌 C# 運算式 U SQL 指令碼中: 如果較少的 C# 方法必須套用至處理序的其中一個純量值通常可以理解 — 字串型別方法或數學函式。
  • 在 C# 組件中撰寫使用者定義函式,並在 U SQL 指令碼中加以參考: 如果函式的邏輯需要超過其運算式語言,例如程序邏輯或遞迴的完整功能的 C#,這是更複雜的函式的慣用發佈點。
  • 在 C# 組件中撰寫使用者定義彙總工具,並在 U SQL 指令碼中加以參考: 藉由提供使用者定義彙總工具,自訂彙總邏輯可插入至彙總使用 GROUP BY 子句的 U SQL 的處理。
  • 在 C# 組件中撰寫使用者定義運算子,並在 U SQL 指令碼中加以參考: 使用者定義運算子 (UDO) 是 U SQL 自訂程式碼中的資料列集的運算子。它們以 C# 撰寫,並提供產生、 處理和取用資料列集的能力。

使用者定義函數,彙總工具和運算子,如 C# 組件必須載入至 U SQL 中繼資料目錄,與建立組件 (U SQL),然後使用參考組件參考的指令碼中。Azure 資料湖 Tools for Visual Studio 簡化註冊程序,並甚至還提供了所謂的程式碼後置經驗,您只要撰寫程式碼到特殊的 C# 檔案附加至指定的指令碼,並在提交此工具會負責所有的配管。

[圖 4 顯示展開的查詢,我剛剛提到的彙總。我使用 SELECT 陳述式內嵌 C# LINQ 運算式的擷取 「 提到 「 每則推文行 8 到 10 的陣列。@m (第 8 行) 現在包含資料列集的陣列。我將每個陣列轉換成資料列集包含一個資料列,每個陣列項目使用 EXPLODE 函式第 14 行中。我這個 EXPLODE CROSS APPLY,這表示,也會套用到每個資料列的資料列集 @m 的一部分。產生新的資料列 (第 12 行) 包含一個 「 提到 「 每個資料列。請注意如何重複使用相同的名稱 @m。我需要卸除前置 @sign 以配合現有的作者數值。這是與另一個 C# 運算式,我採取第 12 行中的位置 1 開始的子字串。最後,我等位中提到的作者線條 16 至 21 和群組來擴充我 COUNT 彙總,不區分大小寫的 Twitter 控制代碼,類別目錄 (行 23 到 27) 輸出行 29 到 31 的推文計數使用遞減排列的結果之前。

[圖 4 推文操作使用 C# 方法

1 @t = EXTRACT date string
2            , time string
3            , author string
4            , tweet string
5      FROM "/input/MyTwitterHistory.csv"
6      USING Extractors.Csv();
7  
8 @m = SELECT new SQL.ARRAY<string>(
9                 tweet.Split(' ').Where(x => x.StartsWith("@"))) AS refs
10      FROM @t;
11
12 @m = SELECT r.Substring(1) AS r
13           , "referenced" AS category
14      FROM @m CROSS APPLY EXPLODE(refs) AS t(r);
15
16 @t = SELECT author, "authored" AS category
17      FROM @t
18      UNION ALL
19      SELECT *
20      FROM @m
21      WHERE r != null && r != "";
22
23 @res = SELECT author.ToLowerInvariant() AS author
24             , category
25             , COUNT( * ) AS tweetcount
26        FROM @t
27        GROUP BY author.ToLowerInvariant(), category;
28
29 OUTPUT @res TO "/output/MyTwitterAnalysis.csv"
30 ORDER BY tweetcount DESC
31 USING Outputters.Csv();

讓我們看看一些更詳細地查看緊密整合的 C# U SQL 電源這些組件。

中的指令碼的粗體部分 [圖 4 顯示 U SQL 預期的位置,並接受 C# 運算式的地方。如您所見,您可以使用 C# 運算式中擷取及使用輸出子句、 SELECT 子句以及 WHERE 子句中以及在 GROUP BY 子句、 ORDER BY 子句和 EXPLODE 函式,不過在本例中我只是參考兩個第二個案例的資料行名稱。

整合的重要層面是,C# 運算式具有完整存取之查詢運算式內的純量值可順暢地在因為,這些輸入 C# 型別。例如在第 9 行的資料行推文、 r 行 12,21,與作者行 23 到 27 行中的所有緊密整合不需要額外的包裝函式語法的 C# 運算式。

行 6 到 31 的擷取和使用輸出子句會將 C# 運算式導致使用者定義運算子的執行個體。兩個內建的運算式會分別傳回抽選程式,以及 outputter 執行個體的 factory 方法的呼叫。

讓我們看看幾行 8 和 9 中稍微詳細說明在 C# 運算式:

new SQL.ARRAY<string>(tweet.Split(' ').Where(x => x.StartsWith("@")))

這是使用 C# 的絕佳範例: U SQL 內建型別 SQL。陣列 < T > 是實際的 C# 物件類型提供預期的 SQL/Hive 功能,而不需要現有的 C# 陣列型別的副作用更新函式。您只會使用新的 C# 運算子來建立新的執行個體。取得建立只將套用許多字串已定義的資料行推文的作業分割成單字的字串類型的執行個體。那里不多想知道就如同一般的 SQL 用語的特定字串型別功能: 您可以在完整的 clr 垂手可得。

還不只如此。Split 方法會傳回 IEnumerable < 字串 >。所以任何進一步處理,例如,若要取得 「 提到 「 篩選從推文文字可以使用 LINQ 運算式和與述詞中使用 lambda 運算式。現在試著,使用標準的 SQL 語言!

讓我們也看看第 21 行中的 WHERE 子句。同樣地,我只需提供 C# 運算式中的資料列集的資料行參考。此內容中的運算式必須產生的型別 bool 值。現在 C# 有兩個值的邏輯,以及不三值邏輯 SQL 的方式運作。因此,比較 r! = null 會傳回 true,如果 r 不是 null 或空值為 false。使用 C# 邏輯運算子 & &、 我的 C# 執行順序的保留,更重要的是,如果第一個會評估為 false,則不會執行正確的比較短領域的保證。U SQL 也支援以 SQL 為基礎的 AND 和 OR 裡面,並提供簡短剪下,但是讓重新排列效能更好的述詞。所有這些可讓開發人員更有效率的執行與語意的保護措施之間選擇。

U SQL、 Visual Studio 程式碼後置功能和組件

接下來我可以使用 Azure 資料湖 Tools for Visual Studio 中所示的 C# 程式碼重構 C# 函式使用工具的程式碼後置功能, [圖 5。當我再提交指令碼時,它會自動部署相關聯的.cs 檔案中的程式碼會在提交服務。若要能參考方法和型別和 U SQL 中的函式,類別定義為公用後必須定義為靜態的公用物件。

在 Visual Studio 中的程式碼後置
在 Visual Studio 中的 [圖 5 程式碼後置

此工具會依照下列三個步驟:

  1. .Cs 檔案會編譯成組件檔。
  2. 使用者的 U SQL 指令碼取得擴充加入 U SQL 中繼資料類別目錄中建立組件檔的二進位內容的 CREATE ASSEMBLY 陳述式加入標頭。
  3. 它會移除已註冊的組件,DROP ASSEMBLY 陳述式與指令碼的結尾處新增 [清理]。

也可以部署和程式碼做為組件我 U SQL 中繼資料在目錄中註冊自己明確。這可讓我和其他程式碼在未來的指令碼的人使用。它也是慣用的方法來管理您的使用者定義函數、 彙總工具和運算子,如果您有更複雜的程式碼,您想要個別維護,您可能想要加入現有的程式碼,可能已經撰寫其他內容 (例如您 XML 或 JSON 格式的程式庫) 或甚至是呼叫外部可執行檔中。

類似於關聯式資料庫,例如 SQL Server,U SQL 提供中繼資料目錄,並支援標準的資料庫物件,例如資料庫、 結構描述、 資料表等。其中一個物件是組件中繼資料物件。使用 CREATE ASSEMBLY 陳述式,您可以在資料庫中註冊組件。組件是物件範圍設定為資料庫中。組件 DLL 檔案取得放入您主要的 Azure 資料湖儲存體帳戶中的類別目錄資料夾內的相關資料庫資料夾內的組件資料夾中。

除了儲存您的組件,您可以指定將與您的組件一起儲存,當您參考的組件會包含其他檔案。CREATE ASSEMBLY 陳述式的語法文法如下所示 (請參閱 U SQL 語言參考文件在 bit.ly/1HWw0cc 如需詳細資訊):

Create_Assembly_Statement :=
  'CREATE' 'ASSEMBLY' ['IF' 'NOT' 'EXISTS'] Assembly_Name
  'FROM' Assembly_Source
  ['WITH' 'ADDITIONAL_FILES' '='
    '(' Assembly_Additional_File_List ')'].
Assembly_Name := Quoted_or_Unquoted_Identifier.
Assembly_Source :=
  Static_String_Expression | lexical_binary_value.

說到參考的組件,U SQL 已預先載入的系統組件和命名空間,包括系統和 System.Linq 一小群。集合會保留小,而保留的編譯時間和工作的資源使用率較低。如果您想要不同的系統組件參考,您可以將它們只包含加入 System.Xml 為下列陳述式:

REFERENCE SYSTEM ASSEMBLY [System.Xml];

一旦名稱 TweetAnalysis 已註冊組件包含推文分析函式,可以參考此資料並且使用做為 [圖 6。我需要執行更多清理周圍除了只是提到 @ 符號。組件也包含 cleanup_mentions 函式會執行卸除以外的其他處理 @。

[圖 6 U SQL 中的組件參考

1 REFERENCE ASSEMBLY TweetAnalysis;
2
3 @t = EXTRACT date string
4            , time string
5            , author string
6            , tweet string
7      FROM "/input/MyTwitterHistory.csv"
8      USING Extractors.Csv();
9
10 @m = SELECT Tweets.Udfs.get_mentions(tweet) AS refs
11      FROM @t;
12
13 @t = SELECT author, "authored" AS category
14      FROM @t
15      UNION ALL
16      SELECT Tweets.Udfs.cleanup_mentions(r) AS r, "mentioned" AS category
17      FROM @m CROSS APPLY EXPLODE(refs) AS Refs(r);
18
19 @res = SELECT author.ToLowerInvariant() AS author
20             , category
21             , COUNT(*) AS tweetcount
22        FROM @t
23        GROUP BY author.ToLowerInvariant(), category;
24
25 OUTPUT @res
26 TO "/output/MyTwitterAnalysis.csv"
27 ORDER BY tweetcount DESC
28 USING Outputters.Csv();

U SQL 統一結構化和非結構化資料

如同到目前為止,則 [U SQL 可以很容易 schematize 讀取使用擷取運算式上的檔案。不過,一旦資料準備已達到階段為已知的結構描述的情況,是合理為換行到檢視或資料表值函式,可讓多個陳述式中,參數化檢視擷取。

[圖 7 顯示新的程式碼。第 2 行中的 CREATE FUNCTION 陳述式會建立與提供的預設值 (第 4 行),並傳回 @res 資料列集使用三個資料行的作者、 分類和 tweetcount (行 6 到 11) 的資料表類型的參數 @file U SQL 資料表值函數 Tweet_Authors_Mentions。參數會取得在參考第 20 行,並且會傳回最後一個指派給 @res 中的結果列 34。

[圖 7 參數化資料表值函式

1 DROP FUNCTION IF EXISTS Tweet_Authors_Mentions;
2 CREATE FUNCTION Tweet_Authors_Mentions
3 (
4   @file string = "/Samples/Data/MyTwitterHistory.csv"
5 )
6 RETURNS @res TABLE
7 (
8    author string
9 ,  category string
10 ,  tweetcount long?
11 )
12 AS BEGIN
13 REFERENCE ASSEMBLY TweetAnalysis;
14
15 @t =
16   EXTRACT date string
17         , time string
18         , author string
19         , tweet string
20   FROM @file
21   USING Extractors.Csv();
22
23 @m =
24   SELECT AzureConDemo.Udfs.get_ref(tweet) AS refs
25   FROM @t;
26
27 @t =
28   SELECT author, "authored" AS category
29   FROM @t
30   UNION ALL
31   SELECT AzureConDemo.Udfs.cleanup(r) AS r, "referenced" AS category
32   FROM @m CROSS APPLY EXPLODE(refs) AS t(r);
33
34 @res =
35   SELECT author.ToLowerInvariant() AS author
36        , category
37        , COUNT( * ) AS tweetcount
38   FROM @t
39   GROUP BY author.ToLowerInvariant(), category;
40 END;

請注意 U SQL 資料表值函式會一律內嵌於查詢指令碼,因此 U SQL 最佳化工具可以原因,並最佳化跨所有陳述式。,例如,呼叫函數,如下所示:

1 OUTPUT Tweet_Authors_Mentions(DEFAULT)
2 TO "/Samples/Data/Output/MyTwitterAnalysis.csv"
3 ORDER BY tweetcount DESC
4 USING Outputters.Csv();

通常,備妥的資料將會儲存為結構化資料提供額外的存放裝置最佳化,例如叢集的索引和資料分割的能力 U SQL 資料表中。這些陳述式顯示多麼 U SQL 可讓它使用 CREATE TABLE 查詢陳述式建立資料表:

1 DROP TABLE IF EXISTS TweetAuthorsAndMentions;
2 CREATE TABLE TweetAuthorsAndMentions(INDEX idx
3   CLUSTERED(author ASC)
4   PARTITIONED BY HASH(author) INTO 5
5 )
6 AS Tweet_Authors_Mentions(DEFAULT);

第 3 行指定資料表的索引已叢集化作者資料行以遞增順序,第 4 行會水平分割成 5 個資料分割使用作者值的雜湊的內部表示法。Tweet_Authors_Mentions 函式的輸出執行此陳述式之後將會儲存為新的資料表,而且這些特性。U SQL 也支援循環配置資源和定界分割水平資料分割配置,以及可個別管理資料分割的垂直資料分割。

現在資料表可以由其他人使用,來查詢資料和執行進一步的分析。下列查詢會在 [圖 8 使用內建的 U SQL 排名函式與視窗化運算式計算中間值的每個作者和類別的推文。它也會計算的相對與絕對排名位置為作者和有 50 個以上的推文的類別。

[圖 8 進行分析與 U SQL 視窗化運算式

1 @res =
2  SELECT DISTINCT
3         author, category, tweetcount
4       , PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY tweetcount ASC)
5         OVER (PARTITION BY category) AS median_tweetcount_perhandle_category
6       , PERCENT_RANK() OVER
7         (PARTITION BY category ORDER BY tweetcount ASC) AS relative_rank
8       , ROW_NUMBER() OVER
9         (PARTITION BY category ORDER BY tweetcount DESC) AS absolute_rank
10 FROM TweetAuthorsAndMentions
11 WHERE tweetcount > 50;
12
13 OUTPUT @res
14 TO "/Output/Demo/tweeter_ranking.csv"
15 ORDER BY absolute_rank, category ASC
16 USING Outputters.Csv();

為了進一步了解 SQL 為基礎的視窗化運算式,我們先來仔細看看運算式行 4 到步驟 9。OVER 運算式適用於兩個分析函式 PERCENTILE_DISC 和 PERCENT_RANK 和左側上的排名函式即端每個資料分割的資料列集 (所謂的 windows) 指定的分割 BY 子句 (在所有三種情況下,相同的資料分割會根據類別)。計算等級的兩個函式還需要每個視窗內的資料類型的排序說值放置的位置。PERCENT_RANK 計算資料列的視窗化運算式所指定的資料列群組內的相對順位。ROW_NUMBER 計算的資料列群組中的資料列的位置。PERCENTILE_DISC 函數會計算已排序的值,指定視窗為基礎的資料行值的離散分佈中特定百分位數。PERCENTILE_DISC(0.5) 會按照推文的每個視窗內的第 50 百分位數 (亦即中間值) 會計算以遞增順序進行計算。

這就是為什麼 U SQL!

希望你一窺為什麼 U SQL 輕鬆地查詢和處理巨量資料,並了解思考背後的語言。語言提供了許多其他功能類似:

  • Overset 檔案模式的運作方式
  • 使用垂直資料分割的資料表
  • Azure SQL 資料庫、 SQL 資料倉儲和 Azure Vm 中的 SQL Server 的聯合的查詢
  • 封裝您的 U SQL 程式碼,以檢視和程序
  • 多個 SQL 視窗化函式
  • 使用 C# 使用者定義運算子 (自訂擷取器、 處理器) 的程式
  • 更複雜的類型 (對應、 陣列)

如需詳細資訊,在 U SQL 參考文件,請參閱 bit.ly/1HWw0cc

若要總而言之,U SQL 可讓巨量資料容易處理,因為它:

  • 與使用者程式碼的表達力統一宣告式查詢
  • 統一查詢結構化和非結構化資料
  • 統一本機和遠端查詢
  • 增加生產力和靈活度,從第一天

總結

U SQL 是其中一個 Microsoft 正在努力簡化 Azure 資料湖的方式服務撰寫、 偵錯和最佳化分析任何大規模最具生產力的環境。使用豐富的支援來撰寫及監視 Hive 工作,C#-根據撰寫模型,用於建置 Storm (storm.apache.org) 即時資料流和支援至運作正常,您更專注於您想要花時間偵錯分散式基礎結構比回答的問題的 Azure 資料湖服務可讓從開發作業週期的每個階段的工作。目標是要讓巨量資料技術更簡單且更容易存取的最大的數字: 巨量資料專業人員、 工程師、 資料科學家,分析師和應用程式開發人員。


Michael Rys是 Microsoft 的首席程式經理。他一直在進行資料處理和查詢語言自 1980 年代。他有代表 Microsoft 在 XQuery 和 SQL 的設計委員會,並且發生 SQL Server 關聯式與 XML、 地理空間及語意搜尋的其他功能。目前他負責巨量資料查詢語言,例如範圍和 U SQL 時,他不喜歡時間與他的家人提或 autocross。在 Twitter 上追蹤他: @MikeDoesBigData

感謝以下的微軟技術專家對本文的審閱: Omid Afnan 和 Ed Triou