表管理
从数据管理
-表管理
进入表数据管理模块,Pingo的表管理系统对结构化数据、半结构化的元数据信息统一集成。如图所示,这里可进行结构化元数据的管理,包括表、数据库、命名空间的增、删、改、查。
命名空间
从图中的树形控件中看到,带文件夹图标的namespace
节点就是命名空间。主要用于多数据源的分类管理和方便的权限管理。命名空间下可以包括命名空间,并且没有层级的限制,但是数据库下不能有命名空间。
点击图中的新建
-命名空间
按钮,可以新建一个根节点的命名空间。
鼠标在树形控件的命名空间上时,点击新建
可以在对应的命名空间下新建子命名空间。
在Pingo中有一个特殊的命名空间trash
。类似于文件系统中的回收站
,是一个表的回收站
。此命名空间下,不可手动创建命名空间,数据库或者表。其他命名空间下的表被删除时,会首先被移动到回收站
命名空间下的,以执行此次删除操作的用户的用户名命名的数据库中。如果发现因为误操作删除了表,可以将此表从回收站
中移动回原有位置。如果确认表不再使用,则可以在回收站
中再次执行删除该表操作,表会被彻底删除。
数据库
Pingo中的数据库和传统关系型数仓中的数据库一样,都是一组表、视图等的容器。其操作方式和命名空间类似,唯一的区别是数据库下不能新建子数据库和命名空间。
表
Pingo中的表是典型的大数据系统中的表,是基于hive元数据系统定制化设计的元数据表,下面进行详细的介绍。
表类型
Pingo中的表分为四大类型:物理表、映射表、临时表以及视图。
- 物理表是指表中数据由Pingo管理的表。物理表的数据存储于Pingo的文件系统中,存储的路径由Pingo进行管理。当表被删除时,数据也会被一同删除。
- 映射表是指由Pingo管理元数据,但是不管理数据的表。映射表的数据既可以类似于物理表,存储于Pingo的文件系统中,也可以存储于外部存储中,还可以是Kafka、Doris,ES等外部系统。
- 临时表类似于映射表。不同之处在于,临时表的元数据只存在于当前查询的会话中,当会话结束,临时表也随之消失。
- 视图是指一种逻辑表。它固化从不同角度审视数据的方式。视图本质是一个查询语句。在Pingo中,常使用视图提供表的列权限控制,数据脱敏等功能。
结构以及分片
表的结构方面和传统的关系型数据库的结构没有太大区别。我们支持的数据类型有:boolean, tinyint, smallint, int, bigint, float, double, string, char, date, timestamp, decimal, binary, array, map, struct。 分片是大数据仓库中为了处理海量数据引入的新概念。常用的分片方法为基于时间的分片,比如每天产生一个分片,这样可以快速只查询某一天或者最近几天的数据。这样建表时将一个名为day的string类型的字段指定为分片,以后每天产生的数据,不管数据量有多少,其day字段都是相同的。 分片数据页面用来展示当前都有哪些分片的数据已经生成了。
时间切片
如上所述,最常用的分片方法为基于时间的分片,或者时间分片和其他分片方式共存。比如某电商网站的交易数据表trade_table,基于day、hour、province三个维度进行分片,比如day字段可以取值为"20180415"、"20180416"、"20180417"等,hour字段可以取值为"00"、"01"……"23",而province字段可以取值为"北京"、"天津"、"河南"等,显然同一个hour分片中的数据必然属于同一个day分片。
那么可以基于小时对trade_table表进行切片。这样做的好处是每过一个小时,当这一小时的数据全部"就绪"后,就可以对这一小时的交易量进行统计、挖掘或者数据抽取。在这个例子中,一个时间切片的数据全部"就绪"的状态系统是无法自动判断的,需要在该时间切片的数据分片全部生成之后,调用http接口【todo】来通知pingo系统。如果分片字段全部是基于时间的字段,比如将这个例子中的province分片去掉,那么某小时的分片生成之后,系统就可以自动判断该时间切片的数据全部"就绪"了。 时间切片页面用来展示当前的切片数据到达状态。
权限
在元数据中,命名空间、数据库、表都可作为权限实体进行授权,如上图所示,可以对具体的用户或者用户组进行授权,也可以开放所有权限,或者继承父级权限。
新建表
在Pingo中建表可以通过Web页面操作,也可以通过SQL提交。
Web页面建表
可以在下图中所示的数据库页面中的新建数据表
按钮新建表。
新建表的字段填写比较容易理解,首先选择表的类型并填写表的名字,文件格式根据实际选择,text文件需要指定列分隔符:
点击下一步,填写表字段及描述:
表的字段名填写完成之后,需要点击保存,然后添加下一个字段。所有字段需要全部保存才是真的添加完成。
创建分片是新建表的第二部分内容,如果不需要设置partition,可以直接点击下一步;一般情况下我们都会设置分片字段,实现对数据的分片管理且便于查询。可以根据数据管理的需求设置分片字段,例如按照天和小时对数据分片:
从上图可以看到,当添加完分片字段之后,会出现时间切片设置
按钮。关于时间切片的概念可以参考上文中[时间切片](<PINGO_DOC_BASE>/操作指南/表管理#表)的详细描述。打开时间切片设置开关时,如下图所示,会出现切片周期
和周期映射格式
选项。当切片字段到小时级别,可以选择切片周期
为1-24小时
。类似时间切片中的例子,hour字段的周期映射就是"时",映射格式为'hh',day字段的周期映射为"天",映射格式为'yyyyMMdd'。当然也可以将day和hour合并成一个字段day_hour,该字段的周期映射就要同时选中"天"和"时",映射格式为'yyyyMMddhh'。
这样做的好处是,如果分片字段全部可以映射到时间周期,就可以实现时间切片中所说的系统自动判断时间切片的数据"就绪"状态了。现在系统全部支持的映射格式参考:Java SimpleDateFormat。
此外,设置切片周期之后还可以设置自动删除过期数据。如果设置“保留最近3天数据”意味着,即使近期没有数据,系统中也会存储与当前日期最接近的3天的数据。
填写完成之后,点击提交,创建表完成。
表数据创建完成之后,在元数据的树形结构处可以看到自己创建的表,且具备全部的管理权限,可以对表进行赋权操作,授予其他人使用。
SQL语句建表
除了通过页面分步填写建表信息,还可以通过SQL语句快速建表。用SQL语句建表有两种方式,一种是在表管理
建表过程的第二步选择从SQL建表
,另一种是在交互分析
的Notebook
页面中写SQL语句建表,此处主要介绍前一种,后一种的建表方式将在交互分析
中介绍。
在表管理
中用SQL建表的流程和Web建表是一样的,先点击新建数据表
,建表的第一步和之前一样填写表名和数据文件的分隔符。
点击下一步
进行建表的第二步,这一步不直接添加字段,而是点击左上角的从SQL建表
。
弹出SQL编辑框,在其中填写SQL语句。注意此处填写的表名会被上一步的表名覆盖,因此在上一步需要填写真正的表名。
提交之后,SQL语句会被解析到页面,可以预览字段并进行核对。如果有时间切片的设置需求,在提交SQL之后可以继续在页面设置。如果无需设置,则直接点击提交
即可。
提交之后,在元数据的树形结构处可以看到创建的表。