求助: 关于实表过滤后维 (键) 的继承
大佬们,周末好。🙏 我又不合时宜来求助了😂
以下所说所想也不知道对不对哈,一个实表中可以定义多个维,定义了维也就相当于定义了主键,错没?😄 那计算过滤的时候,有可能只需其中的一维,另一个维并未实际选出,发现此时过滤之后所得的结果中原有的主键并未得到继承。比如,有这么一个实表,数据来源于 TPCH(sf=1) 的 orders 表,150 万行 9 列,我在创建 ctx 时误操作设置了两个维,如下截图所示:
此时,按条件过滤选出其中的一维和其它需要的某些列,发现结果中该维的主键并没有继承,如下图所示:
只有把两个维都选出,结果中才会有主键标识。 所以我求助的问题是:
1、多维的实表是不是要把所有的维选出才能继承主键?只选其中的一些维,可不可以也继承主键?比如这个实表过滤后的结果需要跟其他表做关联计算,如果继承了主键,那直接写,如下:
上图中的 A4 如果没有继承主键,那 A5 中必须写成 news@r(A4:O_ORDERKEY,…) 显式指定,要么在 A4 中设定主键,…keys(O_ORDERKEY)。但用 keys()设定主键时,只能针对序表设置主键,不能对游标设置主键。而常规来说,实表的数据行数较多,在使用时往往以游标的形式出现,用 ctx.open().cursor(;filter;).fetch().keys() 这样的方法在结果集大到内存装不下时会不会对效率有负面影响?所以,有多个维的实表在过滤选出其中的一维时,能否继承主键? 当然,抛开主键不说,关联计算时显式指定关联列也是挺方便的。
2、实表创建时因为误操作设置了多个维,可不可以事后补救,把不需要的维去掉? 比如,keys()可以事后按需设置主键,那有没有逆操作取消实表中的维 ( 键),而不用全部推翻重新创建一个实表。数据量小的时候没事,数据量一大,重建输出耗不起时间。
以上两个问题是我在学习该系列文章: 用 TPCH 练习性能优化 时想到的,系列文章很精彩,22 个查询我用普通办公电脑都跑了一遍,即使在没用列式计算的情形下,也见识到了 SPL 的威力,受益良多。因为我的误操作,产生了两个疑问,我也不懂,只能发帖求助,恳请大佬们得闲时给予指导解惑🙏 谢谢!
1、只选出部分维字段时因为目前无法判断选出的维字段是否是选出数据的逻辑主键,所以不会设置主键。
2、目前没有这方面的功能
Got it, Thx a lot🙏