2016 年 1 月

第 31 卷,第 1 期

此文章由机器翻译。

大数据 - 使用 U-SQL 更轻松地批量分析大数据

通过 Michael Rys |2016 年 1 月

新的 Microsoft Azure Data Lake 分析云中的服务 (bit.ly/1VcCkaH) 包括缩放性超高的存储库; 新的分析服务基于 YARN (bit.ly/1iS8xvP) 该视图使数据开发人员和数据科学家分析所有数据; 和 HDInsight (bit.ly/1KFywqg)、 一个完全托管的 Hadoop、 Spark、 Storm 和 HBase 服务。Azure Data Lake 分析还包括 U SQL,一种语言,可统一的 SQL 的好处,以及您自己的代码表现力。U SQL 可伸缩的分布式的查询功能使您能够有效地分析数据存储区中和跨如 Azure SQL Database 关系存储。在本文中,我将概述 U-SQL 中,一些灵感和语言的设计理念的动机,给出几个示例的语言的主要方面。

为什么 U SQL?

如果您分析大数据分析的特征,几个要求自然会出现的一种易于使用、 但功能强大的语言:

  • 处理任何类型的数据。从分析到图像和机器学习的视频从提取功能的安全日志中的僵尸网络攻击模式,需要使您能够对任何数据操作语言。
  • 自定义代码轻松地使用 express 复杂、 通常专有的业务算法。第一个项目符号点中的示例方案可能需要自定义处理通常并不轻松地在标准查询语言中,范围从用户定义的函数到自定义输入和输出格式表示。
  • 有效扩展到任意大小的数据而无需将重点放在向外扩展拓扑、 探测代码或特定的分布式基础结构的限制。

如何现有的大数据语言堆叠到这些要求?

基于 SQL 的语言,如配置单元 (hive.apache.org) 提供了一个声明性方法,以本机方式执行缩放、 并行执行和优化。这使它们能够轻松使用,为范围广泛的开发人员来说,熟悉并且功能强大的分析和仓库的很多标准类型。但是,他们的扩展性模型和非结构化数据和文件的支持是通常被外加在线并使用难度。例如,即使只是想要快速浏览文件或远程数据源中的数据,您需要创建目录对象,从而 schematize 文件数据还是远程数据源,然后才能查询它们,这会降低灵活性。并且基于 SQL 的语言通常有自定义格式化程序、 用户定义函数和聚合函数的几个扩展点,尽管它们是相当复杂,若要构建、 集成和维护,具有不同程度的编程模型中的一致性。

基于语言的方法来处理大数据进行编程,其部分中,可以方便地添加自定义代码。但是,一名程序员通常具有对规模和性能,通常向管理执行拓扑和工作流如不同的执行阶段或向外扩展体系结构之间的同步进行显式编码。此代码很难编写正确并更难针对性能进行优化。某些框架支持声明性组件,如语言集成查询或嵌入式 SQL 的支持。但是,此 SQL 可能集成为缺少的工具支持的文字字符串。因此,可扩展性集成可能会受到限制或--由于不会防止产生副作用的过程性代码 — 难优化且难以重复使用。

满足使用 U SQL 要求

基于 SQL 的和过程性语言的问题考虑在内,U SQL 旨在从一开始向上作为演变而来的声明性的 SQL 语言与通过用户代码用 C# 编写的本机可扩展性。U SQL 统一了以下:

  • 声明性和命令性编码模式和体验
  • 在扩展你的自定义用户代码的语言功能体验
  • 非结构化或结构化是否对所有数据处理
  • Azure Data Lake 和使用联合的查询其他 Azure 数据源中的数据处理

