求助: 关于实表过滤后维 (键) 的继承

大佬们,周末好。🙏 我又不合时宜来求助了😂

以下所说所想也不知道对不对哈,一个实表中可以定义多个维,定义了维也就相当于定义了主键,错没?😄 那计算过滤的时候,有可能只需其中的一维,另一个维并未实际选出,发现此时过滤之后所得的结果中原有的主键并未得到继承。比如,有这么一个实表,数据来源于 TPCH(sf=1) 的 orders 表,150 万行 9 列,我在创建 ctx 时误操作设置了两个维,如下截图所示:

imagepng

此时,按条件过滤选出其中的一维和其它需要的某些列,发现结果中该维的主键并没有继承,如下图所示:

imagepng

只有把两个维都选出,结果中才会有主键标识。 所以我求助的问题是:

1、多维的实表是不是要把所有的维选出才能继承主键?只选其中的一些维,可不可以也继承主键?比如这个实表过滤后的结果需要跟其他表做关联计算,如果继承了主键,那直接写,如下:

imagepng

上图中的 A4 如果没有继承主键,那 A5 中必须写成 news@r(A4:O_ORDERKEY,…) 显式指定,要么在 A4 中设定主键,…keys(O_ORDERKEY)。但用 keys()设定主键时,只能针对序表设置主键,不能对游标设置主键。而常规来说,实表的数据行数较多,在使用时往往以游标的形式出现,用 ctx.open().cursor(;filter;).fetch().keys() 这样的方法在结果集大到内存装不下时会不会对效率有负面影响?所以,有多个维的实表在过滤选出其中的一维时,能否继承主键? 当然,抛开主键不说,关联计算时显式指定关联列也是挺方便的。

2、实表创建时因为误操作设置了多个维,可不可以事后补救,把不需要的维去掉? 比如,keys()可以事后按需设置主键,那有没有逆操作取消实表中的维 ( 键),而不用全部推翻重新创建一个实表。数据量小的时候没事,数据量一大,重建输出耗不起时间。

以上两个问题是我在学习该系列文章: 用 TPCH 练习性能优化 时想到的,系列文章很精彩,22 个查询我用普通办公电脑都跑了一遍,即使在没用列式计算的情形下,也见识到了 SPL 的威力,受益良多。因为我的误操作,产生了两个疑问,我也不懂,只能发帖求助,恳请大佬们得闲时给予指导解惑🙏 谢谢!