大数据处理语言U-SQL介绍

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

微软宣布了新的 Azure 数据湖(Azure Data Lake)服务,该服务被用于云分析,包括了一个超大规模信息库;一个在 YARN 上建立的新的的分析服务,该服务允许数据开发者和数据科学家分析全部的数据;还有 HDInsight,一个全面管理 Hadoop、Spark、Storm 和 HBase 的服务。Azure 数据湖分析包括 U-SQL,这个语言综合了 SQL 的优点与你自己所写代码的表现能力。U-SQL 的可扩展分布式查询功能让你可以有效地分析存储器或关联存储器(比如 AzureSQL 数据库(Azure SQL Database))内的数据。这篇博文中,我将会概述 U-SQL 的开发目标、我们的一些灵感和这个语言背后的设计理念,同时我会向你展示一些用于说明这个语言几个主要方面的例子。

U-SQL

为什么我们需要 U-SQL?

如果你分析了的大数据分析的特点,就会很容易的产生一些有关易用性的需求,一个功能强大的语言应该:

可以处理任何类型的数据。例如从安全日志中分析僵尸网络(BotNet)攻击模式,通过机器学习来提取图像和视频中的特征,这种语言需要允许你操作任何类型的数据。

使用自定义的代码很容易地表现复杂的(经常是表现某公司自营业务的)算法。举例来说,基础的查询语言通常不易表达自定义的过程,从用户定义的函数到他们自定义的输入输出格式都是如此。

对任何尺度的数据进行有效的缩放,你无须再关心扩展拓扑(scale-out topology)、管道代码或特定分布式基础设施的限制。

现有的大数据语言该如何处理这些需求?

基于 SQL 的语言(例如 Hive 等)提供声明性的方式,原生支持扩容,并行执行以及优化。这个特性使得其简单易用,被开发人员广泛使用;其功能强大,适用于很多标准的分析及仓储类型。不过他们的扩展模型和对非结构化数据及文件的支持经常只是些附属功能,不容易使用。比如,即使您只想快速浏览一下文件或者远程数据,您也需要在查询之前先创建编目对象,将其系统化。这点严重降低了语言的敏捷性。虽然基于 SQL 的语言通常有一些扩展点来定制格式,定义函数以及聚合,但是他们的构建,集成和维护相当复杂,各种编程语言的支持也差别很大。

用基于编程语言的方式来处理大数据,这样方式可以简单方便地添加定制化代码。但是,程序员通常需要另外编写代码来处理扩容和性能,并且难以管理执行拓扑和工作流。比如不同执行阶段的并发或者架构扩容。这样的代码不仅难写,而且不易优化性能。有些框架支持声明式组件,例如集成语言查询,或者嵌入式 SQL 支持。但是 SQL 可能会被当做字符串处理,没有辅助工具。并且可扩展性集成较差,由于程序性代码并不考虑副作用,所以较难优化,而且不能重用。

综合考虑基于 SQL 的语言以及程序语言,我们设计出了 U-SQL,他用 C# 编写,具备声明性 SQL 语言原生的可扩展性,又对其进一步扩展。集各种范式于一身,集结构化,非结构化,远程数据处理于一身,集声明式以及定制化命令编程于一身,集语言扩展能力于一身。

U-SQL 构建在微软的 SCOP 经验以及其他语言例如 T-SQL,ANSI SQL 以及 Hive 的基础之上。例如,我们对 SQL 和编程语言的集成,执行以及对 U-SQL 框架的优化都基于 SCOPE,这使得每天可以运行成千上万个作业。我们也会对调整系统元数据(数据库,表等等),SQL 语法,T-SQL,ANSI SQL 等 SQL Server 用户所熟悉的语言语义等支持,是的他们可以协同通过。 我们使用C#数据类型即表达式支持,这样您可以在 SELECT 里无缝潜入 C# 谓词及表达式,从而植入业务逻辑。最后,通过对 Hive 以及其他大数据语言数据模式,处理需求等研究,将其集成到我们的框架里。
简言之,基于现有语言和经验的 U-SQL 语言,有利于您简单地处理复杂问题。

展示 U-SQL!

我们假设我已经下载了所有我的 Twitter 历史记录,包括:我推送的,转发的,提到的。并且作为一个 CSV 文件上传到我的 Azure Data Lake Store。

U-SQL

在这里例子里,我知道我想要处理数据的结构,第一步我只想分组查询出每个作者的推送数据的数量:

U-SQL

上面的 U-SQL 脚本显示了三个使用 U-SQL 处理数据的主要步骤:

  • 提取。从你的源数据中提取数据。 简单的说就是使用 EXTRACT 申明查询,概述数据。申明的数据类型基于 C# 的数据类型,这里我使用了内置的 Extractors 类库去读取和schematize(系统化) CSV 文件。
  • 转换。使用 SQL 并且(或者)用户自定义操作 (你可以转换为其他时间)。在上面的例子中, 使用了一个常见的 SQL 表达式,做了一个 GROUP BY 聚合操作。
  • 输出。结果既可以是文件,也可以输出到一个 U-SQL 表格保存在内存中用作后续的处理。