在从声明性和可扩展的脚本语言的 Microsoft 内部体验了实践经验教训生成 U SQL (bit.ly/1OGUNIY) 的并行执行,或作用域和 T-SQL、 ANSI SQL 和 Hive 等的现有语言称为结构化计算进行了优化。例如,我们根据我们的 SQL 和编程语言集成和执行和优化 framework U SQL 上当前运行几十万个作业的每一天内部的作用域。我们还对齐 (数据库表等) 的元数据系统、 使用 T-SQL 和 ANSI SQL,借助我们的 SQL Server 的大多数客户将熟悉的查询语言的 SQL 语法和语言语义。以及我们使用 C# 数据类型和 C# 表达式语言以便您可以无缝地编写 C# 谓词和 SELECT 语句内的表达式和使用 C# 来添加自定义逻辑。最后,我们借助配置单元和其他大数据语言以确定模式和数据处理要求,并将它们集成到我们的框架。

简单地说,以 U SQL 语言为基础来在这些现有的语言和体验应表示在大型数据查询语言空间中的,则返回 true 演变,方便你开始,尚未足够强,以便最困难的问题。

向我显示 U SQL

假设我下载的所有我推文,retweets 我 Twitter 历史记录和提及作为 CSV 文件,并放入我的 Azure Data Lake 存储区。我可以使用 Azure Data Lake Tools for Visual Studio 在预览该文件并理解的结构。我可以执行此操作使用服务器资源管理器可以找到我的数据 Lake 存储帐户并打开资源管理器在我的默认存储帐户。图 1 显示数据流 (在本例中我的 CSV 文件)。在 U SQL 我使用格式后期的绑定到我的数据流量,因此此预览版仅显示列基于分隔符,但不会指定类型。

在 Visual Studio 中的数据流预览
图 1 Visual Studio 中的数据流预览

在这种情况下,我知道我想要处理的数据的架构和对于初学者而言,我想要只为每个作者在 tweet"网络。"中的推文数目进行计数 中的 U SQL 脚本 图 2 显示的处理与 U SQL 的数据的三个主要步骤:

  1. 将数据从您的源提取到行集。请注意,您只需 schematize 它在查询中使用提取语句。数据类型基于 C# 数据类型,该脚本使用内置的提取器库来读取和 schematize CSV 文件。
  2. 转换使用 U SQL 或自定义 opertors 行集操作的一系列中每个通常在一个或多个在过去的行集上构建的行集。在示例中 图 2, ,它是一个熟悉的 SQL 表达式执行提取表达式计算结果的行集上的分组依据聚合。
  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 中的作业执行图
图 3 Visual Studio 中的作业执行图

U SQL 中的 C# 集成

回到我的示例中,我现在想要添加人员推文中提及的其他信息和扩展我的聚合,以返回何种频率的推文和频率被提到这些创作我 tweet 的网络中的人员。为此我采用了一下 C# 集成 U SQL 中。

核心依靠 U SQL 的 C# 中为其类型系统和标量表达式语言提供了对 C# 的丰富和类、 方法、 函数、 运算符和类型的 CLR 库的查询编写器访问权限。所有 C# 运算符除外 (,等等 =、 + =,请按照) 的赋值运算符在 U SQL 标量表达式中有效。具体而言,所有比较运算符如 = =、! =、 <>、、 三元比较条件?true 表达式: false 表达式均为空的 coalesce 运算符概览支持。即使使用 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 脚本中引用它们: 通过提供用户定义聚合函数,自定义聚合逻辑可以插入 U-SQL 处理的聚合使用 GROUP BY 子句。
  • 在 C# 程序集编写用户定义的运算符,并在 U SQL 脚本中引用它们: 用户定义运算符 (UDO) 是 U SQL 自定义代码的行集运算符。它们用 C# 编写,并有助于生成、 处理和使用行集的能力。

对于用户定义函数,聚合函数和运算符,C# 程序集必须加载到与创建程序集 (U SQL) 的 U SQL 元数据目录,然后使用引用程序集引用了在脚本中。Azure Data Lake Tools for Visual Studio 轻松注册过程,并甚至还提供了一种所谓的代码隐藏体验,您只需编写代码的位置到一个特殊的 C# 文件附加到给定脚本并且在提交该工具负责所有的基本功能。

