@chrismo/superkit 1.0.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/LICENSE.txt +29 -0
- package/README.md +26 -0
- package/dist/cli/pager.d.ts +6 -0
- package/dist/cli/pager.d.ts.map +1 -0
- package/dist/cli/pager.js +21 -0
- package/dist/cli/pager.js.map +1 -0
- package/dist/cli/skdoc.d.ts +3 -0
- package/dist/cli/skdoc.d.ts.map +1 -0
- package/dist/cli/skdoc.js +42 -0
- package/dist/cli/skdoc.js.map +1 -0
- package/dist/cli/skgrok.d.ts +3 -0
- package/dist/cli/skgrok.d.ts.map +1 -0
- package/dist/cli/skgrok.js +21 -0
- package/dist/cli/skgrok.js.map +1 -0
- package/dist/cli/skops.d.ts +3 -0
- package/dist/cli/skops.d.ts.map +1 -0
- package/dist/cli/skops.js +32 -0
- package/dist/cli/skops.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/docs.d.ts +11 -0
- package/dist/lib/docs.d.ts.map +1 -0
- package/dist/lib/docs.js +29 -0
- package/dist/lib/docs.js.map +1 -0
- package/dist/lib/expert-sections.d.ts +32 -0
- package/dist/lib/expert-sections.d.ts.map +1 -0
- package/dist/lib/expert-sections.js +130 -0
- package/dist/lib/expert-sections.js.map +1 -0
- package/dist/lib/grok.d.ts +15 -0
- package/dist/lib/grok.d.ts.map +1 -0
- package/dist/lib/grok.js +57 -0
- package/dist/lib/grok.js.map +1 -0
- package/dist/lib/help.d.ts +20 -0
- package/dist/lib/help.d.ts.map +1 -0
- package/dist/lib/help.js +163 -0
- package/dist/lib/help.js.map +1 -0
- package/dist/lib/recipes.d.ts +29 -0
- package/dist/lib/recipes.d.ts.map +1 -0
- package/dist/lib/recipes.js +133 -0
- package/dist/lib/recipes.js.map +1 -0
- package/dist/superkit.tar.gz +0 -0
- package/docs/grok-patterns.sup +89 -0
- package/docs/recipes/array.md +66 -0
- package/docs/recipes/array.spq +31 -0
- package/docs/recipes/character.md +110 -0
- package/docs/recipes/character.spq +57 -0
- package/docs/recipes/escape.md +159 -0
- package/docs/recipes/escape.spq +102 -0
- package/docs/recipes/format.md +51 -0
- package/docs/recipes/format.spq +24 -0
- package/docs/recipes/index.md +23 -0
- package/docs/recipes/integer.md +101 -0
- package/docs/recipes/integer.spq +53 -0
- package/docs/recipes/records.md +84 -0
- package/docs/recipes/records.spq +61 -0
- package/docs/recipes/string.md +177 -0
- package/docs/recipes/string.spq +105 -0
- package/docs/superdb-expert.md +929 -0
- package/docs/tutorials/bash_to_sup.md +123 -0
- package/docs/tutorials/chess-tiebreaks.md +233 -0
- package/docs/tutorials/debug.md +439 -0
- package/docs/tutorials/fork_for_window.md +296 -0
- package/docs/tutorials/grok.md +166 -0
- package/docs/tutorials/index.md +10 -0
- package/docs/tutorials/joins.md +79 -0
- package/docs/tutorials/moar_subqueries.md +35 -0
- package/docs/tutorials/subqueries.md +236 -0
- package/docs/tutorials/sup_to_bash.md +164 -0
- package/docs/tutorials/super_db_update.md +34 -0
- package/docs/tutorials/unnest.md +113 -0
- package/docs/zq-to-super-upgrades.md +549 -0
- package/package.json +46 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Upgrade Guide"
|
|
3
|
+
name: zq-to-super-upgrades
|
|
4
|
+
description: "Migration guide from zq to SuperDB. Covers all breaking changes and syntax updates."
|
|
5
|
+
layout: default
|
|
6
|
+
nav_order: 3
|
|
7
|
+
superdb_version: "0.3.0"
|
|
8
|
+
last_updated: "2026-03-27"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Upgrading zq to super
|
|
12
|
+
|
|
13
|
+
SuperDB Version 0.3.0
|
|
14
|
+
|
|
15
|
+
This guide covers all breaking changes between zq and the current SuperDB
|
|
16
|
+
release.
|
|
17
|
+
|
|
18
|
+
## Quick Reference
|
|
19
|
+
|
|
20
|
+
This table covers ALL breaking changes. Complex items reference detailed sections below.
|
|
21
|
+
|
|
22
|
+
| Category | zq | super |
|
|
23
|
+
|------------------|-----------------------------|------------------------------------------|
|
|
24
|
+
| Keyword | `yield` | `values` |
|
|
25
|
+
| Function | `parse_zson` | `parse_sup` |
|
|
26
|
+
| Function | `func` | `fn` |
|
|
27
|
+
| Operator | `over` | `unnest` |
|
|
28
|
+
| Operator def | `op name(a, b):` | `op name a, b:` |
|
|
29
|
+
| Operator call | `name(x, y)` | `name x, y` |
|
|
30
|
+
| Switch | `-z` / `-Z` | `-s` / `-S` |
|
|
31
|
+
| Switch | `-f text` | `-f line` |
|
|
32
|
+
| Switch | (implicit) | `-c` required before query |
|
|
33
|
+
| Comments | `//` | `--` or `/* */` |
|
|
34
|
+
| Regexp | `/pattern/` | `'pattern'` (string) |
|
|
35
|
+
| Cast | `type(value)` | `value::type` |
|
|
36
|
+
| Agg filter | `count() where x` | `count() filter (x)` |
|
|
37
|
+
| Indexing | 0-based | 0-based & 1-based (see Indexing section) |
|
|
38
|
+
| Scoped unnest | `over x => (...)` | `unnest x into (...)` |
|
|
39
|
+
| Unnest with | `over a with b` | `unnest {b,a}` (see section) |
|
|
40
|
+
| grep | `grep(/pat/)` | `grep('pat', this)` |
|
|
41
|
+
| is() | `is(<type>)` | `is(this, <type>)` |
|
|
42
|
+
| nest_dotted | `nest_dotted()` | `nest_dotted(this)` |
|
|
43
|
+
| Lateral subquery | `{ a: (subquery) }` | `{ a: [subquery] }` (see section) |
|
|
44
|
+
| Nested FROM | `from (from x)` | `select * from (select * from x)` |
|
|
45
|
+
| Streaming agg | `put x:=sum(y)` | Removed (see section) |
|
|
46
|
+
| Functions | `crop/fill/fit/order/shape` | Removed — use cast |
|
|
47
|
+
| Globs | `grep(foo*)` | Removed — use regex |
|
|
48
|
+
| String concat | `"a" + "b"` | `f'{a}{b}'`, `a \|\| b`, or `concat` |
|
|
49
|
+
| count type | returns `uint64` | returns `int64` |
|
|
50
|
+
| Dynamic from | `from pool` | `from f'{pool}'` (see section) |
|
|
51
|
+
| BSUP format | BSUP v1 | BSUP v2 (v1 no longer readable) |
|
|
52
|
+
| collect/union | preserves all errors | drops `error("quiet")` values |
|
|
53
|
+
| concat/f-strings | errors propagate | `null` values ignored |
|
|
54
|
+
|
|
55
|
+
## CLI Changes
|
|
56
|
+
|
|
57
|
+
### The `-c` switch is now required
|
|
58
|
+
|
|
59
|
+
`super` requires a `-c` switch before any query string. `zq` accepted the query
|
|
60
|
+
string as a positional argument.
|
|
61
|
+
|
|
62
|
+
**OLD:**
|
|
63
|
+
```bash
|
|
64
|
+
echo '{"a":1}' | zq 'yield a' -
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**NEW:**
|
|
68
|
+
```bash
|
|
69
|
+
echo '{"a":1}' | super -c 'values a' -
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### The `-c` switch must immediately precede the query string
|
|
73
|
+
|
|
74
|
+
The query must come directly after `-c`. Other flags go before `-c`.
|
|
75
|
+
|
|
76
|
+
**CORRECT:**
|
|
77
|
+
```bash
|
|
78
|
+
echo '{"a":1}' | super -s -c 'values a' -
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**INCORRECT:**
|
|
82
|
+
```bash
|
|
83
|
+
-- This is ILLEGAL - flags cannot go between -c and the query
|
|
84
|
+
echo '{"a":1}' | super -c -s 'values a' -
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### When there is no query, do NOT use `-c`
|
|
88
|
+
|
|
89
|
+
If you're just reformatting data without a query, omit `-c` entirely.
|
|
90
|
+
|
|
91
|
+
**OLD:**
|
|
92
|
+
```bash
|
|
93
|
+
zq -j input.json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**NEW:**
|
|
97
|
+
```bash
|
|
98
|
+
super -j input.json
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**INCORRECT:**
|
|
102
|
+
```bash
|
|
103
|
+
-- This is ILLEGAL - -c requires a query string to follow it
|
|
104
|
+
super -c -j input.json
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Output format switches
|
|
108
|
+
|
|
109
|
+
- `-f text` → `-f line`
|
|
110
|
+
- `-z` → `-s` (line-oriented Super JSON)
|
|
111
|
+
- `-Z` → `-S` (formatted Super JSON)
|
|
112
|
+
|
|
113
|
+
### Comments
|
|
114
|
+
|
|
115
|
+
zq used `//` for single-line comments. SuperDB uses PostgreSQL-compatible syntax:
|
|
116
|
+
- `--` for single-line comments
|
|
117
|
+
- `/* ... */` for multi-line comments
|
|
118
|
+
|
|
119
|
+
## Simple Renames
|
|
120
|
+
|
|
121
|
+
### yield → values
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
-- OLD
|
|
125
|
+
zq 'yield {a:1}'
|
|
126
|
+
|
|
127
|
+
-- NEW
|
|
128
|
+
super -c 'values {a:1}'
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### parse_zson → parse_sup
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
-- OLD
|
|
135
|
+
zq 'parse_zson(s)'
|
|
136
|
+
|
|
137
|
+
-- NEW
|
|
138
|
+
super -c 'parse_sup(s)'
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### func → fn
|
|
142
|
+
|
|
143
|
+
As of [commit aab15e0d](https://github.com/brimdata/super/commit/aab15e0d):
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
-- OLD
|
|
147
|
+
func double(x): ( x * 2 )
|
|
148
|
+
|
|
149
|
+
-- NEW
|
|
150
|
+
fn double(x): ( x * 2 )
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### over → unnest (basic usage)
|
|
154
|
+
|
|
155
|
+
Simple uses are a direct replacement:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
-- OLD
|
|
159
|
+
zq 'yield [1,2,3] | over this'
|
|
160
|
+
|
|
161
|
+
-- NEW
|
|
162
|
+
super -c 'values [1,2,3] | unnest this'
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Behavioral Changes
|
|
166
|
+
|
|
167
|
+
### Indexing is 0-based (with pragma for 1-based)
|
|
168
|
+
|
|
169
|
+
As of [PR 6348](https://github.com/brimdata/super/pull/6348) on Nov 10, 2025,
|
|
170
|
+
0-based indexing is the default. Use `pragma index_base = 1` for SQL-style
|
|
171
|
+
1-based indexing when needed.
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
-- 0-based indexing (default)
|
|
175
|
+
super -s -c "values ['a','b','c'][0]"
|
|
176
|
+
"a"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
-- 1-based indexing via pragma
|
|
181
|
+
super -s -c "
|
|
182
|
+
pragma index_base = 1
|
|
183
|
+
values ['a','b','c'][1]
|
|
184
|
+
"
|
|
185
|
+
"a"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
The pragma affects array/string indexing, slicing, and functions like `SUBSTRING()`.
|
|
189
|
+
|
|
190
|
+
### unnest with `into` (formerly `=>`)
|
|
191
|
+
|
|
192
|
+
`over this => (...)` becomes `unnest this into (...)`:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
-- OLD
|
|
196
|
+
zq 'over arr => ( yield this * 2 )'
|
|
197
|
+
|
|
198
|
+
-- NEW
|
|
199
|
+
super -c 'unnest arr into ( values this * 2 )'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### unnest with multiple values (formerly `with`)
|
|
203
|
+
|
|
204
|
+
`over a with b => (...)` becomes `unnest {b,a} into (...)`.
|
|
205
|
+
|
|
206
|
+
**Warning:** This has behavioral changes. Inside the parentheses, `this` used to
|
|
207
|
+
be just `a` in zq, but now `this` is the record `{b,a}` in super.
|
|
208
|
+
|
|
209
|
+
### grep requires explicit `this` argument
|
|
210
|
+
|
|
211
|
+
As of [PR 6115](https://github.com/brimdata/super/pull/6115) on Aug 15, 2025:
|
|
212
|
+
- Inline regexp (`/.../`) syntax removed — use strings
|
|
213
|
+
- Globs no longer supported in grep
|
|
214
|
+
- `this` must be passed explicitly
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
-- OLD (no longer works)
|
|
218
|
+
zq -z "grep(/a*b/,s)"
|
|
219
|
+
zq -z "yield ['a','b'] | grep(/b/)"
|
|
220
|
+
|
|
221
|
+
-- NEW
|
|
222
|
+
super -s -c "grep('a.*b', s)"
|
|
223
|
+
super -s -c "values ['a','b'] | grep('b', this)"
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### is and nest_dotted require explicit `this`
|
|
227
|
+
|
|
228
|
+
As of [commit 5075037c](https://github.com/brimdata/super/commit/5075037c) on Aug 27, 2025:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
-- OLD (no longer works)
|
|
232
|
+
zq -z "yield 2 | is(<int64>)"
|
|
233
|
+
|
|
234
|
+
-- NEW
|
|
235
|
+
super -s -c "values 2 | is(this, <int64>)"
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
`nest_dotted` follows the same pattern.
|
|
239
|
+
|
|
240
|
+
### Cast syntax changes
|
|
241
|
+
|
|
242
|
+
As of [commit ec1c5eee](https://github.com/brimdata/super/commit/ec1c5eee) on Aug 28, 2025:
|
|
243
|
+
|
|
244
|
+
Function-style casting (`type(value)`) is no longer supported. Use `::` casting:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
-- OLD (no longer works)
|
|
248
|
+
zq -z "{a:time('2025-08-28T12:00:00Z')}"
|
|
249
|
+
|
|
250
|
+
-- NEW (preferred)
|
|
251
|
+
super -s -c "{a:'2025-08-28T12:00:00Z'::time}"
|
|
252
|
+
{a:2025-08-28T12:00:00Z}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Alternative syntaxes (legal but not preferred):
|
|
256
|
+
- `cast(value, <type>)`
|
|
257
|
+
- `CAST(value AS type)`
|
|
258
|
+
|
|
259
|
+
As of 0.51029, `::` cast and `CAST AS` only accept types, not expressions.
|
|
260
|
+
|
|
261
|
+
### Lateral subqueries require array wrapping
|
|
262
|
+
|
|
263
|
+
As of [PR 6100](https://github.com/brimdata/super/pull/6100) and
|
|
264
|
+
[PR 6243](https://github.com/brimdata/super/pull/6243):
|
|
265
|
+
|
|
266
|
+
Lateral subqueries that produce multiple values must be wrapped in `[...]`:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
-- OLD (no longer works - produces error)
|
|
270
|
+
super -s -c "[3,2,1] | { a: ( unnest this | values this ) }"
|
|
271
|
+
{a:error("query expression produced multiple values (consider [subquery])")}
|
|
272
|
+
|
|
273
|
+
-- NEW
|
|
274
|
+
super -s -c "[3,2,1] | { a: [unnest this | values this] }"
|
|
275
|
+
{a:[3,2,1]}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### User-defined operator syntax
|
|
279
|
+
|
|
280
|
+
As of [PR 6181](https://github.com/brimdata/super/pull/6181) on Sep 2, 2025:
|
|
281
|
+
|
|
282
|
+
**Declaration:** Remove parentheses around parameters.
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
-- OLD
|
|
286
|
+
op myop(a, b): ( ... )
|
|
287
|
+
|
|
288
|
+
-- NEW
|
|
289
|
+
op myop a, b: ( ... )
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**Invocation:** Use space-separated arguments (or `call` keyword).
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
-- OLD
|
|
296
|
+
myop(x, y)
|
|
297
|
+
|
|
298
|
+
-- NEW
|
|
299
|
+
myop x, y
|
|
300
|
+
-- or: call myop x, y
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### FROM vs from separation
|
|
304
|
+
|
|
305
|
+
As of [PR 6405](https://github.com/brimdata/super/pull/6405) on Dec 1, 2025:
|
|
306
|
+
|
|
307
|
+
Pipe-operator `from` and SQL `FROM` clause are now distinct. Relational FROM
|
|
308
|
+
requires a SELECT clause:
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
-- OLD (no longer works)
|
|
312
|
+
super -c 'from ( from a )'
|
|
313
|
+
|
|
314
|
+
-- NEW
|
|
315
|
+
super -c 'select * from ( select * from a )'
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### String concatenation with `+` removed
|
|
319
|
+
|
|
320
|
+
As of [PR 6486](https://github.com/brimdata/super/pull/6486) on Jan 5, 2026:
|
|
321
|
+
|
|
322
|
+
The `+` operator no longer concatenates strings. Use f-string interpolation
|
|
323
|
+
(preferred), `||`, or `concat()`:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
-- OLD (no longer works)
|
|
327
|
+
super -s -c "values 'hello' + ' world'"
|
|
328
|
+
|
|
329
|
+
-- Preferred (f-string interpolation, also worked in zq)
|
|
330
|
+
super -s -c "values f'{'hello'} {'world'}'"
|
|
331
|
+
"hello world"
|
|
332
|
+
|
|
333
|
+
-- Also works
|
|
334
|
+
super -s -c "values 'hello' || ' world'"
|
|
335
|
+
"hello world"
|
|
336
|
+
|
|
337
|
+
-- Also works
|
|
338
|
+
super -s -c "values concat('hello', ' world')"
|
|
339
|
+
"hello world"
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Aggregate filter clause
|
|
343
|
+
|
|
344
|
+
As of [PR 6465](https://github.com/brimdata/super/pull/6465) on Dec 23, 2025:
|
|
345
|
+
|
|
346
|
+
The `where` clause on aggregates changed to SQL-standard `filter`:
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
-- OLD
|
|
350
|
+
count() where grep('bar', this)
|
|
351
|
+
|
|
352
|
+
-- NEW
|
|
353
|
+
count() filter (grep('bar', this))
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Dynamic from requires f-string syntax
|
|
357
|
+
|
|
358
|
+
As of [PR 6450](https://github.com/brimdata/super/pull/6450) on Dec 16, 2025:
|
|
359
|
+
|
|
360
|
+
Bare dynamic `from` no longer works. Use f-string interpolation:
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
-- OLD (no longer works)
|
|
364
|
+
from pool_name
|
|
365
|
+
|
|
366
|
+
-- NEW
|
|
367
|
+
from f'{pool_name}'
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
Note: f-strings are general-purpose string interpolation and work anywhere a
|
|
371
|
+
string is accepted, not just in `from` clauses.
|
|
372
|
+
|
|
373
|
+
## Removed Features
|
|
374
|
+
|
|
375
|
+
### Streaming aggregation functions
|
|
376
|
+
|
|
377
|
+
As of [PR 6355](https://github.com/brimdata/super/pull/6355), per-record
|
|
378
|
+
cumulative aggregations are removed.
|
|
379
|
+
|
|
380
|
+
**Row numbering** — use the `count` operator:
|
|
381
|
+
|
|
382
|
+
```bash
|
|
383
|
+
-- OLD: put row_num:=count(this)
|
|
384
|
+
-- NEW:
|
|
385
|
+
super -s -c 'values {a:1},{b:2},{c:3} | count | {row:count,...that}'
|
|
386
|
+
{row:1,a:1}
|
|
387
|
+
{row:2,b:2}
|
|
388
|
+
{row:3,c:3}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**Other aggregations** (`sum`, `avg`, `min`, `max`, `collect`) — use `aggregate`,
|
|
392
|
+
but note it collapses all records:
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
super -s -c 'values {v:10},{v:20},{v:30} | aggregate total:=sum(v)'
|
|
396
|
+
{total:60}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
**No replacement exists** for progressive patterns like streaming `collect`:
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
-- OLD (no longer works): yield 1,2,3 | yield collect(this)
|
|
403
|
+
-- produced: [1], [1,2], [1,2,3]
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
Grouped aggregation (`collect(x) by key`) still works.
|
|
407
|
+
|
|
408
|
+
### Removed functions
|
|
409
|
+
|
|
410
|
+
The functions `crop()`, `fill()`, `fit()`, `order()`, and `shape()` have been
|
|
411
|
+
removed. Use cast instead — see [Cast syntax changes](#cast-syntax-changes).
|
|
412
|
+
|
|
413
|
+
### Inline regexp syntax
|
|
414
|
+
|
|
415
|
+
`/pattern/` is no longer supported. Use string patterns: `'pattern'`
|
|
416
|
+
|
|
417
|
+
### Globs in grep
|
|
418
|
+
|
|
419
|
+
Globs are no longer supported in the `grep` function. Use regex patterns.
|
|
420
|
+
|
|
421
|
+
## Type Changes
|
|
422
|
+
|
|
423
|
+
### Count functions return int64
|
|
424
|
+
|
|
425
|
+
As of Dec 24-29, 2025 ([PR 6466](https://github.com/brimdata/super/pull/6466),
|
|
426
|
+
[PR 6467](https://github.com/brimdata/super/pull/6467),
|
|
427
|
+
[PR 6472](https://github.com/brimdata/super/pull/6472)):
|
|
428
|
+
|
|
429
|
+
These now return `int64` instead of `uint64`:
|
|
430
|
+
- `count()` function
|
|
431
|
+
- `dcount()` function
|
|
432
|
+
- `uniq` operator count field
|
|
433
|
+
- `count` operator output field
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
-- OLD: returned uint64
|
|
437
|
+
super -s -c "values 1,2,3 | aggregate cnt:=count() | typeof(cnt)"
|
|
438
|
+
<uint64>
|
|
439
|
+
|
|
440
|
+
-- NEW: returns int64
|
|
441
|
+
super -s -c "values 1,2,3 | aggregate cnt:=count() | typeof(cnt)"
|
|
442
|
+
<int64>
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
## Changes in v0.3.0
|
|
446
|
+
|
|
447
|
+
### BSUP v2 format (breaking)
|
|
448
|
+
|
|
449
|
+
As of v0.3.0, the BSUP binary format has been advanced to v2. `super` will no
|
|
450
|
+
longer read BSUP v1 format as input. If you have valuable data stored in BSUP v1
|
|
451
|
+
files, convert them using a v0.2.0 binary before upgrading:
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
# Convert v1 BSUP to SUP (using old binary), then back to v2 BSUP (using new binary)
|
|
455
|
+
super-0.2.0 -s data.bsup > data.sup
|
|
456
|
+
super -f bsup data.sup > data-v2.bsup
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### collect and union drop quiet errors
|
|
460
|
+
|
|
461
|
+
In `collect` and `union` aggregate functions, `error("quiet")` values are now
|
|
462
|
+
dropped. `error("missing")` values are still preserved.
|
|
463
|
+
|
|
464
|
+
### null values ignored in concat and f-strings
|
|
465
|
+
|
|
466
|
+
The `concat` function and f-string interpolation now silently ignore `null`
|
|
467
|
+
values instead of propagating them.
|
|
468
|
+
|
|
469
|
+
### New features in v0.3.0
|
|
470
|
+
|
|
471
|
+
#### `debug` operator
|
|
472
|
+
|
|
473
|
+
Tap into a pipeline to emit debugging values to stderr without affecting the
|
|
474
|
+
main output. Supports an optional expression and filter clause:
|
|
475
|
+
|
|
476
|
+
```
|
|
477
|
+
values 1,2,3 | debug f'val={this}' filter (this > 1) | pass
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Debug output goes to stderr in SUP format. See the `tutorial:debug` topic for
|
|
481
|
+
detailed usage including `fork`-based patterns and subquery aggregation.
|
|
482
|
+
|
|
483
|
+
#### `infer` operator
|
|
484
|
+
|
|
485
|
+
Samples input and auto-detects native types for string values, casting them
|
|
486
|
+
to the inferred type. Useful for cleaning up CSV or other string-heavy data:
|
|
487
|
+
|
|
488
|
+
```
|
|
489
|
+
infer [ <limit> ]
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
Candidate types: `int64`, `float64`, `ip`, `net`, `time`, `bool`. Default
|
|
493
|
+
sample size is 100 records; set to 0 to analyze all input.
|
|
494
|
+
|
|
495
|
+
#### `defuse` and `unblend` functions
|
|
496
|
+
|
|
497
|
+
`defuse(val)` reverses the effects of `fuse` — converts fusion types back to
|
|
498
|
+
their original types by downcasting union values to their subtype equivalent.
|
|
499
|
+
|
|
500
|
+
`unblend(val)` reverses the effects of `blend` — removes union types and
|
|
501
|
+
eliminates optional fields without values from records.
|
|
502
|
+
|
|
503
|
+
#### Other new features
|
|
504
|
+
|
|
505
|
+
- **`db vacate` command** — vacate database pools
|
|
506
|
+
- **Optional fields in record expressions** — record fields can now be marked
|
|
507
|
+
optional with `?` syntax
|
|
508
|
+
- **Fusion types** — new type system feature for complete type fusion
|
|
509
|
+
- **Named types in `upcast` function** — upcast now supports named types
|
|
510
|
+
|
|
511
|
+
## Formatting Conventions
|
|
512
|
+
|
|
513
|
+
When performing upgrades, follow these formatting conventions for consistency:
|
|
514
|
+
|
|
515
|
+
### Use double quotes for query strings
|
|
516
|
+
|
|
517
|
+
Single-quoted strings are valid SuperDB syntax, so use double quotes for the
|
|
518
|
+
shell query string to avoid confusion:
|
|
519
|
+
|
|
520
|
+
```bash
|
|
521
|
+
-- GOOD
|
|
522
|
+
super -s -c "values 'hello'"
|
|
523
|
+
|
|
524
|
+
-- AVOID (works but confusing)
|
|
525
|
+
super -s -c 'values "hello"'
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
### Multi-line query formatting
|
|
529
|
+
|
|
530
|
+
For multi-line queries, use this format:
|
|
531
|
+
|
|
532
|
+
```bash
|
|
533
|
+
super -j -c "
|
|
534
|
+
unnest this
|
|
535
|
+
| cut Id,Name
|
|
536
|
+
" -
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
- Opening double-quote ends the first line
|
|
540
|
+
- Query content starts on new line, indented 2 spaces from `super`
|
|
541
|
+
- Closing double-quote on its own line, aligned with `super`
|
|
542
|
+
|
|
543
|
+
### Switch ordering
|
|
544
|
+
|
|
545
|
+
Place `-c` last, with all other switches before it:
|
|
546
|
+
|
|
547
|
+
```bash
|
|
548
|
+
super -s -f json -c "values this" input.json
|
|
549
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@chrismo/superkit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "SuperDB toolkit — docs, recipes, grok patterns, and CLI tools for the super binary",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"skdoc": "dist/cli/skdoc.js",
|
|
10
|
+
"skgrok": "dist/cli/skgrok.js",
|
|
11
|
+
"skops": "dist/cli/skops.js"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"docs"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"dev": "tsc --watch",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"test:watch": "vitest",
|
|
22
|
+
"prepublishOnly": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/chrismo/superkit.git"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"superdb",
|
|
30
|
+
"supersql",
|
|
31
|
+
"data",
|
|
32
|
+
"query",
|
|
33
|
+
"cli"
|
|
34
|
+
],
|
|
35
|
+
"author": "chrismo",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^20.0.0",
|
|
39
|
+
"shiki": "^3.2.0",
|
|
40
|
+
"typescript": "^5.0.0",
|
|
41
|
+
"vitest": "^4.0.18"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18.0.0"
|
|
45
|
+
}
|
|
46
|
+
}
|