注意 U-SQL 的 SQL 关键字和 C# 的语法表达式的区别是使用大写来提供语法区别,可能两者是一样的,但是如果大写就是 U-SQL 的关键字,他们的文字一样但是可能有不同的意义。

还要注意每个表达式分配了一个变量 (@t , @res)。允许 U-SQL 通过一步步的表达式(增量表达式流),递增的转换和编译数据,增量表达式是使用函数式 lambda 表达式组成(与 Pig 语言类似)。执行框架,并且编译所有的表达式为一个的表达式。这个表达式可以是全局最优化,所以扩展的方式不可能是逐行执行表达式。下面的图标通过向你显示图表的方式,显示在这篇博文中的下一个查询:

3

回到我们的例子,我现在想要添加额外的信息:关于推文中提及的人,并且扩展我的聚合去返回在我的 tweet 网中出现的频率,还有他们的推文中提及我的频率。因为我可以使用 C# 去操作数据,所以我可以使用 C#LINQ 表达式扩展一个 ARRAY。这时我把得到的数组使用 EXPLODE 传入数据集,并且使用 CROSS APPLY 操作应用 EXPLODE 到每条数据。我使用 UNION 操作联合作者,但是需要使用@重新给变量赋值。

这里使用另外一个C#表达式(这里我使用了substring从第一位开始取数据-翻译认为应该是排除@符的意思) .

4
下一步,我可以使用 Visual Studio 的 Azure 数据湖工具里的代码转换功能将 C# 代码重构成 C# 函数。提交脚本后,系统会将代码自动部署到服务器上。

5

我们也可以在U-SQL元数据目录里部署和注册代码集。这样,我们或者其他人可以不时重用这组脚本。以下例子表示了,在代码集注册为TweetAnalysis之后,如何找到函数。

 U-SQL

由于之前提到了除了删除@标识符之外,还想要对 mentions 做其他清理工作,所以该代码集还包含了一个 cleanup_mentions 函数,用来在删除@之后做其他处理。

为什么选择U-SQL

通过上述介绍,希望您已经窥测到了我们对 U-SQL 的想法,以及 U-SQL 是如何将查询以及大数据处理变得简单的。接下来的几周里,我们会进一步介绍该语言的设计逻辑,并会给出一些示例代码即应用场景,请参见Azure 博客大数据专题。我们会深入探讨一下特性:

  • 通过模式匹配操作文件集合
  • 使用(分区)表
  • 对 SQL Azure 数据库进行联邦查询
  • 将 U-SQL 代码封装为视图,表型数据函数,过程
  • SQL 窗体函数
  • 使用C#编写用户定义操作(定制抽取,处理过程)
  • 复合类型(MAP,ARRAY)
  • 使用 U-SQL 树立数据管道
  • U-SQL 对物联网分析中lambda架构的支持

U-SQL 将大数据处理变得简单:

  • 统一了声明行查询语言与复杂代码
  • 统一了结构化查询与非结构化数据
  • 统一了本地和远程查询
  • 一旦上线,即可提高生产力和敏捷性

不只是 U-SQL – Auzre 数据湖为您的所有数据创建生产力

我们旨在将 Azure 数据湖建立成最有用的集编写,调试和优化各种规模数据功能的强大工具,U-SQL只是其中一个环节。通过对编写与监控 Hive 作业的全面支持, 我们开发了基于 C# 的编码模型,他可以创建用于流处理的 Storm 作业,而且从创建,到执行,支持作业生命周期的每一阶段。Azure 数据湖使得您可以专心于业务逻辑而不是调试分布式环境。我们的目标就是将大数据技术变得更加简单,被更多数人使用:大数据专家,工程师,数据科学家,分析师以及应用开发人员。


本文作者:佚名

来源:51CTO

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
大数据是什么?用浅显的语言揭开神秘面纱
大数据是什么?用浅显的语言揭开神秘面纱
87 11
为什么大数据平台会回归SQL
在大数据领域,尽管非结构化数据占据了大数据平台80%以上的存储空间,结构化数据分析依然是核心任务。SQL因其广泛的应用基础和易于上手的特点成为大数据处理的主要语言,各大厂商纷纷支持SQL以提高市场竞争力。然而,SQL在处理复杂计算时表现出的性能和开发效率低下问题日益凸显,如难以充分利用现代硬件能力、复杂SQL优化困难等。为了解决这些问题,出现了像SPL这样的开源计算引擎,它通过提供更高效的开发体验和计算性能,以及对多种数据源的支持,为大数据处理带来了新的解决方案。
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
149 9
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
136 11
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
162 0
|
4月前
|
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
116 0
|
4月前
|
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
91 0
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
135 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等