图 4 显示了我刚刚提到的聚合扩展的查询。我可以使用与内联 C# LINQ 表达式的 SELECT 语句,将从每个推文的"提及"提取到行 8 到步骤 10 中的数组。@m (第 8 行) 现在包含行集的数组。我可以使用在第 14 行中的分解函数要将每个数组转变为包含每个数组项的一个行的行集。我这样做此分解了 CROSS APPLY,这意味着将应用于行集 @m 每一行的一部分。生成新的行集 (第 12 行) 包含每行一个"注意"。请注意,我重复使用相同的名称 @m。我需要先删除前导的 @sign 以符合我的现有作者值。这是与另一个 C# 表达式在这里我可以进行的子字符串在第 12 行的位置 1 开始的。最后,我拥有中提及作者线条 16 到 21 和扩展我 COUNT 聚合到组按不区分大小写的 Twitter 句柄和类别 (行到第 27 23) 在输出结果进行排序按降序行 29 到 31 的推文计数之前联合。

图 4 Tweet 操作使用 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 子句和分解函数,尽管在此示例中我只需引用列名称在两个后一种情况下。

集成的一个重要方面是 C# 表达式在无缝的方式有完全访问权限内的查询表达式的标量值因为,在键入与 C# 类型。示例、 在第 9 行中的列推文、 r 行 12,21 和作者第 23 和 27 行中的所有无缝集成而无需额外包装语法的 C# 表达式。

第 6 和 31 行中的提取和输出使用子句采用 C# 表达式导致用户定义的运算符实例。两个内置表达式是对分别返回提取程序和 outputter 实例的工厂方法的调用。

让我们看一下 8 和 9 中更详细地从 C# 表达式:

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

这是使用 C# 的一个极好示例: SQL U SQL 内置类型。数组 < T > 是实际的 C# 对象类型提供了预期的 SQL/配置单元功能,而无需现有的 C# 数组类型的带副作用的更新功能。您只需使用新的 C# 运算符来创建新实例。通过只将应用对已定义列推文将分解成单词的字符串类型的很多字符串操作获取创建实例。那里不更想知道从哪里获得某些字符串类型功能与普通的 SQL 语句: 可以随时 CLR 的完整功能。

我们还能做得更好。Split 方法返回 IEnumerable < 字符串 >。对于任何进一步处理,如筛选,以获取"提及"从推文的单词可以通过 LINQ 表达式和使用 lambda 表达式作为谓词。现在要尝试的是,默认情况下,使用标准的 SQL 语言!

我们还看一下第 21 行中的 WHERE 子句。同样,我可以只提供 C# 表达式引用这些列在行集中。在此上下文中的表达式必须导致 bool 类型的值。现在 C# 中具有两个值的逻辑,并不三值逻辑的方式 SQL 执行它。因此,比较 r! = null,将返回如果 r 不为 null 或如果它为 null 属性为 false,则返回 true。通过使用 C# 逻辑运算符 & &、 获取的 C# 执行顺序不保留,并可在更重要的是,如果第一个的计算结果为 false 则不执行右比较短领先的保证。U SQL 还支持的基于 SQL 的 AND 和 OR 是连词不提供短领先,但允许重新排序以改善性能的谓词。所有这些使得开发人员之间更高效地执行和语义的保护措施的选择。

U SQL、 Visual Studio 代码隐藏功能和程序集

下一步我可以使用 Azure Data Lake Tools for Visual Studio 将 C# 代码重构为 C# 函数使用该工具的代码隐藏功能,如中所示 图 5。当我然后提交该脚本时,它会自动将关联的.cs 文件中的代码部署到在提交服务。若要引用的方法和类型和 U SQL 中的函数,这类具有定义为公共的这些对象需要定义为静态公共。

在 Visual Studio 中的代码隐藏
图 5 Visual Studio 中的代码隐藏

该工具采用以下三个步骤:

  1. .Cs 文件编译到程序集文件中。
  2. 用户的 U SQL 脚本获取扩充了 U SQL 元数据目录中创建程序集文件二进制内容的 CREATE ASSEMBLY 语句中添加标头。
  3. 它将删除注册的程序集使用 DROP ASSEMBLY 语句的脚本结尾处添加一个清理。

