各位专家好,
我在我的项目中使用了Data Services提供的gen\u row\u num\u by\u group函数,在进行了实验之后,淘客pid,我记录了我的观察结果,并想与大家分享。
假设您有一个查找排名的要求。然后BODS提供了一个名为gen\u row\u num\u by\u group的函数,该函数将排名分配给传入的行。
但是在使用此函数时要注意一点,即在外行语言中,你所有的入职记录都要妥善安排,在专业术语中,你申请排名的栏目要先排序。
让我们举个例子来理解。
考虑一下我下面的来源和目标,
源到目标的映射如下:
第一次执行作业时,目标表的记录是:
现在,在按组跳转到gen\u row\u num之前,让我们先看看gen\u row\u num函数。
gen\u row\u num:–顾名思义,生成行号,这样每次执行时它都会为每个传入行分配编号您的数据流驻留在您的作业中。默认情况下,它开始将传入记录递增1,但如果您将其映射为
Gen\u row\u num()+1,则对于每个传入行,它将添加此"1"。
通常,它可以是
Gen\u row\u num()+n
其中n=1,2,3,…
让我们通过一个示例来理解,
我添加了Result列并用gen\u row\u num()函数将其映射如下:
因此在执行作业后,我的输出看起来是:
如我所述,它为每个传入记录添加了一个序列号。
现在让我们了解gen\u row\u num by \u group的功能。
gen\u row\u num by \u group:–这意味着创建一组类似的记录,然后应用gen\u row\u num功能。(哈哈这个定义是我自己创造的。:)
现在,正如我所说的,它将为一个指定的列创建一个组,然后为它们分配行号。
我将结果列与gen_row_num_by_group进行了映射,如图所示:
在执行下面的操作之后是我的目标表:–
那么逻辑上它做了什么?
对于一组相似的输入记录,它分配了行号。
与101–104的输入记录一样,C2列的值为"a",因此它分配了1、2、3、4。
然后从105开始,C2列的值发生了变化,即变为AB,大数据调研报告,因此它分配了1,记录106对于C2也有相同的值,因此它将其分配给数字2。
以类似的方式,它对所有传入的行都进行了分配。
因此理想情况下,我们的函数已将秩分配给类似的组,大数据的,但请等待,检查值109,它的值为"1",但根据组的gen\u row\u num\u的功能,它的值应该为"5"。
因此,云上,这意味着我需要先按顺序排列我的记录。
因此,我对我要分配排名的列应用order by,如图所示:
再次执行我的工作,输出看起来像:
但都是徒劳的,再次为C1=109我对它进行了排名"1"。
所以这个函数,
首先对所有传入的源记录应用gen\u row\u num\u by \u group功能,然后应用order by并按顺序排列记录。
参见值为"A"的C2组成一个组,"AB"组成一个组。
同样,C2中所有类似的记录组成一个组。
按组我的意思是它们是有序排列的。
因此为了解决这个问题并对传入的源应用适当的排序,我首先需要按顺序排列传入的记录,然后应用gen\u row\u num by \u group功能。
因此我修改了我的映射,如图所示:
first order by,
然后gen\u row\u num by \u group功能,
最后在执行完任务后,我的目标表是这样的:
所以你可以看到C2的所有相似记录都被分配了一个适当的等级。
它首先对所有传入的记录应用按功能排序,每日返利,并将它们排列在一个相似的组中,然后对其应用等级。
希望我能够解释的功能gen_row_num_by_group以及它处理传入数据的方式。
如果我遗漏了什么,请告诉我。