Как упоминалось в моем комментарии, SAP HANA предоставляет Hierarchy-Functions , которые обеспечивают очень эффективную обработку данных иерархии, которые были закодированы в таблицах с помощью схемы "узел" / "родительский узел".
Требование этого вопроса можно сформулировать так: "пройти направленный граф в глубину и вернуть посещенные узлы в порядке посещения" .
С помощью функций иерархииэто легко сделать:
create column table con (ID nvarchar(2) not null
, IDNEXT nvarchar(2) not null);
/*
ID IDNEXT
1A 2E
3D 4A
2E 6F
6F 3D
4A
*/
insert into con values ('1A', '2E');
insert into con values ('3D', '4A');
insert into con values ('2E', '6F');
insert into con values ('6F', '3D');
insert into con values ('4A', '');
SELECT
hierarchy_rank AS rank,
node_id,
parent_id
FROM HIERARCHY (
SOURCE (SELECT ID as "NODE_ID"
, IDNEXT as "PARENT_ID"
FROM con)
START WHERE IDNEXT =''
)
ORDER BY
hierarchy_rank desc;
/*
RANK NODE_ID PARENT_ID
5 1A 2E
4 2E 6F
3 6F 3D
2 3D 4A
1 4A
*/
Этот подход выигрывает от
- выразительности того, как иерархия создается на основе данных таблицы и какие вычисления должны выполняться с иерархией
- эффективная (как в пространстве, так и во времени) реализация обработки иерархии в SAP HANA вместо эмуляции функциональности через функции SQL.Это особенно удобно, когда необходимо повторно использовать ту же иерархию, поскольку структура автоматически кэшируется.
Самое большое препятствие с этими специальными функциями, вероятно, заключается в том, что им необходимо точно думать оиерархия / график, который вы хотите определить.К счастью, SAP HANA Academy предоставляет несколько учебных пособий видео , которым нужно следовать.