Как преобразовать SET в DATASET в HPCC / ECL? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть этот SET в ECL

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

... и я хочу передать его функции, используя APPLY.APPLY не принимает SET:

"3002: синтаксическая ошибка рядом с \" tblList \ ": ожидаемый RANGE, ROWSET, SELF, SUCCESS, datarow, набор данных, словарь, имя модуля, идентификатор, идентификатор,имя-функции, идентификатор, имя-макроса, '+', '^', '(', '[' '

Как я могу это сделать?

1 Ответ

0 голосов
/ 20 сентября 2018

Хотя это не очень понятно в документации (https://hpccsystems.com/training/documentation/all - Справочник по языку ECL), вы можете использовать объявление DATASET для преобразования SET в DATASET, а именно в форму:

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

attr Имя DATASET для последующего использования в других определениях

набор записей Наборвстроенные записи данных.Это может просто назвать ранее определенное определение набора или явно использовать квадратные скобки, чтобы указать встроенное определение набора.В квадратных скобках записи разделяются запятыми.Записи задаются одним из следующих способов: 1) Использование фигурных скобок ({}) для окружения значений полей для каждой записи.Значения полей в каждой записи разделяются запятыми.2) Разделенный запятыми список встроенных функций преобразования, которые создают строки данных.Все функции преобразования в списке должны создавать записи в одном и том же формате результатов.

recstruct Необязательно .Структура ЗАПИСИ набора записей.Выпускается только в том случае, если параметром набора записей является только одна запись или список встроенных функций преобразования

Так, например, вы можете использовать:

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);
...