@uwdata/mosaic-core 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/LICENSE +47 -0
  2. package/README.md +0 -1
  3. package/dist/src/Coordinator.d.ts +147 -0
  4. package/dist/src/Coordinator.d.ts.map +1 -0
  5. package/dist/src/Coordinator.js +269 -0
  6. package/dist/src/Coordinator.js.map +1 -0
  7. package/dist/src/MosaicClient.d.ts +138 -0
  8. package/dist/src/MosaicClient.d.ts.map +1 -0
  9. package/dist/src/MosaicClient.js +213 -0
  10. package/dist/src/MosaicClient.js.map +1 -0
  11. package/dist/src/Param.d.ts +56 -0
  12. package/dist/src/Param.d.ts.map +1 -0
  13. package/dist/src/Param.js +89 -0
  14. package/dist/src/Param.js.map +1 -0
  15. package/dist/src/QueryConsolidator.d.ts +11 -0
  16. package/dist/src/QueryConsolidator.d.ts.map +1 -0
  17. package/dist/src/QueryConsolidator.js +249 -0
  18. package/dist/src/QueryConsolidator.js.map +1 -0
  19. package/dist/src/QueryManager.d.ts +77 -0
  20. package/dist/src/QueryManager.d.ts.map +1 -0
  21. package/dist/src/QueryManager.js +174 -0
  22. package/dist/src/QueryManager.js.map +1 -0
  23. package/dist/src/Selection.d.ts +222 -0
  24. package/dist/src/Selection.d.ts.map +1 -0
  25. package/dist/src/Selection.js +319 -0
  26. package/dist/src/Selection.js.map +1 -0
  27. package/dist/src/SelectionClause.d.ts +192 -0
  28. package/dist/src/SelectionClause.d.ts.map +1 -0
  29. package/dist/src/SelectionClause.js +126 -0
  30. package/dist/src/SelectionClause.js.map +1 -0
  31. package/dist/src/connectors/Connector.d.ts +26 -0
  32. package/dist/src/connectors/Connector.d.ts.map +1 -0
  33. package/dist/src/connectors/Connector.js +2 -0
  34. package/dist/src/connectors/Connector.js.map +1 -0
  35. package/dist/src/connectors/rest.d.ts +24 -0
  36. package/dist/src/connectors/rest.d.ts.map +1 -0
  37. package/dist/src/connectors/rest.js +37 -0
  38. package/dist/src/connectors/rest.js.map +1 -0
  39. package/dist/src/connectors/socket.d.ts +40 -0
  40. package/dist/src/connectors/socket.d.ts.map +1 -0
  41. package/dist/src/connectors/socket.js +115 -0
  42. package/dist/src/connectors/socket.js.map +1 -0
  43. package/dist/src/connectors/wasm.d.ts +53 -0
  44. package/dist/src/connectors/wasm.d.ts.map +1 -0
  45. package/dist/src/connectors/wasm.js +113 -0
  46. package/dist/src/connectors/wasm.js.map +1 -0
  47. package/dist/src/index.d.ts +28 -0
  48. package/dist/src/index.d.ts.map +1 -0
  49. package/dist/src/index.js +25 -0
  50. package/dist/src/index.js.map +1 -0
  51. package/dist/src/make-client.d.ts +35 -0
  52. package/dist/src/make-client.d.ts.map +1 -0
  53. package/dist/src/make-client.js +52 -0
  54. package/dist/src/make-client.js.map +1 -0
  55. package/dist/src/preagg/PreAggregator.d.ts +150 -0
  56. package/dist/src/preagg/PreAggregator.d.ts.map +1 -0
  57. package/dist/src/preagg/PreAggregator.js +382 -0
  58. package/dist/src/preagg/PreAggregator.js.map +1 -0
  59. package/dist/src/preagg/preagg-columns.d.ts +16 -0
  60. package/dist/src/preagg/preagg-columns.d.ts.map +1 -0
  61. package/dist/src/preagg/preagg-columns.js +95 -0
  62. package/dist/src/preagg/preagg-columns.js.map +1 -0
  63. package/dist/src/preagg/sufficient-statistics.d.ts +14 -0
  64. package/dist/src/preagg/sufficient-statistics.d.ts.map +1 -0
  65. package/dist/src/preagg/sufficient-statistics.js +446 -0
  66. package/dist/src/preagg/sufficient-statistics.js.map +1 -0
  67. package/dist/src/types.d.ts +77 -0
  68. package/dist/src/types.d.ts.map +1 -0
  69. package/dist/src/types.js +2 -0
  70. package/dist/src/types.js.map +1 -0
  71. package/dist/src/util/AsyncDispatch.d.ts +121 -0
  72. package/dist/src/util/AsyncDispatch.d.ts.map +1 -0
  73. package/dist/src/util/AsyncDispatch.js +188 -0
  74. package/dist/src/util/AsyncDispatch.js.map +1 -0
  75. package/dist/src/util/cache.d.ts +19 -0
  76. package/dist/src/util/cache.d.ts.map +1 -0
  77. package/dist/src/util/cache.js +66 -0
  78. package/dist/src/util/cache.js.map +1 -0
  79. package/dist/src/util/decode-ipc.d.ts +12 -0
  80. package/dist/src/util/decode-ipc.d.ts.map +1 -0
  81. package/{src → dist/src}/util/decode-ipc.js +5 -6
  82. package/dist/src/util/decode-ipc.js.map +1 -0
  83. package/dist/src/util/distinct.d.ts +3 -0
  84. package/dist/src/util/distinct.d.ts.map +1 -0
  85. package/dist/src/util/distinct.js +16 -0
  86. package/dist/src/util/distinct.js.map +1 -0
  87. package/dist/src/util/field-info.d.ts +26 -0
  88. package/dist/src/util/field-info.d.ts.map +1 -0
  89. package/dist/src/util/field-info.js +91 -0
  90. package/dist/src/util/field-info.js.map +1 -0
  91. package/dist/src/util/hash.d.ts +2 -0
  92. package/dist/src/util/hash.d.ts.map +1 -0
  93. package/dist/src/util/hash.js +26 -0
  94. package/dist/src/util/hash.js.map +1 -0
  95. package/dist/src/util/is-activatable.d.ts +8 -0
  96. package/dist/src/util/is-activatable.d.ts.map +1 -0
  97. package/dist/src/util/is-activatable.js +10 -0
  98. package/dist/src/util/is-activatable.js.map +1 -0
  99. package/dist/src/util/is-arrow-table.d.ts +9 -0
  100. package/dist/src/util/is-arrow-table.d.ts.map +1 -0
  101. package/dist/src/util/is-arrow-table.js +11 -0
  102. package/dist/src/util/is-arrow-table.js.map +1 -0
  103. package/dist/src/util/js-type.d.ts +9 -0
  104. package/dist/src/util/js-type.d.ts.map +1 -0
  105. package/dist/src/util/js-type.js +59 -0
  106. package/dist/src/util/js-type.js.map +1 -0
  107. package/dist/src/util/priority-queue.d.ts +35 -0
  108. package/dist/src/util/priority-queue.d.ts.map +1 -0
  109. package/dist/src/util/priority-queue.js +81 -0
  110. package/dist/src/util/priority-queue.js.map +1 -0
  111. package/dist/src/util/query-result.d.ts +47 -0
  112. package/dist/src/util/query-result.d.ts.map +1 -0
  113. package/dist/src/util/query-result.js +83 -0
  114. package/dist/src/util/query-result.js.map +1 -0
  115. package/dist/src/util/synchronizer.d.ts +36 -0
  116. package/dist/src/util/synchronizer.d.ts.map +1 -0
  117. package/dist/src/util/synchronizer.js +52 -0
  118. package/dist/src/util/synchronizer.js.map +1 -0
  119. package/dist/src/util/throttle.d.ts +12 -0
  120. package/dist/src/util/throttle.d.ts.map +1 -0
  121. package/dist/src/util/throttle.js +51 -0
  122. package/dist/src/util/throttle.js.map +1 -0
  123. package/dist/src/util/to-data-columns.d.ts +22 -0
  124. package/dist/src/util/to-data-columns.d.ts.map +1 -0
  125. package/dist/src/util/to-data-columns.js +51 -0
  126. package/dist/src/util/to-data-columns.js.map +1 -0
  127. package/dist/src/util/void-logger.d.ts +13 -0
  128. package/dist/src/util/void-logger.d.ts.map +1 -0
  129. package/dist/src/util/void-logger.js +13 -0
  130. package/dist/src/util/void-logger.js.map +1 -0
  131. package/package.json +16 -10
  132. package/src/Coordinator.ts +367 -0
  133. package/src/{MosaicClient.js → MosaicClient.ts} +49 -43
  134. package/src/{Param.js → Param.ts} +29 -28
  135. package/src/{QueryConsolidator.js → QueryConsolidator.ts} +81 -58
  136. package/src/{QueryManager.js → QueryManager.ts} +61 -54
  137. package/src/Selection.ts +388 -0
  138. package/src/SelectionClause.ts +275 -0
  139. package/src/connectors/Connector.ts +6 -6
  140. package/src/connectors/rest.ts +56 -0
  141. package/src/connectors/{socket.js → socket.ts} +53 -42
  142. package/src/connectors/{wasm.js → wasm.ts} +46 -62
  143. package/src/{index.js → index.ts} +13 -1
  144. package/src/make-client.ts +93 -0
  145. package/src/preagg/{PreAggregator.js → PreAggregator.ts} +164 -145
  146. package/src/preagg/{preagg-columns.js → preagg-columns.ts} +27 -24
  147. package/src/preagg/{sufficient-statistics.js → sufficient-statistics.ts} +160 -110
  148. package/src/types.ts +24 -9
  149. package/src/util/{AsyncDispatch.js → AsyncDispatch.ts} +62 -43
  150. package/src/util/{cache.js → cache.ts} +25 -15
  151. package/src/util/decode-ipc.ts +15 -0
  152. package/src/util/{distinct.js → distinct.ts} +3 -3
  153. package/src/util/{field-info.js → field-info.ts} +31 -32
  154. package/src/util/{hash.js → hash.ts} +4 -4
  155. package/src/util/is-activatable.ts +11 -0
  156. package/src/util/is-arrow-table.ts +12 -0
  157. package/src/util/{js-type.js → js-type.ts} +7 -5
  158. package/src/util/{priority-queue.js → priority-queue.ts} +32 -20
  159. package/src/util/{query-result.js → query-result.ts} +24 -17
  160. package/src/util/synchronizer.ts +56 -0
  161. package/src/util/throttle.ts +59 -0
  162. package/src/util/to-data-columns.ts +65 -0
  163. package/src/util/void-logger.ts +23 -0
  164. package/src/Coordinator.js +0 -313
  165. package/src/Selection.js +0 -380
  166. package/src/SelectionClause.js +0 -159
  167. package/src/connectors/rest.js +0 -38
  168. package/src/index-types.ts +0 -5
  169. package/src/make-client.js +0 -101
  170. package/src/util/is-activatable.js +0 -8
  171. package/src/util/is-arrow-table.js +0 -10
  172. package/src/util/selection-types.ts +0 -137
  173. package/src/util/synchronizer.js +0 -47
  174. package/src/util/throttle.js +0 -54
  175. package/src/util/to-data-columns.js +0 -60
  176. package/src/util/void-logger.js +0 -13
  177. package/tsconfig.json +0 -9
  178. package/vitest.config.ts +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preagg-columns.js","sourceRoot":"","sources":["../../../src/preagg/preagg-columns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { AggregateNode, ColumnRefNode, ExprNode } from '@uwdata/mosaic-sql';
