@uwdata/mosaic-core 0.21.1 → 0.22.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.
- package/dist/src/preagg/PreAggregator.d.ts +3 -3
- package/dist/src/preagg/PreAggregator.d.ts.map +1 -1
- package/dist/src/preagg/PreAggregator.js +7 -6
- package/dist/src/preagg/PreAggregator.js.map +1 -1
- package/dist/src/preagg/preagg-columns.d.ts +2 -1
- package/dist/src/preagg/preagg-columns.d.ts.map +1 -1
- package/dist/src/preagg/preagg-columns.js +18 -4
- package/dist/src/preagg/preagg-columns.js.map +1 -1
- package/dist/src/util/js-type.d.ts.map +1 -1
- package/dist/src/util/js-type.js +1 -0
- package/dist/src/util/js-type.js.map +1 -1
- package/package.json +6 -6
- package/src/preagg/PreAggregator.ts +9 -9
- package/src/preagg/preagg-columns.ts +22 -6
- package/src/util/js-type.ts +2 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ExprNode, SelectQuery, MaybeArray } from '@uwdata/mosaic-sql';
|
|
1
|
+
import { ExprNode, SelectQuery, MaybeArray, TableRefNode } from '@uwdata/mosaic-sql';
|
|
2
2
|
import type { Coordinator } from '../Coordinator.js';
|
|
3
3
|
import type { MosaicClient } from '../MosaicClient.js';
|
|
4
4
|
import type { Selection } from '../Selection.js';
|
|
@@ -20,7 +20,7 @@ interface ActiveColumnsResult {
|
|
|
20
20
|
predicate?: ActivePredicate;
|
|
21
21
|
}
|
|
22
22
|
interface PreAggregateInfoOptions {
|
|
23
|
-
table:
|
|
23
|
+
table: TableRefNode;
|
|
24
24
|
create: string;
|
|
25
25
|
active: ActiveColumnsResult;
|
|
26
26
|
select: SelectQuery;
|
|
@@ -121,7 +121,7 @@ export declare class PreAggregator {
|
|
|
121
121
|
*/
|
|
122
122
|
export declare class PreAggregateInfo {
|
|
123
123
|
/** The name of the materialized view. */
|
|
124
|
-
table:
|
|
124
|
+
table: TableRefNode;
|
|
125
125
|
/** The SQL query used to generate the materialized view. */
|
|
126
126
|
create: string;
|
|
127
127
|
/** A result promise returned for the materialized view creation query. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreAggregator.d.ts","sourceRoot":"","sources":["../../../src/preagg/PreAggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,WAAW,EAAoB,UAAU,EAAwC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"PreAggregator.d.ts","sourceRoot":"","sources":["../../../src/preagg/PreAggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,WAAW,EAAoB,UAAU,EAAwC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3J,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAa,YAAY,EAAoB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxG,QAAA,MAAM,IAAI;;;CAA+B,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gHAAgH;IAChH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;AAE1E,UAAU,mBAAmB;IAC3B,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACjB,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAU;IAE1B;;;;OAIG;gBACS,WAAW,EAAE,WAAW,EAAE,EACpC,MAAiB,EACjB,OAAc,EACf,GAAE,mBAAwB;IAQ3B;;;;;;OAMG;IACH,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAKzB;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;OAMG;IACH,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAKxB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;;;;;;OAQG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,IAAI,GAAG,gBAAgB,GAAG,OAAO,IAAI,GAAG,IAAI;CAoEjI;AA8LD;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,yCAAyC;IACzC,KAAK,EAAE,YAAY,CAAC;IACpB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAChC;8DAC0D;IAC1D,MAAM,EAAE,mBAAmB,CAAC;IAC5B,+DAA+D;IAC/D,MAAM,EAAE,WAAW,CAAC;IACpB;qEACiE;IACjE,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;gBACS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,uBAAuB;IAStE;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAG,WAAW;CAGxC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TableRefNode } from '@uwdata/mosaic-sql';
|
|
1
2
|
import { Query as QueryBuilder, and, asNode, ceil, collectColumns, createTable, float64, floor, isBetween, int32, mul, round, scaleTransform, sub, isSelectQuery, isAggregateExpression, ColumnNameRefNode } from '@uwdata/mosaic-sql';
|
|
2
3
|
import { preaggColumns } from './preagg-columns.js';
|
|
3
4
|
import { fnv_hash } from '../util/hash.js';
|
|
@@ -269,12 +270,12 @@ function binInterval(scale, pixelSize, bin) {
|
|
|
269
270
|
* @returns Pre-aggregation information.
|
|
270
271
|
*/
|
|
271
272
|
function preaggregateInfo(clientQuery, active, preaggCols, schema) {
|
|
272
|
-
const {
|
|
273
|
+
const { dims, groupby, output, preagg } = preaggCols;
|
|
273
274
|
const { columns } = active;
|
|
274
275
|
// build materialized view construction query
|
|
275
276
|
const query = clientQuery
|
|
276
|
-
.setSelect({ ...preagg, ...columns })
|
|
277
|
-
.groupby(Object.keys(columns));
|
|
277
|
+
.setSelect({ ...groupby, ...preagg, ...columns })
|
|
278
|
+
.groupby(Object.keys(columns ?? {}));
|
|
278
279
|
// ensure active clause columns are selected by subqueries
|
|
279
280
|
const [subq] = query.subqueries;
|
|
280
281
|
if (subq) {
|
|
@@ -290,12 +291,12 @@ function preaggregateInfo(clientQuery, active, preaggCols, schema) {
|
|
|
290
291
|
// generate creation query string and hash id
|
|
291
292
|
const create = query.toString();
|
|
292
293
|
const id = (fnv_hash(create) >>> 0).toString(16);
|
|
293
|
-
const table =
|
|
294
|
+
const table = new TableRefNode([schema, `preagg_${id}`]);
|
|
294
295
|
// generate preaggregate select query
|
|
295
296
|
const select = QueryBuilder
|
|
296
|
-
.select(
|
|
297
|
+
.select(dims, output)
|
|
297
298
|
.from(table)
|
|
298
|
-
.groupby(
|
|
299
|
+
.groupby(dims, Object.keys(groupby))
|
|
299
300
|
.having(having)
|
|
300
301
|
.orderby(order);
|
|
301
302
|
return new PreAggregateInfo({ table, create, active, select });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreAggregator.js","sourceRoot":"","sources":["../../../src/preagg/PreAggregator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PreAggregator.js","sourceRoot":"","sources":["../../../src/preagg/PreAggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ExprNode } from '@uwdata/mosaic-sql';
|
|
2
2
|
import type { MosaicClient } from '../MosaicClient.js';
|
|
3
3
|
export interface PreAggColumnsResult {
|
|
4
|
-
|
|
4
|
+
dims: string[];
|
|
5
|
+
groupby: Record<string, ExprNode>;
|
|
5
6
|
preagg: Record<string, ExprNode>;
|
|
6
7
|
output: Record<string, ExprNode>;
|
|
7
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preagg-columns.d.ts","sourceRoot":"","sources":["../../../src/preagg/preagg-columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,QAAQ,EAAsB,MAAM,oBAAoB,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,MAAM,WAAW,mBAAmB;IAClC,
|
|
1
|
+
{"version":3,"file":"preagg-columns.d.ts","sourceRoot":"","sources":["../../../src/preagg/preagg-columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,QAAQ,EAAsB,MAAM,oBAAoB,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,GAAG,IAAI,CA0E9E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { collectAggregates, FromClauseNode, isAggregateExpression, isSelectQuery, isTableRef, rewrite, sql } from '@uwdata/mosaic-sql';
|
|
1
|
+
import { collectAggregates, FromClauseNode, isAggregateExpression, isColumnRef, isSelectQuery, isTableRef, rewrite, sql } from '@uwdata/mosaic-sql';
|
|
2
2
|
import { sufficientStatistics } from './sufficient-statistics.js';
|
|
3
3
|
/**
|
|
4
4
|
* Determine pre-aggregation columns for a given Mosaic client.
|
|
@@ -25,7 +25,16 @@ export function preaggColumns(client) {
|
|
|
25
25
|
const aggrs = new Map();
|
|
26
26
|
const preagg = {};
|
|
27
27
|
const output = {};
|
|
28
|
-
const
|
|
28
|
+
const dims = []; // selected grouping dimensions
|
|
29
|
+
// groupby entries, these may or may not be selected
|
|
30
|
+
const groupby = {};
|
|
31
|
+
for (const expr of q._groupby) {
|
|
32
|
+
// ignore integer index, as expr will be in select clause
|
|
33
|
+
if (expr.type !== "LITERAL") {
|
|
34
|
+
const alias = isColumnRef(expr) ? expr.column : `${expr}`;
|
|
35
|
+
groupby[alias] = expr;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
29
38
|
// generate a scalar subquery for a global average
|
|
30
39
|
const avg = (ref) => {
|
|
31
40
|
const name = ref.column;
|
|
@@ -41,7 +50,7 @@ export function preaggColumns(client) {
|
|
|
41
50
|
const nodes = collectAggregates(expr);
|
|
42
51
|
if (nodes.length === 0) {
|
|
43
52
|
// if no aggregates, expr is a groupby dimension
|
|
44
|
-
|
|
53
|
+
dims.push(alias);
|
|
45
54
|
preagg[alias] = expr;
|
|
46
55
|
}
|
|
47
56
|
else {
|
|
@@ -63,7 +72,12 @@ export function preaggColumns(client) {
|
|
|
63
72
|
// bail if the query has no aggregates
|
|
64
73
|
if (!aggrs.size)
|
|
65
74
|
return null;
|
|
66
|
-
return {
|
|
75
|
+
return {
|
|
76
|
+
dims,
|
|
77
|
+
groupby,
|
|
78
|
+
preagg,
|
|
79
|
+
output
|
|
80
|
+
};
|
|
67
81
|
}
|
|
68
82
|
/**
|
|
69
83
|
* Identify a shared base (source) query and extract a value from it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preagg-columns.js","sourceRoot":"","sources":["../../../src/preagg/preagg-columns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"preagg-columns.js","sourceRoot":"","sources":["../../../src/preagg/preagg-columns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACpJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AASlE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,IAAI,CAAC,MAAM,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAEzB,kCAAkC;IAClC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,wBAAwB;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,YAAY,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC;QACxD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAa,EAAE,CAAC,CAAC,+BAA+B;IAE1D,oDAAoD;IACpD,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9B,yDAAyD;QACzD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,GAAG,GAAG,CAAC,GAAkB,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAA,eAAe,IAAI,IAAI,GAAG,WAAW,IAAI,IAAI,CAAC;IAC1D,CAAC,CAAC;IAEF,sDAAsD;IACtD,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACxC,iDAAiD;QACjD,sDAAsD;QACtD,IAAI,qBAAqB,CAAC,IAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAElD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAK,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,gDAAgD;YAChD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,UAAU;oBAAE,OAAO,IAAI,CAAC;gBAEjC,4CAA4C;gBAC5C,gDAAgD;gBAChD,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG;oBAAE,OAAO,IAAI,CAAC;gBACtB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACvB,CAAC;YAED,sDAAsD;YACtD,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAK,EAAE,KAAK,CAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO;QACL,IAAI;QACJ,OAAO;QACP,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,OAAO,CACd,KAAY,EACZ,GAA0B;IAE1B,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;IAE9B,eAAe;IACf,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,qCAAqC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-type.d.ts","sourceRoot":"","sources":["../../../src/util/js-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"js-type.d.ts","sourceRoot":"","sources":["../../../src/util/js-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiD3C"}
|
package/dist/src/util/js-type.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-type.js","sourceRoot":"","sources":["../../../src/util/js-type.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,WAAW;QAC5B,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,aAAa,CAAC;QACnB,KAAK,0BAA0B,CAAC;QAChC,KAAK,MAAM,CAAC;QACZ,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC;QAClB;YACE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/D,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"js-type.js","sourceRoot":"","sources":["../../../src/util/js-type.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,WAAW;QAC5B,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,aAAa,CAAC;QACnB,KAAK,0BAA0B,CAAC;QAChC,KAAK,MAAM,CAAC;QACZ,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC;QAClB;YACE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/D,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uwdata/mosaic-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Scalable and extensible linked data views.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mosaic",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"prepublishOnly": "npm run test && npm run lint && tsc --build"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@duckdb/duckdb-wasm": "1.
|
|
36
|
-
"@uwdata/flechette": "^2.
|
|
37
|
-
"@uwdata/mosaic-sql": "^0.
|
|
35
|
+
"@duckdb/duckdb-wasm": "1.32.0",
|
|
36
|
+
"@uwdata/flechette": "^2.3.0",
|
|
37
|
+
"@uwdata/mosaic-sql": "^0.22.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@uwdata/mosaic-duckdb": "^0.
|
|
40
|
+
"@uwdata/mosaic-duckdb": "^0.22.0"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "98e09fca9a7b58c51a46eca56e2c159dc4e544fb"
|
|
43
43
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ExprNode, ScaleOptions, SelectQuery, Query, ExprValue, MaybeArray, FunctionNode, BetweenOpNode, AndNode } from '@uwdata/mosaic-sql';
|
|
1
|
+
import { ExprNode, ScaleOptions, SelectQuery, Query, ExprValue, MaybeArray, FunctionNode, BetweenOpNode, AndNode, TableRefNode } from '@uwdata/mosaic-sql';
|
|
2
2
|
import type { Coordinator } from '../Coordinator.js';
|
|
3
3
|
import type { MosaicClient } from '../MosaicClient.js';
|
|
4
4
|
import type { Selection } from '../Selection.js';
|
|
@@ -25,7 +25,7 @@ interface ActiveColumnsResult {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
interface PreAggregateInfoOptions {
|
|
28
|
-
table:
|
|
28
|
+
table: TableRefNode;
|
|
29
29
|
create: string;
|
|
30
30
|
active: ActiveColumnsResult;
|
|
31
31
|
select: SelectQuery;
|
|
@@ -333,13 +333,13 @@ function preaggregateInfo(
|
|
|
333
333
|
preaggCols: PreAggColumnsResult,
|
|
334
334
|
schema: string
|
|
335
335
|
): PreAggregateInfo {
|
|
336
|
-
const {
|
|
336
|
+
const { dims, groupby, output, preagg } = preaggCols;
|
|
337
337
|
const { columns } = active;
|
|
338
338
|
|
|
339
339
|
// build materialized view construction query
|
|
340
340
|
const query = clientQuery
|
|
341
|
-
.setSelect({ ...preagg, ...columns })
|
|
342
|
-
.groupby(Object.keys(columns
|
|
341
|
+
.setSelect({ ...groupby, ...preagg, ...columns })
|
|
342
|
+
.groupby(Object.keys(columns ?? {}));
|
|
343
343
|
|
|
344
344
|
// ensure active clause columns are selected by subqueries
|
|
345
345
|
const [subq] = query.subqueries;
|
|
@@ -358,13 +358,13 @@ function preaggregateInfo(
|
|
|
358
358
|
// generate creation query string and hash id
|
|
359
359
|
const create = query.toString();
|
|
360
360
|
const id = (fnv_hash(create) >>> 0).toString(16);
|
|
361
|
-
const table =
|
|
361
|
+
const table = new TableRefNode([schema, `preagg_${id}`]);
|
|
362
362
|
|
|
363
363
|
// generate preaggregate select query
|
|
364
364
|
const select = QueryBuilder
|
|
365
|
-
.select(
|
|
365
|
+
.select(dims, output)
|
|
366
366
|
.from(table)
|
|
367
|
-
.groupby(
|
|
367
|
+
.groupby(dims, Object.keys(groupby))
|
|
368
368
|
.having(having)
|
|
369
369
|
.orderby(order);
|
|
370
370
|
|
|
@@ -420,7 +420,7 @@ function isAggregateQuery(query: SelectQuery): boolean {
|
|
|
420
420
|
*/
|
|
421
421
|
export class PreAggregateInfo {
|
|
422
422
|
/** The name of the materialized view. */
|
|
423
|
-
table:
|
|
423
|
+
table: TableRefNode;
|
|
424
424
|
/** The SQL query used to generate the materialized view. */
|
|
425
425
|
create: string;
|
|
426
426
|
/** A result promise returned for the materialized view creation query. */
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { AggregateNode, ColumnRefNode, ExprNode, Query, SelectQuery } from '@uwdata/mosaic-sql';
|
|
2
2
|
import type { MosaicClient } from '../MosaicClient.js';
|
|
3
|
-
import { collectAggregates, FromClauseNode, isAggregateExpression, isSelectQuery, isTableRef, rewrite, sql } from '@uwdata/mosaic-sql';
|
|
3
|
+
import { collectAggregates, FromClauseNode, isAggregateExpression, isColumnRef, isSelectQuery, isTableRef, rewrite, sql } from '@uwdata/mosaic-sql';
|
|
4
4
|
import { sufficientStatistics } from './sufficient-statistics.js';
|
|
5
5
|
|
|
6
6
|
export interface PreAggColumnsResult {
|
|
7
|
-
|
|
7
|
+
dims: string[];
|
|
8
|
+
groupby: Record<string, ExprNode>;
|
|
8
9
|
preagg: Record<string, ExprNode>;
|
|
9
10
|
output: Record<string, ExprNode>;
|
|
10
11
|
}
|
|
@@ -34,7 +35,17 @@ export function preaggColumns(client: MosaicClient): PreAggColumnsResult | null
|
|
|
34
35
|
const aggrs = new Map<AggregateNode, ExprNode>();
|
|
35
36
|
const preagg: Record<string, ExprNode> = {};
|
|
36
37
|
const output: Record<string, ExprNode> = {};
|
|
37
|
-
const
|
|
38
|
+
const dims: string[] = []; // selected grouping dimensions
|
|
39
|
+
|
|
40
|
+
// groupby entries, these may or may not be selected
|
|
41
|
+
const groupby: Record<string, ExprNode> = {};
|
|
42
|
+
for (const expr of q._groupby) {
|
|
43
|
+
// ignore integer index, as expr will be in select clause
|
|
44
|
+
if (expr.type !== "LITERAL") {
|
|
45
|
+
const alias = isColumnRef(expr) ? expr.column : `${expr}`;
|
|
46
|
+
groupby[alias] = expr;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
38
49
|
|
|
39
50
|
// generate a scalar subquery for a global average
|
|
40
51
|
const avg = (ref: ColumnRefNode) => {
|
|
@@ -52,8 +63,8 @@ export function preaggColumns(client: MosaicClient): PreAggColumnsResult | null
|
|
|
52
63
|
const nodes = collectAggregates(expr!);
|
|
53
64
|
if (nodes.length === 0) {
|
|
54
65
|
// if no aggregates, expr is a groupby dimension
|
|
55
|
-
|
|
56
|
-
preagg[alias] = expr
|
|
66
|
+
dims.push(alias);
|
|
67
|
+
preagg[alias] = expr;
|
|
57
68
|
} else {
|
|
58
69
|
for (const node of nodes) {
|
|
59
70
|
// bail if distinct aggregate
|
|
@@ -74,7 +85,12 @@ export function preaggColumns(client: MosaicClient): PreAggColumnsResult | null
|
|
|
74
85
|
// bail if the query has no aggregates
|
|
75
86
|
if (!aggrs.size) return null;
|
|
76
87
|
|
|
77
|
-
return {
|
|
88
|
+
return {
|
|
89
|
+
dims,
|
|
90
|
+
groupby,
|
|
91
|
+
preagg,
|
|
92
|
+
output
|
|
93
|
+
};
|
|
78
94
|
}
|
|
79
95
|
|
|
80
96
|
/**
|
package/src/util/js-type.ts
CHANGED
|
@@ -26,6 +26,7 @@ export function jsType(type: string): JSType {
|
|
|
26
26
|
case 'TIMESTAMPTZ':
|
|
27
27
|
case 'TIMESTAMP WITH TIME ZONE':
|
|
28
28
|
case 'TIME':
|
|
29
|
+
case 'TIMESTAMP_MS':
|
|
29
30
|
case 'TIMESTAMP_NS':
|
|
30
31
|
return 'date';
|
|
31
32
|
case 'BOOLEAN':
|
|
@@ -54,4 +55,4 @@ export function jsType(type: string): JSType {
|
|
|
54
55
|
}
|
|
55
56
|
throw new Error(`Unsupported type: ${type}`);
|
|
56
57
|
}
|
|
57
|
-
}
|
|
58
|
+
}
|