AggregateReadWithParents.yql 1.0 KB

12345678910111213141516171819202122
  1. (
  2. #comment
  3. (let res_sink (DataSink 'result))
  4. (let mr_source (DataSource 'yt 'plato))
  5. (let x (Read! world mr_source (Key '('table (String 'Input))) '('key 'subkey 'value) '()))
  6. (let world (Left! x))
  7. (let table1 (Right! x))
  8. (let init (lambda '(x parent) '(parent (StrictFromString (Member x 'value) 'Uint32))))
  9. (let update_min (lambda '(x y parent) '(parent (AggrMin (StrictFromString (Member x 'value) 'Uint32) (Nth y '1)))))
  10. (let save (lambda '(x) x))
  11. (let load (lambda '(x) x))
  12. (let merge_min (lambda '(x y) (AggrMin x y)))
  13. (let finish (lambda '(x) (Nth x '1)))
  14. (let min (AggregationTraits (ListItemType (TypeOf table1)) init update_min save load merge_min finish (Null)))
  15. (let resAll (Aggregate table1 '() '('('minvalue min))))
  16. (let world (Write! world res_sink (Key) resAll '('('type))))
  17. (let resKey (Aggregate table1 '('key) '('('minvalue min))))
  18. (let sortedOutput (Sort resKey (Bool 'false) (lambda '(x) (Member x 'key) )))
  19. (let world (Write! world res_sink (Key) sortedOutput '('('type))))
  20. (let world (Commit! world res_sink))
  21. (return world)
  22. )