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的更多相关文章

  1. 寻觅Azure上的Athena和BigQuery (二):神奇的PolyBase

    前情回顾 在“数据湖”概念与理论逐渐深入人心的今天,面向云存储的交互式查询这个需求场景显得愈发重要.这是因为原生的云存储(主要指S3这样的对象存储)既能够容纳大容量的明细数据,又能在性能和成本间取得一 ...

  2. Azure 上通过 SendGrid 发送邮件

    SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递. 并且具有可扩充性和实时分析的能力.常见的用例有: 自动回复用户的邮件 定期发送信息给用 ...

  3. 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(二)

    前言 (二)建立虚拟网络环境,以及域控和DNS服务器   1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: ...

  4. 在Azure上的VM镜像库中找到想要的镜像

    Azure上的虚机镜像库中, 有很多的镜像,其中当然也包括了用户自定义上传的镜像. 在Powershell中如果想使用这些镜像的话, 则需要知道其名称 下面这条命令,可以获得所有的镜像信息 $imag ...

  5. 在Azure上部署Windows Server Core

    作为服务器操作系统,图形界面真心有些多余了,这也是很多人喜欢Linux服务器的原因之一.从Windows Server 2008开始,微软提供了Server Core版本,其实就是一个没有图形界面的服 ...

  6. 在 Azure 上使用 Docker运行 Mono

    Docker 是最近相当热门的一个名词,它是一个基于 Linux Container 的轻量化的虚拟技术,而微软也相当积极与 Docker 合作,在 Azure 上支持这个火热的技术,并且提供简单的方 ...

  7. 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(一)

    (一)前言 本文主要介绍了实践部署AzurePack的Website Cloud的过程.在部署之前, 首先要对AzurePack有个基本的了解.   Azure Pack是微软的私有云方案,具有弹性. ...

  8. 在Azure上实现Linux Server故障转移

    要充分利用公有云的弹性扩展和高可用, 首先要在应用系统层面支持横向扩展(scale out),这个说起来很容易,或者说对新开发的应用系统而言已经成为标配.但是对已有的.老旧的应用系统来说,这就比较困难 ...

  9. Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序

    <Windows Azure Platform 系列文章目录> 2014年6月27日消息,在 Microsoft Azure 上提供 SAP Business Suite 软件.All-I ...

随机推荐

  1. Bootstrap按钮组 按钮工具栏 嵌套

    @{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport&q ...

  2. 【Unity】贝塞尔曲线关于点、长度、切线计算在 Unity中的C#实现

    原文:[Unity]贝塞尔曲线关于点.长度.切线计算在 Unity中的C#实现 写在前面 最近给项目做了个路径编辑,基本思路是满足几个基本需求: [额外说明]其实本篇和这个没关系,可以跳过" ...

  3. TestDisk 数据恢复 重建分区表恢复文件-恢复diskpart clean

    source:http://www.cgsecurity.org/wiki/TestDisk_CN TestDisk 是一款开源软件,受GNU General Public License (GPL ...

  4. byte[] 左移和右移

    public static class ex { public static byte[] RightShift(this byte[] ba, int n) { ) { return ba.Left ...

  5. LOCK_TIMEOUT

    SET LOCK_TIMEOUT 1000 begin tran TranNameA select * from tablenameA WITH (updlock) where... waitfor  ...

  6. vs2017 cordova调试ios app

    https://docs.microsoft.com/en-us/visualstudio/cross-platform/tools-for-cordova/first-steps/ios-guide ...

  7. 指定Qt程序运行的style,比如fusion(以前没见过QStyleFactory)

    转载请注明文章:指定Qt程序运行的style,比如fusion 出处:多客博图 代码很简单,如下: #include <QtWidgets/QApplication>   #include ...

  8. Win10《芒果TV》商店版更新v3.2.5:新增会员频道,修复多处细节问题,小年快乐

    听因乐不凡,尽在芒果TV,湖南卫视大型音乐竞技节目<歌手>,每周六晚22:30在芒果TV与湖南卫视同步直播,1月20日周五晚七点半,2016-2017湖南卫视<小年夜春晚>会员 ...

  9. C#图片旋转

    这里以Bitmap为例说明问题. 可以看到,旋转方法需要传入一个参数,而这个参数是一个枚举类型,RotateFlipType. 系统提供了两大类型的旋转, 1.旋转后不翻转. 2.旋转后接着翻转.翻转 ...

  10. fprintf函数将格式打印到文件,非常好用(怎么没早点发现这个函数)

    /* fprintf example */ #include <stdio.h> int main () { FILE * pFile; int n; ]; pFile = fopen ( ...