此外可以部署和代码作为程序集我 U SQL 元数据在目录中注册自己显式。这样,我和其他用户通过使用代码在将来编写的脚本。它也是首选的方法来管理您的用户定义函数、 聚合函数和运算符,如果您有想要维护单独的更复杂代码,您可能想要包括的现有代码,可能都已写入其他环境 (如 XML 或 JSON 的库中) 或甚至调用外部可执行文件中。

类似于诸如 SQL Server 关系数据库,U SQL 提供了一个元数据目录和支持的标准数据库对象,例如数据库、 架构、 表,等等。一个对象是一个程序集元数据对象。通过使用 CREATE ASSEMBLY 语句,您可以在数据库中注册程序集。程序集是对象作用域限定为一个数据库;程序集 DLL 文件获取放入您的主 Azure Data Lake 存储帐户中的目录文件夹中的相关数据库文件夹中的程序集文件夹中。

除了存储您的程序集,可以指定将与您的程序集一起保存,并且时引用程序集将包括在内的其他文件。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 语句创建 U SQL 表值函数 Tweet_Authors_Mentions 与参数 @file 具有提供的默认值 (第 4 行) 并返回包含三列作者、 类别和 tweetcount (第 6 到 11 行) 的表类型的 @res 行集。该参数获取中引用的第 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 和排名函数 ROW_NUMBER 在左侧面每个分区的行集 (所谓的 windows) 指定与分区 BY 子句 (在同一个分区基于类别的所有三种情况)。计算排名的两个功能还需要排序的每个窗口中的数据以说放置值。PERCENT_RANK 计算一组由窗口化表达式指定的行内的行的相对排名。ROW_NUMBER 计算的行组中的行的位置。PERCENTILE_DISC 函数计算指定基于的列的值的离散分布的窗口中经过排序的值的特定百分位数。PERCENTILE_DISC(0.5) 将计算每个窗口为排序的推文中的第 50 百分位数 (中值) 计算按升序排序。

这就是为什么 U SQL!

我希望有大致了解一下为什么 U SQL 变得简单查询和处理大型数据并确保你了解该语言的理由。如该语言提供了许多其他功能:

  • 运行溢流具有模式的文件
  • 使用垂直分区的表
  • 针对 Azure SQL DB、 SQL 数据仓库和 Azure Vm 中的 SQL Server 的联合的查询
  • 封装 U SQL 代码使用视图和过程
  • 更多 SQL 开窗函数
  • 具有 C# 用户定义的运算符 (处理器中的自定义提取器) 的程序
  • 更复杂类型 (映射、 数组)

请参考的 U SQL 参考文档的详情,请访问 bit.ly/1HWw0cc

总之,U SQL,可使大数据处理变得简单,因为它:

  • 将声明性查询与你的用户代码的表现力统一在一起
  • 统一了查询结构化和非结构化数据
  • 统一了本地和远程查询
  • 提高工作效率和灵活性从第一天

总结

U SQL 是只是一种 Microsoft 正致力于使 Azure Data Lake 服务用于创作、 调试和优化分析任何规模最高效的环境。使用丰富的支持的创作和监视 Hive 作业,C#-基于创作模型,用于构建 Storm (storm.apache.org) 实时流式处理和支持的作业生命周期从开发到正常运行,Azure Data Lake 服务允许您更专注于你想要比花费时间调试分布式基础结构回答的问题的每个阶段的作业。目标是使大型数据技术更简单、 更容易访问的数目最多可能: 大数据专业人员、 工程师、 数据科学家、 分析师和应用程序开发人员。


Michael Rys是 Microsoft 的首席项目经理。他一直致力于数据处理和查询语言自上世纪 80 年代。他已在 XQuery 和 SQL 设计委员会上表示 Microsoft 并呈现出 SQL Server 超越关系使用 XML、 地理空间信息和语义搜索。目前他正致力于大型数据查询语言,如作用域和 U SQL 时他没有享受与家人老老实实呆在水下或 autocross。在 Twitter 上关注他: @MikeDoesBigData

感谢以下的微软技术专家对本文的审阅: Omid Afnan 和 Ed Triou