我已经生成了一个简单的维度表,其中层次结构就像
产品cd - > product cat cd - > product_class_cd
当然我们还需要每个代码的标签。
为了生成这个维度表,我编写了以下PIG代码
// get all unique combinations of product_cd, cat_cd and class_cd
X1 = FOREACH PRODUCT GENERATE PRODUCT_CD, PRODUCT_CAT_CD, PRODUCT_CLASS_CD;
X2 = DISTINCT X1;
// now lookup the labels for codes
X3 = JOIN X2 BY PRODUCT_CD, CODE_VALUE BY CODE_VALUE;
X4 = FOREACH X3 GENERATE PRODUCT_CD, DISPLAY AS PRODUCT_CD_NAME,PRODUCT_CAT_CD, PRODUCT_CLASS_CD;
// now lookup the labels for cat_cd
X5 = JOIN X4 BY PRODUCT_CAT_CD, CODE_VALUE BY CODE_VALUE;
X6 = FOREACH X5 GENERATE PRODUCT_CD, PRODUCT_CD_NAME, PRODUCT_CAT_CD, DISPLAY AS PRODUCT_CAT_NAME, PRODUCT_CLASS_CD;
// now lookup the label for class_cd
X7 = JOIN X6 BY PRODUCT_CLASS_CD, CODE_VALUE BY CODE_VALUE;
DimProduct = FOREACH X7 GENERATE PRODUCT_CD, PRODUCT_CD_NAME, PRODUCT_CAT_CD, PRODUCT_CAT_NAME, PRODUCT_CLASS_CD, DISPLAY AS PRODUCT_CLASS_NAME;
// write out the dimension
DUMP DimProduct;
它有效,我得到一个包含6列的维度表。但似乎我写的代码太多了。
我能用更少的代码行完成我想要的吗?否则,当我的维度中的属性数量增加时,这段代码将变得非常混乱。
我还需要引入一个名为DimProduct_id的列,它就像维度表中的行号。我该怎么做?