udaf_with_def_value.sql 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. pragma warning("disable", "4520");
  2. $my_table =
  3. SELECT 1 AS id, 1 AS ts, 4 AS value1
  4. UNION ALL
  5. SELECT 2 AS id, 1 AS ts, NULL AS value1
  6. UNION ALL
  7. SELECT 1 AS id, 2 AS ts, 4 AS value1
  8. UNION ALL
  9. SELECT 3 AS id, 2 AS ts, 40 AS value1
  10. UNION ALL
  11. SELECT 3 AS id, 5 AS ts, 2 AS value1
  12. UNION ALL
  13. SELECT 3 AS id, 10 AS ts, 40 AS value1
  14. ;
  15. $cnt_create = ($_item, $_parent) -> { return 1ul };
  16. $cnt_add = ($state, $_item, $_parent) -> { return 1ul + $state };
  17. $cnt_merge = ($state1, $state2) -> { return $state1 + $state2 };
  18. $cnt_get_result = ($state) -> { return $state };
  19. $cnt_serialize = ($state) -> { return $state };
  20. $cnt_deserialize = ($state) -> { return $state };
  21. -- non-trivial default value
  22. $cnt_default = 0.0;
  23. $cnt_udaf_factory = AggregationFactory(
  24. "UDAF",
  25. $cnt_create,
  26. $cnt_add,
  27. $cnt_merge,
  28. $cnt_get_result,
  29. $cnt_serialize,
  30. $cnt_deserialize,
  31. $cnt_default
  32. );
  33. SELECT
  34. id
  35. , ts
  36. , value1
  37. , AGGREGATE_BY(value1, $cnt_udaf_factory) OVER lagging AS lagging_opt
  38. , AGGREGATE_BY(value1, $cnt_udaf_factory) OVER generic AS generic_opt
  39. , AGGREGATE_BY(ts, $cnt_udaf_factory) OVER lagging AS lagging
  40. , AGGREGATE_BY(ts, $cnt_udaf_factory) OVER generic AS generic
  41. , AGGREGATE_BY(value1, $cnt_udaf_factory) OVER empty AS empty_opt
  42. , AGGREGATE_BY(ts, $cnt_udaf_factory) OVER empty AS empty
  43. FROM $my_table
  44. WINDOW lagging AS (
  45. ORDER BY ts, id
  46. ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
  47. )
  48. , generic AS (
  49. ORDER BY ts, id
  50. ROWS BETWEEN 10 PRECEDING AND 1 PRECEDING
  51. )
  52. , empty AS (
  53. ORDER BY ts, id
  54. ROWS BETWEEN 10 FOLLOWING AND 1 FOLLOWING
  55. )
  56. ORDER BY ts, id;