开发者学堂课程【一站式大数据开发治理平台 DataWorks 初级课程:DataWorks 数据服务介绍及实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/763/detail/13362
DataWorks 数据服务介绍及实践
基本内容
一、基本介绍
二、产品优势
三、功能解析
四、实操演示
一、基本内容
DataWorks 数据服务的相关介绍和实操的演示
本节课程将主要围绕四个部分展开,分别是基本介绍、产品优势、功能解析和实操的演示。
那么首先将进入第一个环节,一起来看一下数据服务是一款怎样的产品?又在大数据研发的链路中起到了什么样的作用?
首先 DataWorks 作为一站式智能云研发平台,构建了从数据集成、数据开发、据服务到应用开发的一个全链路解决方案。
从上图中可以看到从左至右数据服务在整个的链路中将数仓数据库和数据应用之间串联了起来并且形成了一座桥梁,数据服务通过将数据封装成数据 API 的方式,可以为个人、团队及企业提供全面的数据开放及共享能力。
借助这个平台,用户能够统一管理预算内外部的 API 服务,数据服务为大家提供了向下对接数据员,向上支撑业务应用的一个有效的链接。
接下来一起看一下数据服务的整体架构,首先在这张大图中可以看到左侧上方有数据服务前台和 OpenAPI ,用户可以通过数据服务的产品界面或者 OpenAPI 的方式来快速创建 API 。
那么基于前台和 OpenAPI ,下方是 API 开发平台来作为整个的底座,数据服务在这个开发平台上以API为核心提供了组织管理、API开发、资源开发、数据源管理、还有权限管理等等。
比如说在这个组织管理中,可以创建业务流程,通过业务流程管理将业务流程作为您的逻辑单元来存放 API 等的资源对象。在业务流程的内部,又可以进行进一步的细分,通过文件夹的方式实现多层级的一个管理结构,然后再往右侧来看,在 API 开发的能力中,除了多样化的开发方式,比如向导模式、脚本模式等。
数据服务还同样提供了缺口调试和一键发布的能力,实现了一个 API 产出工作的轻量化。还有一些其他的能力,比如说权限管理、计量、统计等等。这些部分一会将会在共同解析中继续详细展开。
再往这张大图的右侧来看,可以看到数据服务和 API 网关产品是紧密结合的。在数据服务中发布的 API 可以在网关列表中进行查看和管理,当用户册发送请求至网关后,网关会进一步请求数据服务的系统来作为一个后端服务,数据服务会进行请求的解析,然后最终从数据中获取有效的数据来返回给用户。
在上述的这个过程中,用户从发送请求到返回数据结果的整个过程中,其实它下方系统内部的处理过程都是用户无感知的,只需要关注数据本身,会封装并提供一系列的底层的服务。
刚才的架构大图展示的数据服务的各项能力,处理逻辑和基础依赖等内容。
那么当前页面上的这一张图就从开发到使用 API 的过程中展示着一个流程,从图中可以看到从左至右在 API 的平台上,在数据服务的平台上创建一个新的 API 的方式有两种。
如果手中有数据,那么就可以连通数据源来生成 API ,如果手中有现成的 API ,那么就可以将已有 API 的的地址直接注册到平台上。除此之外,还可以通过函数计算来辅助 API 的生成,还可以将多个 API 和函数编排为一个工作流程来生成一个符合的 API 。
无论生成注册的这种单个的 API 还是服务编排类型复合的 API ,数据服务都可以将这些 API 一键发布至网关,然后后续就可以在数据应用、报表和大屏中进行调用,再或者是商家的阿里云的市场进行销售,或者是授权给他人进行系列的数据共享。
数据服务支持的应用场景是非常丰富的,可以满足各种需求,那么这样一款产品具有什么样的优势呢?第二个环节一起来看一下数据服务的产品优势。
二、产品优势
首先将传统方式开发 API 和数据服务开发 API 进行一个PK,在传统的方式中开发一个 API 接口所需要的步骤是很复杂且漫长的。
从准备和连接数据库到开发 API 的逻辑,再到开发 API 的健全和流控搭建server、部署接口,并进行一系列的后期的运维工作。相比较之下在数据服务中开发 API 就是一个非常优雅的步骤,可以被简化为两个步骤,首先进行数据库的相关准备工作,然后配置 API 的查询逻辑即可。
后续的部署、管控、运维等工作都无需自行研发,整体的数据服务的是 server 的一种的架构,只需要把关注点放在 API 的查询逻辑上即可。
因此数据服务整体是可以说是零代码、零运维、弹性扩展的极大节约了开发 API 的成本。
接下来要介绍的是数据服务中丰富的数据源和网络类型,正如上一页中提到的,要创建一个 API 并从中拉取到数据,数据源和网络的支持度就是必不可少的。
DataWorks 数据服务支持在多种网络环境下联通多种数据类型,支持的网络环境包括像VPC经典,还有功能网络,支持的数据类型包括常见的关系型数据库和非关系型数据库,例如 MySQL、OTS、MongoDB 等等。
同样也支持大数据存储,比如 Hologres、Lightning。并且数据源类型还在持续的丰富当中,所以说数据服务为大家提供的产品优势是支持多种的数据源,支持多网络,并且即连即查即开发。经过前面两个部分的整体了解,接下来一起来详细的看一下主要功能的解析成功率。
三、功能解析
在开始数据服务的之前,首先需要准备的是要开通 API 的网关服务,以确保 API 能够成功发布上线,那么经过前期准备之后进入数据服务,可以首先创建一个业务流程来作为组织单元并在该业务流程下继续创建目标 API 。
在这个图中可以看到无论是哪种方式生成的 API 还是注册的 API 还是符合的API的服务编排,都可以调试后发布至网关,然后并且进行后续的授权和调用,途中展示的就是在数据服务平台中非常常用的一个主要的使用流程。
接下来展开讲解一下主要使用流程当中的各功能的用法,首先是第一个大功能生成 API 的能力,支持两种方式分别是向导模式和脚本模式,如果分析师或者业务人员可以采用向导模式,就像展示的上方的这种模式。通过可视化拉取表结构的方式可以进行请求参数和返回参数的勾选,来实现 API 整体的逻辑的定义。在图中也可以看到通过向导模式能够快速实现 API 的单表查询,不但支持请求参数的多种操作符类型,比如说有等值查询、模糊匹配等等。也支持将返回结果按照某些字段进行排序,例如在这个图中,可以将某一个字段添加到字段排序的列表,那么 API 的返回结果就会根据该字段进行一个返回结果的排序。
那么使用向导模式好处也是非常明显的,不需要写代码,十分钟会学习会了。
接下来再看下面的一种脚本模式,如果开发者和 circle 的深度爱好者,可以通过脚本模式来制定一次脚本,编辑一些更加复杂的查询逻辑。
在脚本模式当中能够支持多表之间的一个关联分析,并且在SQ中也能够编辑聚合函数计算和复杂的一些条件查询等等。未来也在计划将标签的语法进行上线,在未来中支持的 circle 逻辑会更加的灵活和强大。
那么除了生成 API 之外,之前还提到的一种创建 API 的方式是直接注册,这也是要讲解的第二个大功能注册 API ,将手中已有的 API 注册到数据服务的平台上,便于统一的管理发布和对接,可以看到注册 API 支持常见的四种请求方式,然后也支持三种常见的数据格式。
然后接下来是数据服务的第三个大功能,除了 API 之外还提供了另一项资源的开发能力,就是 Python 函数,用户可以编写 Python 脚本绑定至某个 API ,作为 API 的前置或者是后置过滤器,然后分别对 API 的请求参数和返回参数进行加工处理,这样就可以增强 API 的逻辑表达能力,用来适配各类场景,也达到了一种数据变形和转换的效果。
这一页展示的是服务编排的能力,是讲解的第四个大功能,提到了 API 又提到了函数,那么多个 API 和函数之间有没有可能发生一些化学反应来达成一些新能力呢?答案是当然可以。
这就引出了服务编排功能,将若干 API 和函数采用拖拽式节点的可视化方式编排成一个工作流。
通过这种零代码的方式实现 API 之间的串并行调用,比如在这个右侧的示意图中,将 API 函数和 switch 条件分支节点组合在一起,封装成一个新的整体 API 的来提供给业务方。通过这样的方式不但能够减少网络开销,还能够提升整体的调用性能。可以一起来看一下右上角的例子,将若干的 API 融合在一起,上游的 API 的输出作为下游的输入,并且根据不同场景进行了分支条件判断,然后最终获得了一个输出。
整个的一个服务编排的样例的逻辑,那么 API 成功发布之后,数据服务还会自动生成详尽的 API 文档,这就是 API 详情页的一个能力,这个详情页可以共定着查看,并且自动生成的这个文档会免除手工编写文档的烦恼和繁琐,在 API 详情页中包含的基本信息有 API 的基本信息还有请求和返回参数,还有正常和异常返回示例以及错误码等等,就可以对 API 进行一个全方位的了解。
那除了刚才介绍的开发相关的能力,数据服务还有一个目标就是对团队内外部提供数据共享的能力,直接把数据库数据表权限大范围的发放出去,不仅数据的冗余度很高,并且也会影响数据的安全性那么如何应对这种场景?
数据服务提供的一种 API 授权的能力,将生成和注册的 API ,除了可以自己调用之外,还可以授权给他人进行调用,通过选择和授权,在操作栏里选择授权,然后在授权的弹出窗口中进一步选择云的 ID ,还有选择目标和工作空间,再设置一个权限的长期或者短期,这样就可以轻松实践数据少而精的开放共享。
在 API 调用权限的方面,数据服务提供了简单身份认证和加密签名身份认证两种方式,可以根据不同的场景,进行灵活的选择。
首先来看一下简单身份认证,它是通过 APP code 来进行健全的,比如说在刚才提到的详情页中会有一个带参数调用地址,类似于这个信息。然后在这个带参数调用地址中就会带上这个 APP code 的信息。
另外一种就是加密签名身份认证,它通过 AppKey 和 AppSecret 这种加密算法签名的这种方式来进行健全的,这种方式会具备更高的安全性,并且同时这两种 API 调用健全的信息都可以在数据服务的服务管理 API 调用的详细信息中进行查看。除了刚才的调用健全数据服务,还提供了计量统计的能力,支持对已经发布的 API 进行一个月度的调用计量的统计,包括有总揽数据,比如说在当前的工作空间下,所有 API 的累计量总次数,还有累计执行的总时长。当然还有细化的数据,比如单个的内存、调用次数、执行时间和平均量市场等等。
除此之外,还可以进入 API 的网关控制台,查看 API 的其他监控信息,比如说请求参数、流量、后端服务、响应时间、错误分布等等。或者也可以跟 XS 日志服务进行结合,然后来实现更详细的打印监控日志的一个能力。除了 API 的计量统计信息,数据服务在网关发布的 API 还能够配置相应的流控策略,访问控制和报警的规则,这样一来就对业务线上调用 API 提供了一个有效的护航。以上就是数据服务的一些大功能点的解析。功能解析先介绍到这里,接下来让走进产品中来进行一波实操演练,这次带来的实操环节是数据服务加 Hologres 两种产品的一种组合。
四、实操演示
首先先介绍一下实操的一个背景,如果是之前有使用过数据服务的用户,可能会知道之前如果要想连通 odps 引擎数据表,是需要借助数据 lightning 来完成的,但是目前在公共云上新建 lightning 的入口已经进行了隐藏,因为提供了一种更高性价比的升级版的一种服务,那就是交互式分析。
Hologres不仅包含了之前 lightning 的能力,并且还提供了一些额外的优势,比如说在 Hologres 中,用户资源是相互独立的,互不干扰的,这样子一来就能够使得查询性能大幅度的得到提升,然后与 odps 资源进行无缝的打通,这种性能大幅提升的场景非常适合数据服务这种 API 在线调用的场景,那接下来就直接进入产品界面,进行一些实际的操作。
当前的这个页面展示了一种常见的大数据开发场景,它的链路从左至右分别是数据汇聚、数据开发、任务运维、质量效应和数据共享,那么这条链路分别就对应下面的五个产品模块。
数据研发的链路中,经过了一系列的操作后,可能会在对 DataStudio 数据开发中产出一系列的 odp 结果表,那么在今天的十套任务中,需要完成的任务就是如何在 DataWorks 的数据服务当中拉取到数据开发后产出表结构及表数据,然后抽取部分数据字段和记录包装成数据 API 给到料物方进行使用,这里需要注意的一点是目前数据服务暂不支持直接连通 maxcomputer odps 数据源,所以就需要通过 hologres 间接连通并加速查询 maxcomputer 类型的数据源。
因此今天通过 hologres 类型的引擎来连通ODPS表并创建 API 的过程,可以分为四个步骤来进行,分别是环境准备,然后创建并产出一张ODPS表,再然后创建的 hologres 外部表,最后通过数据服务来创建 API 。今天的重点也会放在如何快速创建 API 的环节,前三个步骤会快速展示一遍本次实操中涉及到的产品组合是 DataWorks 加maxcomputer 加 hologres 。
那么首先第一个大步骤就是环境准备,前期的环境准备工作包括购买 hologres 实力,然后创建 hologres 的数据库,然后创建 DataWorks 工作空间,并绑定相关的引擎,这些工作已经提前准备好,在这边给大家做一个展示,可以首先进入 Polo 的控制台,可以看到运行中的一个实力的详情,然后点击这个实例的名称,还可以看到创建的数据库,接下来再进入 DataWorks 的控制台,点击工作空间列表之后,就可以看到已经创建好的工作空间的一个列表和相关的名称和相关的详细信息,通过上方的搜索栏可以筛选目标的工作空间的名称,在这里这一个工作空间的就是提前创建好的,可以通过点击这个工作空间右侧的修改服务配置或者是通过工作空间的小扳手功能,其实可以看到这个工作空间下已经绑定的引擎的类型是包括 maxcomputer 和 holo 的,那么接下来的第二个步骤就是创建并产出 ODPS 表,需要点击工作空间右侧的进入数据开发,进入 data studio, 并在 data studio 当中来开发一张表,可以看到当前进入工作空间之后,已经创建好了一个表的结构,是一张销售数据表,包含了三个普通的字段和一个分区的字段,然后通过这种可视化的方式创建好表结构之后就可以通过编写SQL的任务,往表中写数据了。
但是这个任务同样也提前写好,就被放在这个业务流程的下面,这一个节点可以看到这个业务流程只包含一个虚拟的起始节点和一个 odd PS circle 类型的节点,当然可以编排更加复杂的流程来执行各种任务。
双击这个 odd PS circle 类型的节点可以进入这个节点的配置界面。这里有三条语句,然后分别往三个销售日期的分区中写入了记录,编写好任务之后,然后再配置一下调度配置等等,就可以提交并发布到生产环境了。该任务会根据设置好的调度时间和周期来运行实例并产出 ODPS 生产表的数据。那么这样一来 ODPS 表也准备好了,第三个步骤就创建一张 hologres 对 ODPS 的外部表来拉取并同步刚才这一张 ODPS 表的结构,两个表之间会通过 holo建立起一种应酬的关系,然后续 holo也会将这种映射关系进一步提供给数据服务来开发 API 。
那么为了创建 holo的外部表,可以点击 data studio 当前这个页面的左上角的导航栏,在全部产品中,可以找到holo studio 并点击进入,可以看到在这个 holo studio 已经展示出了之前创建好的一个数据库的名称,可以通过点击这里的新建按钮,然后新建一个外部表。
holo外部表也是之前提前配置好的,可以看到在这个表当中,首先为外表定义了一个表的名称,然后选择 ODPS 的引擎,再选择要对哪个 ODPS 表创建映射,接下来就可以自动展示出刚才那张表的结构了,包括普通的字段还有分区的字段,这个时候可以点击提交表,这个步骤之前也都做过了,可以直接来看一下数据预览,可以看到是刚才在 ODPS 生产表的一个数据。
那么最后一个环节也是非常重点的一个环节,就是进入数据服务来创建 API ,同样依然是点击左上角的一个导航栏,在全部产品中找到数据服务并点击进入。
那么进入数据服务之后,首先可以看到这里有一个业务流程的 list ,然后首先需要一个业务流程来存放本次实操的 API ,通过业务流程可以将 API 成组的管理起来,然后让整个的左侧的一个目录数显得更加的清晰条理,也便于 API 的一个归类和查找。
这里可以介绍几种场景,比如说在团队中a同学创建的业务流程可以存放在自己名下,可以用来存放自己名下的一个 API ,然后b同学创建了另一个业务流程来存放b同学自己的好的 API ,然后再比如说另一个场景,有一些公司搞一些季度性的活动的时候,比如说第一季度用到的 API 归类在某一个业务流程下,然后第二季度的活动的 API 去分开来放在另一个 API 下面。
那回归一下正题,来新建一个业务流程,比如为他取一个名字然后选择一个 API 的分组,然后还可以在这个地方对业务流程进行一些相关的描述,这里简单介绍一下 API 分组的概念,它是一网关管理 API 的单元,分组会自动分配,会自动跟二级域名进行绑定,然后二级域名的调用限制是1000次每日,您可以通过绑定独立的域名来解除这种调用限制,在这里已经有一些分组的下拉列表了,然后那么如果需要新建分组,可以直接跳转到 API 网关进行创建,点击确认来创建一个新的业务流程,可以看到在这个地方已经创建好了。
那么业务流程也完成了,现在可以对这个新建的业务流程名称进行右键,来新建一个 API 或者也可以直接点击上方这个目录树上方的这个位置来新建 API ,那么本次实操会以生成 API 为例,那就在这个地方选择生成 API 会出现一个弹窗,首先需要选择 API 生成的模式是向导还是脚本,然后先展示一个可视化的这个向导的模式,填写 API 的名称,接着填写 API 的路径,然后还可以为API打一些标签,比如说可以选择一些已有的标签或者输入一些自己新建的标签,把这个标签重新添加一个,然后还可以对 API 进行一些相关的描述,就说这里写一个数据服务最佳实践,然后检查一下目标的面颊,存放在了这个业务流程下边,然后把这些信息都填好了之后,就可以点击确认。接下来需要对这个 API 进行一个数据表的相关配置,那么首先是做的就是选择数据类型为 holo ,然后接下来选择一个数据源的名称,这个也是提前在数据源集成的数据源里面建好的,所以直接选择即可。
如果需要新建一个数据源可以直接点击这里,来跳转到数据集成进行新建,然后接下来需要选择一个数据表的名称,这个时候就直接选择刚才的 Polo 连通 ODPS 那张外部表,这个表就可以了。
其实可以看到下方已经自动拉取到了表结构,可以进一步勾选 API 的请求参数和返回参数,然后看看有哪些可以设置的,比如说在此处设置的是这个为请求参数,然后将这个上面名称还有顾客的ID和销售额作为返回参,那么这个 API 实现就是通过查某个日期来返回相关的销售情况的这么一种效果,其实到这个时候 API 的初始的配置已经算结束了,可以保存一下。
点击一下测试然后输入一个销售年份,比如说刚才表中一个数据是2013,然后点击开始测试,看一下返回的效果,在这个地方是返回了正确的结果的。
那么如果希望配置一些更复杂的这种逻辑的场景,也可以一起来看一下,比如说第一种场景,希望让返回的数据结果按照某个字段的值进行排序,比如说按照的销售额 total price ,那就可以把销售额的这个字段一键添加到字段排序的列表当中,在下方已经出现了,可以再通过选择升序还是降序的排序方式,进行一个数据的返回,比如说在这个地方选择了降雪然后可以看到已经配置好了,然后如果是将多个字段添加到了这个排序段的列表当中,还可以通过这种上下移动的操作来进行排列这个排序段的优先级,然后另一种场景,再比如说我期望调用的时候,请求参数一次性传入的值有多个,刚才其实请求参数只输入了一个2013的这个数据的值,如果想一次性传入多个值,就可以打开请求参数的面板,然后选择这个操作符的类型为硬类型,然后大家其实还可以看到现在支持的操作符类型也是非常多样化的,然后还可以在默认值的这个地方写入多个值,比如有2013、2014、2015。
然后通过这种英文逗号进行分割,然后这里需要说的一点是请求参数和返回参数面板中的各项信息填写的越完整肯定是越好的,这样对 API 调用者而言就会更加友好,那刚才这两个地方也填完了,可以再次保存一下再进行一个测试,看看返回结果是否跟刚才第一次测有所不同,这个时候可以看到下方的这个返回内容,再返回结果当中这个数据记录是按照销售额多少来降序排列的,并且也返回了包含了三个年份的这么一个三条的数据。
那么除了刚才介绍的向导模式生成 API 之外,还有一种脚本模式,在向导模式的界面上还有一个一键转脚本的一个能力,点击然后再点击确定之后,就可以看到在这个编写查询SQ的地方,数据服务会把你刚才在向导数据模式配置的逻辑全部转换为一句完整的 SQ ,在这里面就可以继续编写更加复杂的查询逻辑。
刚才API 两次测试都已经返回正确结果了,然后可以直接点击一下这个右上角的发布按钮,进行一个API 的发布,然后可以看到发布成功,然后可以切换页面,在页面上方切换页面至服务管理,就可以看到在这个已发布的 API 的列表当中已经出现了刚才发布的这个 API 的名称,并且还可以对这个上线的 API 进行一些后续的操作,比如说下线、授权等等。
当然还可以对这个列表中的这个这么多的 API 进行一些搜索过滤来定位目标 API ,还可以直接点击这个API 名称,进入API 的详情页,查看自动生成的一个 API 的文档,包括一些调用地址、基本信息、接口信息、请求返回参数等等。
然后这些信息都是非常全面的描述了的各项内容。那么针对多次发布的 API 是否有办法进行回溯和追踪历史的版本呢?
当然是可以的,数据服务同样提供了这样的能力,接下来一起来看一下,还是回到服务开发的这个界面,回到这个 API 编辑的界面,右侧的边栏有一个功能叫做版本,可以查看当前的一个 API 版本的信息,然后 API 每经过一次发布就会生成一个新的版本记录,可以看到当前在这个版本的列表中已经有一条新的记录了,然后可以查看详情或者是如果说版本数有很多,可以在这里选择一个回滚,然后来进行历史版本的一个回滚的操作。
那么经过刚才的一系列步骤,其实已经成功创建了通过 holo连通 maxcomputer 的数据的一个数据 API 了,并且也成功的发布上线了。
后续这个 API 就可以被提供给各业务方和团队在报表和应用当中进行调用了。