寻觅Azure上的Athena和BigQuery(一):落寞的ADLA
AWS Athena和Google BigQuery都是亚马逊和谷歌各自云上的优秀产品,有着相当高的用户口碑。它们都属于无服务器交互式查询类型的服务,能够直接对位于云存储中的数据进行访问和查询,免去了数据搬运的麻烦。对于在公有云的原生存储上保存有大量数据的许多客户而言,此类服务无疑非常适合进行灵活的查询分析,帮助业务进行数据洞察。
AWS Athena和Google BigQuery当然互相之间也存在一些侧重和差异,例如Athena主要只支持外部表(使用S3作为数据源),而BigQuery同时还支持自有的存储,更接近一个完整的数据仓库。因本文主要关注分析云存储中数据的场景,所以两者差异这里不作展开。
对于习惯了Athena/BigQuery相关功能的Azure新用户,自然也希望在微软云找到即席查询云存储数据这个常见需求的实现方式。这个问题比较少有直接而正面的回答,故本系列文章就此专题进行探讨和实验。
我们先以AWS Athena为例来看看所谓面向云存储的交互式查询是如何工作的。我们准备了一个约含一千行数据的小型csv文件,放置在s3存储中,然后使用Athena建立一个外部表指向此csv文件:
这里使用的测试数据来自一个国外的公开数据集,是中东某地区的信用卡借贷数据,是公开且脱敏的。数据来源相关链接为 https://data.opendatasoft.com/explore/dataset/consumer-and-credit-card-loans%40kapsarc/information/?disjunctive.periodicity&disjunctive.quarter&disjunctive.load_type
然后我们建立一个简单的SQL查询,用以统计多年来每个季度的总借贷额并以降序排列:
得到的查询结果为:
嗯,看上去AWS Athena轻松地完成了我们的分析任务。接下来则轮到Azure出场了。总的来说,Azure可以有多种服务和方式可达到类似AWS Athena的分析效果,不同的方法各自有优势和取舍。
第一种方法,是使用Azure Data Lake Analytics(下简称ADLA)。因为从产品布局上讲,ADLA是与AWS Athena最为对应的Azure服务。该服务最初于2015年公布,于2016年GA,笔者两年前系统梳理微软生态的文章中曾提到了它。该服务可通过与第一代的Azure Data Lake Storage(下简称ADLS)配套使用,实现大规模的数据并行处理与查询。其主要支持的查询语言是U-SQL,一个结合了SQL与C#特点的独有语言。
百闻不如一见,我们还是直接动手尝试一下,使用ADLA来实现上面Athena的同样任务。首先,需要把待分析文件存入配合使用的存储服务ADLS(ADLA/ADLS相关服务并未在Azure中国区上线,此处使用的是Global Azure):
其次,需要新建一个ADLA的服务“账户”并指向刚才的ADLS存储:
然后就可以开始进行数据查询了。任务(Job)是ADLA中的核心概念,我们可以新建一个任务,配以一段U-SQL脚本来表达和前面Athena例子中SQL相同的语义:(ADLA没有交互式查询窗口,所以我们把结果落地存储到一个csv文件中)
可以看到U-SQL写起来很有意思,的确是结合了C#和SQL的语法与特点。与SQL类似,其核心处理对象为RowSet,即行的集合。我们的脚本中没有使用外部表(U-SQL中外部表仅支持SQLServer系数据库)但通过Extractors.Csv方法达到了同样的目的。事实上更复杂的U-SQL脚本还可以添加上C#类库引用和函数调用等功能,这样结合两种语言的优势来撰写脚本可发挥各自优势,使得ADLA具有十分强大的分析能力。
然后我们执行这个任务,ADLS的引擎就会开始执行相应脚本,同时绘制出具体的执行计划和步骤:
最后我们看一下输出文件的内容,同前面的结果是一致的:
整个流程走下来,可以看到ADLA作为一个完全托管的服务,与Athena的设计理念的确是比较相近的,也能够轻松使用脚本直接针对对象存储中的数据文件进行数据分析。从Azure Portal上来看,整套产品也有着颇高的完成度:
然而,通过实际的操作和体验,我们也发现了ADLA在产品层面也还是存在一些短板,使得其使用范围较为受限:
ADLA必须配合ADLS Gen1存储使用,不能适用于最为常见的Azure Blob Storage,这在很多时候需要额外的数据搬运,也不便于应用程序集成;
U-SQL语言虽然有独到之处,但毕竟有些“四不像”,配套的开发环境也尚不够成熟,导致了学习和迁移成本很高,调试起来更是非常麻烦(如果不熟悉语法,即便是上面这小段U-SQL也需要折腾好一会儿);
该服务主要为超大规模数据处理查询所设计和优化,对于日常小规模的简单数据处理显得过于笨重和缓慢,例如我们上面的脚本居然需要1分钟左右来执行。
也许正由于如上所述产品上的种种不足,它正式发布后叫好不叫座,市场反应比较冷清。逐渐地,ADLA产品似乎进入了维护状态,新特性的更新较为缓慢;而坊间更是传闻相应团队已经重组,与Azure Storage及其他大数据产品团队进行了整合——这一结果委实令人唏嘘。要知道在ADLA/ADLS诞生之初,它们可是背负着将微软内部大数据平台Cosmos(非现在的CosmosDB)进行云产品化的重任。
其实我们愿意相信ADLA背后的技术是十分过硬的,如果它在产品层面有更多的思考,例如更注重与现有Hadoop大数据生态和SQL体系的融合,或是进一步加入和充实.NET生态(如提供C# LINQ Provider),也许会有不同的结果。如今ADLA渐行渐远的背影显得有几分落寞,但将来如果有可能,我们由衷期待它以另一种形式王者归来。
让我们回到本文的主题:面向云存储的交互式数据查询。综上所述,ADLA不失为一个可行的办法,但它也存在一些局限和问题,而且在中国区并未发布。那么在Azure上是否还有其他的选择呢?答案是肯定的。作为第二种方法,我们可以借助源自SQL Server体系的一项神奇技术。欲知详情如何,且听下回分解。
“云间拾遗”专注于从用户视角介绍云计算产品与技术,坚持以实操体验为核心输出内容,同时结合产品逻辑和应用场景的深度解读。欢迎扫描下方二维码关注“云间拾遗”公众号,或订阅本博客。
寻觅Azure上的Athena和BigQuery(一):落寞的ADLA的更多相关文章
- 寻觅Azure上的Athena和BigQuery (二):神奇的PolyBase
前情回顾 在“数据湖”概念与理论逐渐深入人心的今天,面向云存储的交互式查询这个需求场景显得愈发重要.这是因为原生的云存储(主要指S3这样的对象存储)既能够容纳大容量的明细数据,又能在性能和成本间取得一 ...
- Azure 上通过 SendGrid 发送邮件
SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递. 并且具有可扩充性和实时分析的能力.常见的用例有: 自动回复用户的邮件 定期发送信息给用 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(二)
前言 (二)建立虚拟网络环境,以及域控和DNS服务器 1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: ...
- 在Azure上的VM镜像库中找到想要的镜像
Azure上的虚机镜像库中, 有很多的镜像,其中当然也包括了用户自定义上传的镜像. 在Powershell中如果想使用这些镜像的话, 则需要知道其名称 下面这条命令,可以获得所有的镜像信息 $imag ...
- 在Azure上部署Windows Server Core
作为服务器操作系统,图形界面真心有些多余了,这也是很多人喜欢Linux服务器的原因之一.从Windows Server 2008开始,微软提供了Server Core版本,其实就是一个没有图形界面的服 ...
- 在 Azure 上使用 Docker运行 Mono
Docker 是最近相当热门的一个名词,它是一个基于 Linux Container 的轻量化的虚拟技术,而微软也相当积极与 Docker 合作,在 Azure 上支持这个火热的技术,并且提供简单的方 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(一)
(一)前言 本文主要介绍了实践部署AzurePack的Website Cloud的过程.在部署之前, 首先要对AzurePack有个基本的了解. Azure Pack是微软的私有云方案,具有弹性. ...
- 在Azure上实现Linux Server故障转移
要充分利用公有云的弹性扩展和高可用, 首先要在应用系统层面支持横向扩展(scale out),这个说起来很容易,或者说对新开发的应用系统而言已经成为标配.但是对已有的.老旧的应用系统来说,这就比较困难 ...
- Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
<Windows Azure Platform 系列文章目录> 2014年6月27日消息,在 Microsoft Azure 上提供 SAP Business Suite 软件.All-I ...
随机推荐
- sql Left right join 多表 注意表的连接顺序
多表左/右连接,表的连接顺序也可以影响查询速度 左连接时,应该把小表放在前面连接例子:A.B.C三表左连接情况1:A先和B连接,得到100条记录100条记录再和C左连接情况2:A先和C连接,得到50条 ...
- 九款免费轻量的 AutoCAD 的开源替代品推荐
随着各行各业的发展,CAD已经广泛应用于工业.服装.建筑以及电子产业等设计领域.AutoCAD 是一种流行的商业CAD软件,虽然很强大,但并不是免费的.因此本文推荐了几种免费重量轻的CAD工具/软件, ...
- Wpf发送接收 win32消息
#region WPF发送和接收win32消息 public const int WM_GETTEXT = 0x0D; public const int WM_SETTEXT = 0x0C; publ ...
- Go 的文件系统抽象 Afero
Afero 是一个文件系统框架,提供一个简单.统一和通用的 API 和任何文件系统进行交互,作为抽象层还提供了界面.类型和方法.Afero 的界面十分简洁,设计简单,舍弃了不必要的构造函数和初始化方法 ...
- ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...
- IDHTTP-HTTPS通讯方法(Indy10.2.3之前仅支持OpenSSL的0.9.8以前的版本)
加载https的站点页面内容的时候记得在窗体上加上“IdSSLIOHandlerSocketOpenSSL1” 以及idhttp里面IOHandler为“IdSSLIOHandlerSocketOpe ...
- Visual studio调试Web发生未能正常启动IIS express
今天调试web时,不知道怎么搞的,昨天还好好的,结果今天怎么也没法调试了.VS里报的错误是进程号为**的未能正常启动,看了下调试时IIS压根就没启动起来,没关系,看看事件管理器里发生了什么 找到个最关 ...
- LFTP 4.6.2 发布,命令行 FTP 工具。这个东东可以用来做插件
直击现场 这个东东可以用来做插件 LFTP 4.6.2 发布,新增特征如下: * new command "edit" instead of the edit alias.* n ...
- VMware 克隆linux后找不到eth0(学习hadoop,所以想快速搭建一个集群)
发生情况: 由于在学习hadoop,所以想快速搭建一个集群出来.所以直接在windows操作系统上用VMware安装了CentOS操作系统,配置好hadoop开发环境后,采用克隆功能,直接克 ...
- python机器学习系列之环境搭建
Windows系统下python2.7,numpy,matplotlib安装 1. python2.7从https://www.python.org/downloads/release/python ...