实际使用中,有一种组表是由多个数据结构相同的组表构成的复组表。复组表存储时使用不同的分表号(比如1、2)+相同的组表名(比如OrderInfo)共同构成名称如下的组表:
本例中订单表1.OrderInfo.ctx和2.OrderInfo.ctx构成的复组表,分表号为1和2,它们按照年份不同分别存储了2020和2021年度的订单表数据,包括销售员ID,订单编码,签单时间以及订单金额。
那怎么用复组表定义虚表呢,我们看看下面的例子:
第一步:加载组表文件
在打开的元数据文件demo.glmd中,点击【增加虚表】按钮,增加一个虚表。
点击【Select】打开pseudo文件夹中的任意一个分表,比如1.OrderInfo.ctx。
此时Pseudo table name自动读取文件名。Select field(s)列出组表的字段和主键信息。
虚表名带点号,为了避免查询时出现歧义,我们将虚表名修改为OrderInfo。
l Pseudo table name,用于设置虚表名,选择文件后,系统自动识别文件名作为虚表名,用户可自定义。
将CTX file的路径改为相对路径,并使用去除分表号的文件名作为复组表文件名:
l CTX file,用于设置虚表对应的物理表,仅支持组表文件。
文件路径可用相对路径和绝对路径。使用相对路径时,相对于Tool – Options – Esproc options中的Main path。
第二步:设置分区号列表
将物理表1.OrderInfo.ctx和2.OrderInfo.ctx的分表号1和2填写到Zone,即分区号列表。
点击【Edit】设置分区号列表
点击【OK】后,分区号列表如下图:
l Use columnar storage,设置是否使用列式存储。使用列式存储可提升性能。缺省已勾选。
第三步:编辑分列计算式
设置复组表文件的Zone expression为OTime:
l Zone expression,分列计算式,仅对复组表有效。用于为虚表设置date字段,便于筛选数据。
在复组表中,数据会分别存储到各分表中,而存储的依据往往是根据某个时间类型的字段,各个分表分别存储某个时间段的数据,这样的时间字段称为分列计算式。比如本例的两个分表中OTime是日期时间型,该列的数据分别是2020、2021年的,此时OTime就是分列计算式。
date字段数据类型一般为日期、时间或者日期时间型,可以使用计算式转换成其他时间类型,以提高查询性能。
date字段要求在使用多个文件时,对各个文件有序,但并不要求在单个数据文件中有序,在建立虚表时会记录每个文件的date字段区间,查询或者过滤时自动定位到所需文件中处理。比如本例的两个分表虽然是按照年份划分的,但每个分表的OTime字段并不要求有序。
DQL查询结果如下: