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

Posted

技术标签:

【中文标题】如何在 HPCC / ECL 中将 SET 转换为 DATASET?【英文标题】:How to convert SET to DATASET in HPCC / ECL? 【发布时间】:2018-09-18 08:35:25 【问题描述】:

我在 ECL 中有这个 SET

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

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

"3002: \"tblList\" 附近的语法错误:预期的 RANGE、ROWSET、SELF、 SUCCESS,数据行,数据集,字典,模块名称,标识符, 标识符、函数名、标识符、宏名、'+'、'^'、'('、'['"

我该怎么做?

【问题讨论】:

【参考方案1】:

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

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

attr DATASET 的名称供以后在其他定义中使用

记录集 一组内嵌数据记录。这可以简单地命名一个先前定义的集合定义或显式使用方括号来 指示内联集定义。方括号内记录 用逗号分隔。记录由以下任一项指定:1)使用 花括号 () 将每条记录的字段值括起来。这 每条记录中的字段值以逗号分隔。 2) 一个 产生 数据行。列表中的所有变换函数必须产生 以相同的结果格式记录。

recstruct 可选。记录集的 RECORD 结构。仅当记录集参数只是一个记录或列表时才可省略 内联变换函数

因此,对于您的示例,您可以使用:

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(ds_inlineLayout, SomeFunctionPreviouslydefined);

【讨论】:

谢谢,文档中不是很清楚。显式布局和内联布局哪个更好? 我不会说一个一定比另一个“更好”,我想这取决于您和您的团队喜欢的编码风格和布局。就我个人而言,如果它很简单并且只在一个地方使用,我会使用内联布局,否则我会使用显式布局

以上是关于如何在 HPCC / ECL 中将 SET 转换为 DATASET?的主要内容,如果未能解决你的问题,请参考以下文章

HPCC-ECL 逻辑运算符 - 为啥 OR 不短路?

HPCC ECL REGEX 环视背靠背值

在 ECL IDE 中从本地切换到雷神集群

如何在 TypeScript 中将 Set 转换为数组

如何在python中将集合转换为列表?

NaN 或 IsNumeric 的 ECL 等价物是啥?