2
+ /**
3
+ * Determine sufficient statistics to preaggregate the given node. This
4
+ * method populates the *preagg* and *aggrs* arguments with necessary
5
+ * information for preaggregation optimization.
6
+ * @param node An aggregate function.
7
+ * @param preagg Map of column names to
8
+ * expressions to include in the preaggregation table.
9
+ * @param avg Global average query generator.
10
+ * @returns Output aggregate expression that uses preaggregated
11
+ * sufficient statistics to service updates.
12
+ */
13
+ export declare function sufficientStatistics(node: AggregateNode, preagg: Record<string, ExprNode>, avg: (field: ColumnRefNode) => ExprNode): ExprNode | null;
14
+ //# sourceMappingURL=sufficient-statistics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sufficient-statistics.d.ts","sourceRoot":"","sources":["../../../src/preagg/sufficient-statistics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAIjF;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,QAAQ,GACtC,QAAQ,GAAG,IAAI,CAwEjB"}
@@ -0,0 +1,446 @@
1
+ import { and, argmax, argmin, coalesce, count, div, exp, isNotNull, ln, max, min, mul, pow, regrAvgX, regrAvgY, regrCount, sql, sqrt, sub, sum } from '@uwdata/mosaic-sql';
2
+ import { fnv_hash } from '../util/hash.js';
3
+ /**
4
+ * Determine sufficient statistics to preaggregate the given node. This
5
+ * method populates the *preagg* and *aggrs* arguments with necessary
6
+ * information for preaggregation optimization.
7
+ * @param node An aggregate function.
8
+ * @param preagg Map of column names to
9
+ * expressions to include in the preaggregation table.
10
+ * @param avg Global average query generator.
11
+ * @returns Output aggregate expression that uses preaggregated
12
+ * sufficient statistics to service updates.
13
+ */
14
+ export function sufficientStatistics(node, preagg, avg) {
15
+ switch (node.name) {
16
+ case 'count':
17
+ case 'count_star':
18
+ return sumCountExpr(preagg, node);
19
+ case 'sum':
20
+ return sumExpr(preagg, node);
21
+ case 'avg':
22
+ return avgExpr(preagg, node);
23
+ case 'geomean':
24
+ return geomeanExpr(preagg, node);
25
+ case 'arg_max':
26
+ return argmaxExpr(preagg, node);
27
+ case 'arg_min':
28
+ return argminExpr(preagg, node);
29
+ // variance statistics drop the original aggregate operation
30
+ // in favor of tracking sufficient statistics
31
+ case 'variance':
32
+ case 'var_samp':
33
+ return varianceExpr(preagg, node, avg);
34
+ case 'var_pop':
35
+ return varianceExpr(preagg, node, avg, false);
36
+ case 'stddev':
37
+ case 'stddev_samp':
38
+ return sqrt(varianceExpr(preagg, node, avg));
39
+ case 'stddev_pop':
40
+ return sqrt(varianceExpr(preagg, node, avg, false));
41
+ case 'covar_samp':
42
+ return covarianceExpr(preagg, node, avg);
43
+ case 'covar_pop':
44
+ return covarianceExpr(preagg, node, avg, false);
45
+ case 'corr':
46
+ return corrExpr(preagg, node, avg);
47
+ // regression statistics
48
+ case 'regr_count':
49
+ return regrCountExpr(preagg, node).expr;
50
+ case 'regr_avgx':
51
+ return regrAvgXExpr(preagg, node);
52
+ case 'regr_avgy':
53
+ return regrAvgYExpr(preagg, node);
54
+ case 'regr_syy':
55
+ return regrVarExpr(preagg, 0, node, avg);
56
+ case 'regr_sxx':
57
+ return regrVarExpr(preagg, 1, node, avg);
58
+ case 'regr_sxy':
59
+ return covarianceExpr(preagg, node, avg, null);
60
+ case 'regr_slope':
61
+ return regrSlopeExpr(preagg, node, avg);
62
+ case 'regr_intercept':
63
+ return regrInterceptExpr(preagg, node, avg);
64
+ case 'regr_r2':
65
+ return pow(corrExpr(preagg, node, avg), 2);
66
+ // aggregates that commute directly
67
+ case 'max':
68
+ case 'min':
69
+ case 'bit_and':
70
+ case 'bit_or':
71
+ case 'bit_xor':
72
+ case 'bool_and':
73
+ case 'bool_or':
74
+ case 'product': {
75
+ const name = colName(node);
76
+ preagg[name] = node;
77
+ return sql `${node.name}("${name}")`;
78
+ }
79
+ // unsupported aggregate, return null to indicate failure
80
+ default: return null;
81
+ }
82
+ }
83
+ /**
84
+ * Generate a column name for the given aggregate node. The name is
85
+ * made from a hash of the string-serialized SQL expression.
86
+ * @param node The aggregate node to name.
87
+ * @returns The generated column name.
88
+ */
89
+ function colName(node) {
90
+ return 'pre_' + fnv_hash(`${node}`).toString(16);
91
+ }
92
+ /**
93
+ * Add a sufficient statistic to the preaggregation column set.
94
+ * Generates a unique column name for the statistic and propagates
95
+ * a FILTER clause if one exists on the original aggregate node.
96
+ * @param preagg A map of columns (such as
97
+ * sufficient statistics) to pre-aggregate.
98
+ * @param expr The aggregate statistic to add.
99
+ * @param node The originating aggregate function call.
100
+ * @returns The name of the statistic column.
101
+ */
102
+ function addStat(preagg, expr, node) {
103
+ const filter = node?.filter;
104
+ if (filter) {
105
+ // push filter clause to preaggregate expr
106
+ expr = expr.filter
107
+ ? expr.where(and(filter, expr.filter))
108
+ : expr.where(filter);
109
+ }
110
+ const name = colName(expr);
111
+ preagg[name] = expr;
112
+ return name;
113
+ }
114
+ /**
115
+ * Generate an expression for calculating counts over data dimensions.
116
+ * As a side effect, this method adds a column to the input *preagg* object
117
+ * to track the count of non-null values per-partition.
118
+ * @param preagg A map of columns (such as
119
+ * sufficient statistics) to pre-aggregate.
120
+ * @param node The originating aggregate function call.
121
+ * @returns An aggregate expression over
122
+ * pre-aggregated dimensions and associated column name.
123
+ */
124
+ function countExpr(preagg, node) {
125
+ const name = addStat(preagg, count(node.args[0]), node);
126
+ return { expr: coalesce(sum(name), 0), name };
127
+ }
128
+ /**
129
+ * Generate an expression for calculating counts over data dimensions.
130
+ * The expression is a summation with an additional coalesce operation
131
+ * to map null sums to zero-valued counts.
132
+ * @param preagg A map of columns (such as
133
+ * sufficient statistics) to pre-aggregate.
134
+ * @param node The originating aggregate function call.
135
+ * @returns An aggregate expression over pre-aggregated dimensions.
136
+ */
137
+ function sumCountExpr(preagg, node) {
138
+ return coalesce(sumExpr(preagg, node), 0);
139
+ }
140
+ /**
141
+ * Generate an expression for calculating sums over data dimensions.
142
+ * @param preagg A map of columns (such as
143
+ * sufficient statistics) to pre-aggregate.
144
+ * @param node The originating aggregate function call.
145
+ * @returns An aggregate expression over pre-aggregated dimensions.
146
+ */
147
+ function sumExpr(preagg, node) {
148
+ return sum(addStat(preagg, node));
149
+ }
150
+ /**
151
+ * Generate an expression for calculating averages over data dimensions.
152
+ * As a side effect, this method adds a column to the input *preagg* object
153
+ * to track the count of non-null values per-partition.
154
+ * @param preagg A map of columns (such as
155
+ * sufficient statistics) to pre-aggregate.
156
+ * @param node The originating aggregate function call.
157
+ * @returns An aggregate expression over pre-aggregated dimensions.
158
+ */
159
+ function avgExpr(preagg, node) {
160
+ const as = addStat(preagg, node);
161
+ const { expr, name } = countExpr(preagg, node);
162
+ return div(sum(mul(as, name)), expr);
163
+ }
164
+ /**
165
+ * Generate an expression for calculating geometric means over data dimensions.
166
+ * This method uses log-based computations to ensure numerical stability. The
167
+ * geomean calculation uses two sufficient statistics: the sum of log values
168
+ * and the count of non-null values. As a side effect, this method adds columns
169
+ * for these statistics to the input *preagg* object.
170
+ * @param preagg A map of columns (such as
171
+ * sufficient statistics) to pre-aggregate.
172
+ * @param node The originating aggregate function call.
173
+ * @returns An aggregate expression over pre-aggregated dimensions.
174
+ */
175
+ function geomeanExpr(preagg, node) {
176
+ const x = node.args[0];
177
+ const expr = addStat(preagg, sum(ln(x)), node);
178
+ const { expr: n } = countExpr(preagg, node);
179
+ return exp(div(sum(expr), n));
180
+ }
181
+ /**
182
+ * Generate an expression for calculating argmax over data dimensions.
183
+ * As a side effect, this method adds a column to the input *preagg* object
184
+ * to track a maximum value per-partition.
185
+ * @param preagg A map of columns (such as
186
+ * sufficient statistics) to pre-aggregate.
187
+ * @param node The originating aggregate function call.
188
+ * @returns An aggregate expression over pre-aggregated dimensions.
189
+ */
190
+ function argmaxExpr(preagg, node) {
191
+ const expr = addStat(preagg, node);
192
+ const maxy = addStat(preagg, max(node.args[1]), node);
193
+ return argmax(expr, maxy);
194
+ }
195
+ /**
196
+ * Generate an expression for calculating argmin over data dimensions.
197
+ * As a side effect, this method adds a column to the input *preagg* object
198
+ * to track a minimum value per-partition.
199
+ * @param preagg A map of columns (such as
200
+ * sufficient statistics) to pre-aggregate.
201
+ * @param node The originating aggregate function call.
202
+ * @returns An aggregate expression over pre-aggregated dimensions.
203
+ */
204
+ function argminExpr(preagg, node) {
205
+ const expr = addStat(preagg, node);
206
+ const miny = addStat(preagg, min(node.args[1]), node);
207
+ return argmin(expr, miny);
208
+ }
209
+ /**
210
+ * Generate an expression for calculating variance over data dimensions.
211
+ * This method uses the "textbook" definition of variance (E[X^2] - E[X]^2),
212
+ * but on mean-centered data to reduce floating point error. The variance
213
+ * calculation uses three sufficient statistics: the count of non-null values,
214
+ * the residual sum of squares and the sum of residual (mean-centered) values.
215
+ * As a side effect, this method adds columns for these statistics to the
216
+ * input *preagg* object.
217
+ * @param preagg A map of columns (such as
218
+ * sufficient statistics) to pre-aggregate.
219
+ * @param node The originating aggregate function call.
220
+ * @param avg Global average query generator.
221
+ * @param correction A flag for whether a Bessel
222
+ * correction should be applied to compute the sample variance
223
+ * rather than the populatation variance.
224
+ * @returns An aggregate expression over pre-aggregated dimensions.
225
+ */
226
+ function varianceExpr(preagg, node, avg, correction = true) {
227
+ const x = node.args[0];
228
+ const { expr: n } = countExpr(preagg, node);
229
+ const delta = sub(x, avg(x));
230
+ const rssq = addStat(preagg, sum(pow(delta, 2)), node); // residual sum of squares
231
+ const rsum = addStat(preagg, sum(delta), node); // residual sum
232
+ const denom = correction ? sub(n, 1) : n; // Bessel correction
233
+ return div(sub(sum(rssq), div(pow(sum(rsum), 2), n)), denom);
234
+ }
235
+ /**
236
+ * Generate an expression for calculating covariance over data dimensions.
237
+ * This method uses mean-centered data to reduce floating point error. The
238
+ * covariance calculation uses four sufficient statistics: the count of
239
+ * non-null value pairs, the sum of residual products, and residual sums
240
+ * (of mean-centered values) for x and y. As a side effect, this method
241
+ * adds columns for these statistics to the input *preagg* object.
242
+ * @param preagg A map of columns (such as
243
+ * sufficient statistics) to pre-aggregate.
244
+ * @param node The originating aggregate function call.
245
+ * @param avg Global average query generator.
246
+ * @param correction A flag for whether a Bessel
247
+ * correction should be applied to compute the sample covariance rather
248
+ * than the populatation covariance. If null, an expression for the
249
+ * unnormalized covariance (no division by sample count) is returned.
250
+ * @returns An aggregate expression over pre-aggregated dimensions.
251
+ */
252
+ function covarianceExpr(preagg, node, avg, correction = true) {
253
+ const { expr: n } = regrCountExpr(preagg, node);
254
+ const sxy = regrSumXYExpr(preagg, node, avg);
255
+ const sx = regrSumExpr(preagg, 1, node, avg);
256
+ const sy = regrSumExpr(preagg, 0, node, avg);
257
+ const num = sub(sxy, div(mul(sx, sy), n));
258
+ return correction === null ? num // do not divide by count
259
+ : correction ? div(num, sub(n, 1)) // Bessel correction (sample)
260
+ : div(num, n); // no correction (population)
261
+ }
262
+ /**
263
+ * Generate an expression for calculating Pearson product-moment correlation
264
+ * coefficients over data dimensions. This method uses mean-centered data
265
+ * to reduce floating point error. The correlation calculation uses six
266
+ * sufficient statistics: the count of non-null value pairs, the sum of
267
+ * residual products, and both residual sums and sums of squares for x and y.
268
+ * As a side effect, this method adds columns for these statistics to the
269
+ * input *preagg* object.
270
+ * @param preagg A map of columns (such as
271
+ * sufficient statistics) to pre-aggregate.
272
+ * @param node The originating aggregate function call.
273
+ * @param avg Global average query generator.
274
+ * @returns An aggregate expression over pre-aggregated dimensions.
275
+ */
276
+ function corrExpr(preagg, node, avg) {
277
+ const { expr: n } = regrCountExpr(preagg, node);
278
+ const sxy = regrSumXYExpr(preagg, node, avg);
279
+ const sxx = regrSumSqExpr(preagg, 1, node, avg);
280
+ const syy = regrSumSqExpr(preagg, 0, node, avg);
281
+ const sx = regrSumExpr(preagg, 1, node, avg);
282
+ const sy = regrSumExpr(preagg, 0, node, avg);
283
+ const vx = sub(sxx, div(pow(sx, 2), n));
284
+ const vy = sub(syy, div(pow(sy, 2), n));
285
+ return div(sub(sxy, div(mul(sx, sy), n)), sqrt(mul(vx, vy)));
286
+ }
287
+ /**
288
+ * Generate an expression for the count of non-null (x, y) pairs. As a side
289
+ * effect, this method adds columns to the input *preagg* object to the
290
+ * partition-level count of non-null pairs.
291
+ * @param preagg A map of columns (such as
292
+ * sufficient statistics) to pre-aggregate.
293
+ * @param node The originating aggregate function call.
294
+ * @returns An aggregate expression over
295
+ * pre-aggregated dimensions and associated column name.
296
+ */
297
+ function regrCountExpr(preagg, node) {
298
+ const [x, y] = node.args;
299
+ const n = addStat(preagg, regrCount(x, y), node);
300
+ return { expr: sum(n), name: n };
301
+ }
302
+ /**
303
+ * Generate an expression for calculating sums of residual values for use in
304
+ * covariance and regression queries. Only values corresponding to non-null
305
+ * (x, y) pairs are included. This method uses mean-centered data to reduce
306
+ * floating point error. As a side effect, this method adds a column for
307
+ * partition-level sums to the input *preagg* object.
308
+ * @param preagg A map of columns (such as
309
+ * sufficient statistics) to pre-aggregate.
310
+ * @param i An index indicating which argument column to sum.
311
+ * @param node The originating aggregate function call.
312
+ * @param avg Global average query generator.
313
+ * @returns An aggregate expression over pre-aggregated dimensions.
314
+ */
315
+ function regrSumExpr(preagg, i, node, avg) {
316
+ const args = node.args;
317
+ const v = args[i];
318
+ const o = args[1 - i];
319
+ const rsum = sum(sub(v, avg(v))).where(isNotNull(o));
320
+ return sum(addStat(preagg, rsum, node));
321
+ }
322
+ /**
323
+ * Generate an expressios for calculating sums of squared residual values for
324
+ * use in covariance and regression queries. Only values corresponding to
325
+ * non-null (x, y) pairs are included. This method uses mean-centered data to
326
+ * reduce floating point error. As a side effect, this method adds a column
327
+ * for partition-level sums to the input *preagg* object.
328
+ * @param preagg A map of columns (such as
329
+ * sufficient statistics) to pre-aggregate.
330
+ * @param i An index indicating which argument column to sum.
331
+ * @param node The originating aggregate function call.
332
+ * @param avg Global average query generator.
333
+ * @returns An aggregate expression over pre-aggregated dimensions.
334
+ */
335
+ function regrSumSqExpr(preagg, i, node, avg) {
336
+ const args = node.args;
337
+ const v = args[i];
338
+ const u = args[1 - i];
339
+ const ssq = sum(pow(sub(v, avg(v)), 2)).where(isNotNull(u));
340
+ return sum(addStat(preagg, ssq, node));
341
+ }
342
+ /**
343
+ * Generate an expression for calculating sums of residual product values for
344
+ * use in covariance and regression queries. Only values corresponding to
345
+ * non-null (x, y) pairs are included. This method uses mean-centered data to
346
+ * reduce floating point error. As a side effect, this method adds a column
347
+ * for partition-level sums to the input *preagg* object.
348
+ * @param preagg A map of columns (such as
349
+ * sufficient statistics) to pre-aggregate.
350
+ * @param node The originating aggregate function call.
351
+ * @param avg Global average query generator.
352
+ * @returns An aggregate expression over pre-aggregated dimensions.
353
+ */
354
+ function regrSumXYExpr(preagg, node, avg) {
355
+ const [y, x] = node.args;
356
+ const sxy = sum(mul(sub(x, avg(x)), sub(y, avg(y))));
357
+ return sum(addStat(preagg, sxy, node));
358
+ }
359
+ /**
360
+ * Generate an expression for the average x value in a regression context.
361
+ * Only values corresponding to non-null (x, y) pairs are included. As a side
362
+ * effect, this method adds columns to the input *preagg* object to track both
363
+ * the count of non-null pairs and partition-level averages.
364
+ * @param preagg A map of columns (such as
365
+ * sufficient statistics) to pre-aggregate.
366
+ * @param node The originating aggregate function call.
367
+ * @returns An aggregate expression over pre-aggregated dimensions.
368
+ */
369
+ function regrAvgXExpr(preagg, node) {
370
+ const [y, x] = node.args;
371
+ const { expr: n, name } = regrCountExpr(preagg, node);
372
+ const a = addStat(preagg, regrAvgX(y, x), node);
373
+ return div(sum(mul(a, name)), n);
374
+ }
375
+ /**
376
+ * Generate an expression for the average y value in a regression context.
377
+ * Only values corresponding to non-null (x, y) pairs are included. As a side
378
+ * effect, this method adds columns to the input *preagg* object to track both
379
+ * the count of non-null pairs and partition-level averages.
380
+ * @param preagg A map of columns (such as
381
+ * sufficient statistics) to pre-aggregate.
382
+ * @param node The originating aggregate function call.
383
+ * @returns An aggregate expression over pre-aggregated dimensions.
384
+ */
385
+ function regrAvgYExpr(preagg, node) {
386
+ const [y, x] = node.args;
387
+ const { expr: n, name } = regrCountExpr(preagg, node);
388
+ const a = addStat(preagg, regrAvgY(y, x), node);
389
+ return div(sum(mul(a, name)), n);
390
+ }
391
+ /**
392
+ * Generate an expression for calculating variance over data dimensions for
393
+ * use in covariance and regression queries. Only values corresponding to
394
+ * non-null (x, y) pairs are included. This method uses mean-centered data to
395
+ * reduce floating point error. As a side effect, this method adds columns
396
+ * for partition-level count and sums to the input *preagg* object.
397
+ * @param preagg A map of columns (such as
398
+ * sufficient statistics) to pre-aggregate.
399
+ * @param i The index of the argument to compute the variance for.
400
+ * @param node The originating aggregate function call.
401
+ * @param avg Global average query generator.
402
+ * @returns An aggregate expression for calculating variance
403
+ * over pre-aggregated data dimensions.
404
+ */
405
+ function regrVarExpr(preagg, i, node, avg) {
406
+ const { expr: n } = regrCountExpr(preagg, node);
407
+ const sum = regrSumExpr(preagg, i, node, avg);
408
+ const ssq = regrSumSqExpr(preagg, i, node, avg);
409
+ return sub(ssq, div(pow(sum, 2), n));
410
+ }
411
+ /**
412
+ * Generate an expression for calculating a regression slope. The slope is
413
+ * computed as the covariance divided by the variance of the x variable. As a
414
+ * side effect, this method adds columns for sufficient statistics to the
415
+ * input *preagg* object.
416
+ * @param preagg A map of columns (such as
417
+ * sufficient statistics) to pre-aggregate.
418
+ * @param node The originating aggregate function call.
419
+ * @param avg Global average query generator.
420
+ * @returns An aggregate expression for calculating regression
421
+ * slopes over pre-aggregated data dimensions.
422
+ */
423
+ function regrSlopeExpr(preagg, node, avg) {
424
+ const cov = covarianceExpr(preagg, node, avg, null);
425
+ const varx = regrVarExpr(preagg, 1, node, avg);
426
+ return div(cov, varx);
427
+ }
428
+ /**
429
+ * Generate an expression for calculating a regression intercept. The intercept
430
+ * is derived from the regression slope and average x and y values. As a
431
+ * side effect, this method adds columns for sufficient statistics to the
432
+ * input *preagg* object.
433
+ * @param preagg A map of columns (such as
434
+ * sufficient statistics) to pre-aggregate.
435
+ * @param node The originating aggregate function call.
436
+ * @param avg Global average query generator.
437
+ * @returns An aggregate expression for calculating regression
438
+ * intercepts over pre-aggregated data dimensions.
439
+ */
440
+ function regrInterceptExpr(preagg, node, avg) {
441
+ const ax = regrAvgXExpr(preagg, node);
442
+ const ay = regrAvgYExpr(preagg, node);
443
+ const m = regrSlopeExpr(preagg, node, avg);
444
+ return sub(ay, mul(m, ax));
445
+ }
446
+ //# sourceMappingURL=sufficient-statistics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sufficient-statistics.js","sourceRoot":"","sources":["../../../src/preagg/sufficient-statistics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { DescribeQuery, ExprNode, Query } from '@uwdata/mosaic-sql';
2
+ import type { QueryResult } from './util/query-result.js';
3
+ /** Type for a query request. */
4
+ export interface QueryRequest {
5
+ type: 'exec' | 'json' | 'arrow';
6
+ query: string | Query | DescribeQuery;
7
+ cache?: boolean;
8
+ options?: Record<string, unknown>;
9
+ }
10
+ /** Type for an entry within a query manager. */
11
+ export interface QueryEntry {
12
+ request: QueryRequest;
13
+ result: QueryResult;
14
+ }
15
+ /** Query type accepted by a coordinator. */
16
+ export type QueryType = string | Query | DescribeQuery;
17
+ /** String indicating a JavaScript data type. */
18
+ export type JSType = 'number' | 'date' | 'boolean' | 'string' | 'array' | 'object';
19
+ /** String indicating a requested summary statistic. */
20
+ export type Stat = 'count' | 'nulls' | 'max' | 'min' | 'distinct';
21
+ /** A reference to a database column or expression. */
22
+ export type FieldRef = string | ExprNode;
23
+ /**
24
+ * A request for metadata information about a database column.
25
+ */
26
+ export interface FieldInfoRequest {
27
+ table: string;
28
+ column: FieldRef;
29
+ stats?: Stat[];
30
+ }
31
+ /**
32
+ * A response with metadata information about a database column.
33
+ */
34
+ export interface FieldInfo extends Partial<Record<Stat, number>> {
35
+ table: string;
36
+ column: string;
37
+ sqlType: string;
38
+ type: JSType;
39
+ nullable: boolean;
40
+ }
41
+ /** A result row from a DESCRIBE query. */
42
+ export interface ColumnDescription {
43
+ column_name: string;
44
+ column_type: string;
45
+ null: 'YES' | 'NO';
46
+ }
47
+ /**
48
+ * Interface for components that perform selection activation.
49
+ */
50
+ export interface Activatable {
51
+ /**
52
+ * Activate the selection that this component publishes to.
53
+ */
54
+ activate(): void;
55
+ }
56
+ /**
57
+ * Interface for cache implementations.
58
+ */
59
+ export interface Cache {
60
+ get(key: string): unknown;
61
+ set(key: string, value: unknown): unknown;
62
+ clear(): void;
63
+ }
64
+ /**
65
+ * Interface for logger implementations
66
+ */
67
+ export interface Logger {
68
+ debug(...args: unknown[]): void;
69
+ info(...args: unknown[]): void;
70
+ log(...args: unknown[]): void;
71
+ warn(...args: unknown[]): void;
72
+ error(...args: unknown[]): void;
73
+ group(label?: unknown): void;
74
+ groupCollapsed(label?: unknown): void;
75
+ groupEnd(): void;
76
+ }
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,KAAK,GACL,aAAa,CAAC;AAElB,gDAAgD;AAChD,MAAM,MAAM,MAAM,GACd,QAAQ,GACR,MAAM,GACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb,uDAAuD;AACvD,MAAM,MAAM,IAAI,GACZ,OAAO,GACP,OAAO,GACP,KAAK,GACL,KAAK,GACL,UAAU,CAAC;AAEf,sDAAsD;AACtD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,QAAQ,IAAI,IAAI,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}