寻觅Azure上的Athena和BigQuery (二):神奇的PolyBase
前情回顾
在“数据湖”概念与理论逐渐深入人心的今天,面向云存储的交互式查询这个需求场景显得愈发重要。这是因为原生的云存储(主要指S3这样的对象存储)既能够容纳大容量的明细数据,又能在性能和成本间取得一个很好的平衡——如果它同时再支持复杂的即席分析查询,那么云原生存储就将成为数据湖的最佳载体,对于实现数据分析人员的自由探索和应用系统的查询集成都有着非常重要的意义。
因此,在上一篇文章中,我们围绕着这个重要需求场景如何在Azure进行实现详细地展开了我们的探索。首先作为参照,我们在AWS环境中利用S3和Athena成功地对一个csv文件进行了SQL查询。随后,我们主要使用Azure Data Lake Analytics (ADLA)配合Azure Data Lake Storage (ADLS)作存储来实现了同样的分析需求。值得注意的是,ADLA支持的查询语言是U-SQL,一种混合了C#与SQL语法的独特语言。
然而,也如前文所提到,ADLA还是存在一些固有局限,也并未在Azure中国区上线。故而我们有必要考虑和寻找Azure体系内的其他选择。今天的参赛选手,是源自SQL Server体系的PolyBase。
初识PolyBase
其实PolyBase这个称谓最早出现于SQL
Server 2012 Parallel Data
Warehouse(PDW)中,该版本本质上是一个软硬一体化的分布式MPP数据库。PolyBase组件赋予了在数据库层面定义指向Hadoop/HDFS数据的外部表的能力,是帮助打通MPP数据库与Hadoop大数据生态系统的重要桥梁。
而PolyBase真正变得成熟并且广为人知,是自SQL
Server 2016起,PolyBase技术正式地出现在了标准SQL Server中,毕竟PDW版本的受众不够广泛。此举大大提升了SQL
Server在大数据时代的综合竞争力,使得微软体系内的用户通过T-SQL即可轻松地访问和获取Hadoop集群中的数据。
那么,说了一大圈,源自SQL Server的PolyBase和Azure有什么关系,和我们今天的话题有什么关系呢?这就得说到在微软全面云化的战略之下,SQL Server其实也以多种不同形式迁移到了Azure云端,形成了若干款不同的云端数据服务产品(详情参见笔者介绍SQL Server 2017的文章)。而PolyBase自然也一起被带到了云端,并在支持访问HDFS的基础上还添加了访问云存储的能力,这样我们就可以通过PolyBase和大家熟悉的T-SQL语言来轻松实现面向云存储的交互式查询了。
(图片来源:微软PolyBase官方文档)
动手体验
让我们进入实践环节。首先我们需要寻找一个Azure上PolyBase技术的载体。SQL
Server的Azure变体中有SQL Database、SQL Managed Instance、SQL Data
Warehouse等相关产品,但支持通过PolyBase访问云存储的目前仅有SQL Data Warehouse(下简称SQL
DW)这一款。我们就选择它作为查询引擎。
首先我们准备一下实验所需的数据,我们同样沿用上篇文章中的包含信用卡借贷数据的csv文件,把它放置到存储账户的Blob中。我们确认一下它的位置是在cloudpickersa这个存储账户的sampledata容器中:
接下来让我们请出今天的主角,创建一个SQL DW数据库(本实验使用美国西区资源,但相关服务均已在Azure中国上线),使用最新的Gen2版本:
创建完成之后,就可以使用大家所熟悉的SQL Server Management Studio(SSMS)进行连接了,除了个别图标不同,其使用体验与传统SQL Server几乎完全一致。
与Athena类似,PolyBase同样是通过定义外部表的方式来对云存储中的数据和格式进行映射的。我们来看一下具体的步骤。
第一步,需要在刚才新建的数据库里建立一个credential用以实现与指定存储账号访问权限的对应:
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyPassw0rd';
CREATE DATABASE SCOPED CREDENTIAL CloudpickerCredential
WITH
IDENTITY = 'cloudpickersa'
, SECRET = 'j2PJqjIR1IfkDEESjWEIFzcgip...accesskeyismysupersecret...5VeqM2B+1bCWFosyvm4Kg=='
; --此处secret为存储账户设置中生成的access key
第二步,需要创建一个“数据源”用以指向存储账号下的具体容器,并指定数据源的类型。这里会用到第一步创建的credential:
CREATE EXTERNAL DATA SOURCE CloudpickerStorage_SampleData
WITH
( LOCATION = 'wasbs://sampledata@cloudpickersa.blob.core.windows.net/'
, CREDENTIAL = CloudpickerCredential
, TYPE = HADOOP
);
这里的参数"TYPE=HADOOP"其实耐人寻味,因为我们实际要连接的是Azure Blob Storage,而非HDFS。这隐含地说明PolyBase事实上是先支持Hadoop,后来才把Azure存储以一种HDFS兼容的方式加入了支持。LOCATION中使用的wasb协议也印证了这一点,因为wasb本来就用于让Azure Blob存储挂载和融入到Hadoop体系中。
第三步,则是先定义数据格式,然后终于可以创建外部表并指向具体的csv文件。这里会用到第二步创建的数据源:
CREATE EXTERNAL FILE FORMAT MyFileFormat_CSV
WITH (FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS(
FIELD_TERMINATOR = ',',
FIRST_ROW = 2,
USE_TYPE_DEFAULT = False)
); CREATE EXTERNAL TABLE credit_card_loans(
"year" INT,
periodicity VARCHAR(20),
"quarter" VARCHAR(20),
load_type VARCHAR(MAX),
loan_value DECIMAL(20,8)
)
WITH (
LOCATION='/credit_card_loans.csv',
DATA_SOURCE = CloudpickerStorage_SampleData,
FILE_FORMAT = MyFileFormat_CSV
)
;
这才算是大功告成。可以看到,在PolyBase中需要层层递进地创建凭据、数据源、外部表这些重要实体,这是与严谨的SQL Server/T-SQL抽象体系相对应的。
我们迫不及待地来尝试一下外部表访问csv的效果。先做一个简单的计数:
嗯,颇为顺畅。再来一个与前篇文章相同的查询,这次使用T-SQL来表达:
也很快地返回了正确的结果。关于PolyBase的查询性能,由于牵涉到的因素会比较多,需要专题探讨,在此不作重点讨论。就这里的例子而言,第一次的冷查询会相对较慢,之后对同一外部表的各种查询就比较快了,可以秒级返回。
至此,我们已完整地使用Azure SQL DW中的PolyBase能力实现了对Blob Storage的即席查询,实现了与前文例子中相同的效果。
小结
来自关系型数据库世界的PolyBase,赋能用户使用T-SQL直接访问查询Azure云存储中的数据文件,可谓神奇。这也许乍一听上去是“曲线救国”,但真正实操下来其实相当方便,圆满完成了面向云存储的交互式查询的既定任务。
在PolyBase的帮助下,开发者和数据分析师们可以通过熟悉的SSMS或Azure Data Studio等客户端工具随时连接和查询云上大数据了。如果再考虑到SQL Server体系中ADO.NET/JDBC/ODBC等方便而成熟的访问接口,PolyBase还不失为一个生产应用集成云上大数据的优美方式,既可用于数据搬运,也可直查数据湖。PolyBase对于调用方而言也较为友好,因为访问外部表和普通的内部数据表并无二致,间接实现了异构数据源的统一封装和访问。
在本系列文章中,ADLA和PolyBase都已分别登场,各自展现了不逊于Athena的特点和能力。但在Azure上还有第三个选项,同样具备很强的竞争力,我们留待下回分解。
“云间拾遗”专注于从用户视角介绍云计算产品与技术,坚持以实操体验为核心输出内容,同时结合产品逻辑对应用场景进行深度解读。欢迎扫描下方二维码关注“云间拾遗”微信公众号,或订阅本博客。
寻觅Azure上的Athena和BigQuery (二):神奇的PolyBase的更多相关文章
- 寻觅Azure上的Athena和BigQuery(一):落寞的ADLA
AWS Athena和Google BigQuery都是亚马逊和谷歌各自云上的优秀产品,有着相当高的用户口碑.它们都属于无服务器交互式查询类型的服务,能够直接对位于云存储中的数据进行访问和查询,免去了 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(二)
前言 (二)建立虚拟网络环境,以及域控和DNS服务器 1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: ...
- Dynamic CRM 2015学习笔记(1)Azure 上安装 CRM 2015
今天终于在Azure上安装成功了CRM 2015,下面简单介绍下安装过程,以及出现问题的解决: 一. 配置AD, 安装IIS 参考下面的link,里面有详细的配置步骤 http://www.c-sha ...
- 用Azure上Cognitive Service的Face API识别人脸
Azure在China已经发布了Cognitive Service,包括人脸识别.计算机视觉识别和情绪识别等服务. 本文将介绍如何用Face API识别本地或URL的人脸. 一 创建Cognitive ...
- Azure上批量创建OS Disk大于30G的Linux VM
Azure上VM的OS盘的大小在创建时是固定的.Windows是127G,Linux是30G.如果需要批量创建的VM的OS Disk有更大的容量.可以考虑用下面的方法实现. 1 创建一台有Data-d ...
- Azure上通过haproxy实现APP Gateway或WAF的http跳转https
Azure上的APP Gateway是七层负载均衡服务,WAF是APP Gateway服务的扩展.在实现七层负载均衡的同时,增加了WAF的功能,可以对后台的HTTP服务进行保护. Azure WAF采 ...
- 在Azure上通过Powershell创建多Interface的Cisco CSR路由器
前面通过Json的Template在Azure上创建了Cisco的CSR路由器.但那个Json的template只支持1块网卡.如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json ...
- 在Azure上搭建L2TP服务器
L2TP是常用的一种point-site的VPN.而目前在Azure上的VPN Gateway只支持IPsec和SSTP两种.如果客户需要L2TP服务器,需要自己在VM中搭建.本文将介绍如何在Azur ...
- NetScaler VPX在Azure上的部署(一)
本文将介绍NetScaler的VPX部署在Azure China上.包括如何通过vhd文件上传.创建虚拟机,以及如何部署VPX. 一.首先将VHD文件解压,放到目录D:\Azure中.VHD文件的获得 ...
随机推荐
- 【msdn wpf forum翻译】获取当前窗口焦点所在的元素
原文:[msdn wpf forum翻译]获取当前窗口焦点所在的元素 原文地址: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/6b ...
- WPF ScrollViewer(滚动条) 自定义样式表制作 图文并茂
原文:WPF ScrollViewer(滚动条) 自定义样式表制作 图文并茂 先上效果图 正常样式 拖动时样式 好下面 开始吧 ==================================== ...
- Windows程序设计画图实现哆啦A梦
在看雪论坛上看到的一个帖子,很喜欢,转载一下.原文地址:http://bbs.pediy.com/showthread.php?t=138630哆啦A梦是画出来的,不知道作者算这些坐标位置算了多久,真 ...
- Medical Image Report论文合辑
Learning to Read Chest X-Rays:Recurrent Neural Cascade Model for Automated Image Annotation (CVPR 20 ...
- UWP-标题栏”后退“按钮
原文:UWP-标题栏"后退"按钮 标题栏”后退“按钮,系统级导航 应用必须启用所有硬件和软件系统后退按钮的后退导航.执行此操作的方法是注册 BackRequested 事件的侦听器 ...
- PRML Chapter3
曲线拟合的几种方法 最大似然估计MLE,最大后验概率MAP:MLE和MAP MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即"模型已定, ...
- 记一次 qW3xT.4,解决挖矿病毒。
最近感觉我的服务器特别卡,打开数据库都半天,刚开始以为网咯不好也没太在意. 利用top命令: 这时候问题出来了,最高cpu占用100%,那我用啥??? 根据进程id 一看究竟,ps -ef|grep ...
- vue-cli脚手架 ,过滤器,生命周期钩子函数
一.安装vue-cli脚手架 1.淘宝镜像下载 用淘宝的国内服务器来向国外的服务器请求,我们向淘宝请求,而不是由我们直接向国外的服务器请求,会大大提升请求速度,使用时,将所有的npm命令换成cnpm即 ...
- kafka笔记6
我们讨论可靠性时,一般使用保证这个词,它是确保系统在各种不同的环境下能够发生一致的行为.Kafka可以在哪些方面作出保证呢? 1.Kafka可以保证分区消息的顺序 2.只有消息被写入分区的所有同步副本 ...
- python的实用函数
>>> file=open('txt.txt','a') >>> print >> file,'hello,world' >>> fi ...