前情回顾
在“数据湖”概念与理论逐渐深入人心的今天,面向云存储的交互式查询这个需求场景显得愈发重要。这是因为原生的云存储(主要指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用以实现与指定存储账号访问权限的对应: