如何在HPCC / ECL中将SET转换为DATASET?

时间:2018-09-18 08:35:26

标签: hpcc hpcc-ecl

我在ECL中有这个SET

EXPORT TableNames := [
                        'tbl1',
                        'tbl2',
                        'tbl3',
                        'tbl4'
                     ];
APPLY(TableNames, SomeFunctionPreviouslydefined);

...,我想使用APPLY将其传递给函数。 APPLY不接受SET:

  

“ 3002:\” tblList \“附近的语法错误:预期范围,行设置,自定义,   成功,数据行,数据集,字典,模块名称,标识符,   标识符,函数名,标识符,宏名,'+','^','(','['“

我该怎么办?

1 个答案:

答案 0 :(得分:1)

尽管在文档(https://hpccsystems.com/training/documentation/all-ECL语言参考)中不是很清楚,但是您可以使用DATASET声明将SET转换为DATASET,具体形式为:

[ attr := ] DATASET( recordset [, recstruct ] );
  

attr 数据集的名称,以供以后在其他定义中使用

     

记录集 。一组嵌入式数据记录。这可以简单地命名先前定义的集合定义,也可以显式使用方括号   指示嵌入式集定义。在方括号内记录   用逗号分隔。可以通过以下任一方式指定记录:1)使用   用大括号({})包围每个记录的字段值。的   每个记录中的字段值均以逗号分隔。 2)A   逗号分隔的内联转换函数列表,它们产生   数据行。列表中的所有转换函数必须产生   记录以相同的结果格式。

     

recstruct 可选。记录集的RECORD结构。仅当recordset参数只是一条记录或一组记录时才可忽略   在线转换功能

因此,例如,您可以使用:

EXPORT Layout := RECORD
    STRING tableName;  
END;

EXPORT TableNames := [
                        'tbl1',
                        'tbl2',
                        'tbl3',
                        'tbl4'
                     ];

ds_inlineLayout := DATASET(TableNames, {STRING tableName}); // Define the layout inline
ds_explicitLayout := DATASET(TableNames, Layout); // Use a an explicitly defined layout

OUTPUT(ds_inlineLayout);
OUTPUT(ds_explicitLayout);

最后,要在您的APPLY中使用它:

APPLY(ds_inlineLayout, SomeFunctionPreviouslydefined);