@dartfx/n8n-nodes-qsv 0.2.1 → 0.26.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/README.md +4 -0
- package/dist/nodes/Qsv/Qsv.node.js +2 -2
- package/dist/nodes/Qsv/actions/executeCount.js +0 -3
- package/dist/nodes/Qsv/actions/executeGeocode.js +15 -0
- package/dist/nodes/Qsv/actions/executeGeoconvert.js +3 -0
- package/dist/nodes/Qsv/actions/executeJoinp.js +0 -3
- package/dist/nodes/Qsv/actions/executePivotp.js +3 -0
- package/dist/nodes/Qsv/actions/executeSqlp.js +0 -3
- package/dist/nodes/Qsv/actions/executeValidate.js +3 -0
- package/dist/nodes/Qsv/actions/executeViz.js +12 -0
- package/dist/nodes/Qsv/descriptions/CatDescription.js +1 -1
- package/dist/nodes/Qsv/descriptions/CountDescription.js +2 -9
- package/dist/nodes/Qsv/descriptions/DescribegptDescription.js +1 -1
- package/dist/nodes/Qsv/descriptions/ExcelDescription.js +2 -2
- package/dist/nodes/Qsv/descriptions/FrequencyDescription.js +3 -3
- package/dist/nodes/Qsv/descriptions/GeocodeDescription.js +55 -16
- package/dist/nodes/Qsv/descriptions/GeoconvertDescription.js +8 -1
- package/dist/nodes/Qsv/descriptions/GetDescription.js +1 -1
- package/dist/nodes/Qsv/descriptions/JoinpDescription.js +1 -8
- package/dist/nodes/Qsv/descriptions/JsonlDescription.js +2 -2
- package/dist/nodes/Qsv/descriptions/PivotpDescription.js +10 -3
- package/dist/nodes/Qsv/descriptions/ReadstatDescription.js +2 -2
- package/dist/nodes/Qsv/descriptions/SchemaDescription.js +1 -1
- package/dist/nodes/Qsv/descriptions/ScoresqlDescription.js +2 -2
- package/dist/nodes/Qsv/descriptions/SqlpDescription.js +3 -10
- package/dist/nodes/Qsv/descriptions/StatsDescription.js +2 -2
- package/dist/nodes/Qsv/descriptions/TemplateDescription.js +2 -2
- package/dist/nodes/Qsv/descriptions/ToDescription.js +1 -1
- package/dist/nodes/Qsv/descriptions/ValidateDescription.js +9 -2
- package/dist/nodes/Qsv/descriptions/VizDescription.js +40 -9
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -201,6 +201,10 @@ pnpm install
|
|
|
201
201
|
# Regenerate QSV node definitions from latest CLI help (if updating QSV commands)
|
|
202
202
|
pnpm run generate:qsv
|
|
203
203
|
|
|
204
|
+
# Or synchronize, test, and release against new QSV builds (with optional --otp):
|
|
205
|
+
pnpm run sync:qsv --dry-run
|
|
206
|
+
pnpm run sync:qsv --staging --publish --otp 123456
|
|
207
|
+
|
|
204
208
|
# Build package
|
|
205
209
|
pnpm run build
|
|
206
210
|
|
|
@@ -156,7 +156,7 @@ class Qsv {
|
|
|
156
156
|
group: ['transform'],
|
|
157
157
|
version: 1,
|
|
158
158
|
subtitle: '={{$parameter["operation"]}}',
|
|
159
|
-
description: 'Ultra-fast tabular data wrangling, stats, and transformations via QSV (generated for QSV
|
|
159
|
+
description: 'Ultra-fast tabular data wrangling, stats, and transformations via QSV (generated for QSV 26.0.0; requires qsv CLI on host)',
|
|
160
160
|
defaults: {
|
|
161
161
|
name: 'QSV',
|
|
162
162
|
},
|
|
@@ -328,7 +328,7 @@ class Qsv {
|
|
|
328
328
|
{
|
|
329
329
|
name: 'Geocode (geocode) [Feature: geocode]',
|
|
330
330
|
value: 'geocode',
|
|
331
|
-
description: 'Geocodes a location against an updatable local copy of the Geonames cities & the Maxmind GeoLite2 databases — with caching and multi-threading, this offline path geocodes up to 360,000 records/sec! Can also geocode online (forward & reverse) via the OpenCage geocoder. (Category: utility | Docs: https://github.com/dathere/qsv/blob/master/docs/help/geocode.md)',
|
|
331
|
+
description: 'Geocodes a location against an updatable local copy of the Geonames cities & the Maxmind GeoLite2 databases — with caching and multi-threading, this offline path geocodes up to 360,000 records/sec! Can also geocode online (forward & reverse) via the OpenCage geocoder, geocode New York City addresses, BBLs and BINs via NYC\'s Geoclient API, which also returns NYC attributes such as council districts and census tracts, and geocode US addresses & coordinates via the free US Census Geocoder - single or batch - returning Census state, county, tract, block group & block GEOIDs for Census data enrichment. (Category: utility | Docs: https://github.com/dathere/qsv/blob/master/docs/help/geocode.md)',
|
|
332
332
|
action: 'Geocode',
|
|
333
333
|
},
|
|
334
334
|
{
|
|
@@ -30,12 +30,18 @@ async function executeGeocode(itemIndex) {
|
|
|
30
30
|
if (options.batch !== undefined && options.batch !== '') {
|
|
31
31
|
args.push('--batch', String(options.batch));
|
|
32
32
|
}
|
|
33
|
+
if (options.benchmark !== undefined && options.benchmark !== '') {
|
|
34
|
+
args.push('--benchmark', String(options.benchmark));
|
|
35
|
+
}
|
|
33
36
|
if (options.cacheDir !== undefined && options.cacheDir !== '') {
|
|
34
37
|
args.push('--cache-dir', String(options.cacheDir));
|
|
35
38
|
}
|
|
36
39
|
if (options.cacheTtl !== undefined && options.cacheTtl !== '') {
|
|
37
40
|
args.push('--cache-ttl', String(options.cacheTtl));
|
|
38
41
|
}
|
|
42
|
+
if (options.censusMode !== undefined && options.censusMode !== '') {
|
|
43
|
+
args.push('--census-mode', String(options.censusMode));
|
|
44
|
+
}
|
|
39
45
|
if (options.citiesUrl !== undefined && options.citiesUrl !== '') {
|
|
40
46
|
args.push('--cities-url', String(options.citiesUrl));
|
|
41
47
|
}
|
|
@@ -45,6 +51,9 @@ async function executeGeocode(itemIndex) {
|
|
|
45
51
|
if (options.delimiter !== undefined && options.delimiter !== '') {
|
|
46
52
|
args.push('--delimiter', String(options.delimiter));
|
|
47
53
|
}
|
|
54
|
+
if (options.endpoint !== undefined && options.endpoint !== '') {
|
|
55
|
+
args.push('--endpoint', String(options.endpoint));
|
|
56
|
+
}
|
|
48
57
|
if (options.force === true) {
|
|
49
58
|
args.push('--force');
|
|
50
59
|
}
|
|
@@ -78,6 +87,9 @@ async function executeGeocode(itemIndex) {
|
|
|
78
87
|
if (options.olderThan !== undefined && options.olderThan !== '') {
|
|
79
88
|
args.push('--older-than', String(options.olderThan));
|
|
80
89
|
}
|
|
90
|
+
if (options.params !== undefined && options.params !== '') {
|
|
91
|
+
args.push('--params', String(options.params));
|
|
92
|
+
}
|
|
81
93
|
if (options.rateLimit !== undefined && options.rateLimit !== '') {
|
|
82
94
|
args.push('--rate-limit', String(options.rateLimit));
|
|
83
95
|
}
|
|
@@ -90,6 +102,9 @@ async function executeGeocode(itemIndex) {
|
|
|
90
102
|
if (options.timeout !== undefined && options.timeout !== '') {
|
|
91
103
|
args.push('--timeout', String(options.timeout));
|
|
92
104
|
}
|
|
105
|
+
if (options.vintage !== undefined && options.vintage !== '') {
|
|
106
|
+
args.push('--vintage', String(options.vintage));
|
|
107
|
+
}
|
|
93
108
|
if (additionalArgs.trim()) {
|
|
94
109
|
const rawMatches = additionalArgs.match(/[^\s"']+|"[^"]*"|'[^']*'/g) || [];
|
|
95
110
|
const parsedArgs = rawMatches.map((arg) => {
|
|
@@ -22,6 +22,9 @@ async function executeGeoconvert(itemIndex) {
|
|
|
22
22
|
const additionalArgs = this.getNodeParameter('additionalArgs', itemIndex, '') || '';
|
|
23
23
|
const options = this.getNodeParameter('options', itemIndex, {}) || {};
|
|
24
24
|
const args = ['geoconvert'];
|
|
25
|
+
if (options.delimiter !== undefined && options.delimiter !== '') {
|
|
26
|
+
args.push('--delimiter', String(options.delimiter));
|
|
27
|
+
}
|
|
25
28
|
if (options.geometry !== undefined && options.geometry !== '') {
|
|
26
29
|
args.push('--geometry', String(options.geometry));
|
|
27
30
|
}
|
|
@@ -83,9 +83,6 @@ async function executeJoinp(itemIndex) {
|
|
|
83
83
|
if (options.left_by !== undefined && options.left_by !== '') {
|
|
84
84
|
args.push('--left_by', String(options.left_by));
|
|
85
85
|
}
|
|
86
|
-
if (options.lowMemory === true) {
|
|
87
|
-
args.push('--low-memory');
|
|
88
|
-
}
|
|
89
86
|
if (options.maintainOrder !== undefined && options.maintainOrder !== '') {
|
|
90
87
|
args.push('--maintain-order', String(options.maintainOrder));
|
|
91
88
|
}
|
|
@@ -45,6 +45,9 @@ async function executePivotp(itemIndex) {
|
|
|
45
45
|
if (options.maxColumns !== undefined && options.maxColumns !== '') {
|
|
46
46
|
args.push('--max-columns', String(options.maxColumns));
|
|
47
47
|
}
|
|
48
|
+
if (options.noMoarstats === true) {
|
|
49
|
+
args.push('--no-moarstats');
|
|
50
|
+
}
|
|
48
51
|
if (options.sortColumns === true) {
|
|
49
52
|
args.push('--sort-columns');
|
|
50
53
|
}
|
|
@@ -51,9 +51,6 @@ async function executeSqlp(itemIndex) {
|
|
|
51
51
|
if (options.inferLen !== undefined && options.inferLen !== '') {
|
|
52
52
|
args.push('--infer-len', String(options.inferLen));
|
|
53
53
|
}
|
|
54
|
-
if (options.lowMemory === true) {
|
|
55
|
-
args.push('--low-memory');
|
|
56
|
-
}
|
|
57
54
|
if (options.noOptimizations === true) {
|
|
58
55
|
args.push('--no-optimizations');
|
|
59
56
|
}
|
|
@@ -27,6 +27,9 @@ async function executeViz(itemIndex) {
|
|
|
27
27
|
if (options.annotation !== undefined && options.annotation !== '') {
|
|
28
28
|
args.push('--annotation', String(options.annotation));
|
|
29
29
|
}
|
|
30
|
+
if (options.area === true) {
|
|
31
|
+
args.push('--area');
|
|
32
|
+
}
|
|
30
33
|
if (options.bins !== undefined && options.bins !== '') {
|
|
31
34
|
args.push('--bins', String(options.bins));
|
|
32
35
|
}
|
|
@@ -57,6 +60,9 @@ async function executeViz(itemIndex) {
|
|
|
57
60
|
if (options.datasetPid !== undefined && options.datasetPid !== '') {
|
|
58
61
|
args.push('--dataset-pid', String(options.datasetPid));
|
|
59
62
|
}
|
|
63
|
+
if (options.degrees === true) {
|
|
64
|
+
args.push('--degrees');
|
|
65
|
+
}
|
|
60
66
|
if (options.delimiter !== undefined && options.delimiter !== '') {
|
|
61
67
|
args.push('--delimiter', String(options.delimiter));
|
|
62
68
|
}
|
|
@@ -147,6 +153,9 @@ async function executeViz(itemIndex) {
|
|
|
147
153
|
if (options.maxCharts !== undefined && options.maxCharts !== '') {
|
|
148
154
|
args.push('--max-charts', String(options.maxCharts));
|
|
149
155
|
}
|
|
156
|
+
if (options.noDaemonBridge === true) {
|
|
157
|
+
args.push('--no-daemon-bridge');
|
|
158
|
+
}
|
|
150
159
|
if (options.noHeaders === true) {
|
|
151
160
|
args.push('--no-headers');
|
|
152
161
|
}
|
|
@@ -156,6 +165,9 @@ async function executeViz(itemIndex) {
|
|
|
156
165
|
if (options.noOther === true) {
|
|
157
166
|
args.push('--no-other');
|
|
158
167
|
}
|
|
168
|
+
if (options.noParcoords === true) {
|
|
169
|
+
args.push('--no-parcoords');
|
|
170
|
+
}
|
|
159
171
|
if (options.noSnap === true) {
|
|
160
172
|
args.push('--no-snap');
|
|
161
173
|
}
|
|
@@ -88,7 +88,7 @@ exports.CatDescription = [
|
|
|
88
88
|
name: 'group',
|
|
89
89
|
type: 'string',
|
|
90
90
|
default: 'none',
|
|
91
|
-
description: 'When concatenating with rowskey, you can specify a grouping value which will be used as the first column in the output. This is useful when you want to know which file a row came from. Valid values are \'fullpath\', \'parentdirfname\', \'parentdirfstem\', \'fname\', \'fstem\' and \'none\'. A new column will be added to the beginning of each row using --group-name. If \'none\' is specified, no grouping column will be added.',
|
|
91
|
+
description: 'When concatenating with rowskey, you can specify a grouping value which will be used as the first column in the output. This is useful when you want to know which file a row came from. Valid values are \'fullpath\', \'parentdirfname\', \'parentdirfstem\', \'fname\', \'fstem\' and \'none\'. For a file at /data/2024/jan/sales.csv, \'fullpath\' gives \'/data/2024/jan/sales.csv\', \'parentdirfname\' gives \'jan/sales.csv\', \'parentdirfstem\' gives \'jan/sales\', \'fname\' gives \'sales.csv\' and \'fstem\' gives \'sales\'. \'fullpath\' and the parentdir kinds use the file\'s real location (symlinks and relative paths resolved), so the result does not depend on how the path was typed. Use a parentdir kind to tell apart same-named files in different directories. For a compressed input, \'fullpath\' names the real file (/data/jan/sales.csv.sz, or /data/jan/2024.zip/sales.csv for an entry sales.csv in a zip archive). The other kinds treat it as if unpacked in place, so \'parentdirfname\' gives jan/sales.csv and 2024/sales.csv. Piped stdin is named \'stdin.csv\' (\'<stdin>\' for \'fullpath\'). A new column will be added to the beginning of each row using --group-name. If \'none\' is specified, no grouping column will be added.',
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
94
|
displayName: 'Group Name',
|
|
@@ -43,8 +43,8 @@ exports.CountDescription = [
|
|
|
43
43
|
displayName: 'Delimiter',
|
|
44
44
|
name: 'delimiter',
|
|
45
45
|
type: 'string',
|
|
46
|
-
default: '
|
|
47
|
-
description: 'The delimiter
|
|
46
|
+
default: '',
|
|
47
|
+
description: 'The field delimiter for reading CSV data. Must be a single character. (default: ,)',
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
displayName: 'Flexible',
|
|
@@ -67,13 +67,6 @@ exports.CountDescription = [
|
|
|
67
67
|
default: false,
|
|
68
68
|
description: 'Output the width stats in JSON format.',
|
|
69
69
|
},
|
|
70
|
-
{
|
|
71
|
-
displayName: 'Low Memory',
|
|
72
|
-
name: 'lowMemory',
|
|
73
|
-
type: 'boolean',
|
|
74
|
-
default: false,
|
|
75
|
-
description: 'Use the Polars CSV Reader\'s low-memory mode. This mode is slower but uses less memory. If counting still fails, use --no-polars instead to use the streaming CSV reader.',
|
|
76
|
-
},
|
|
77
70
|
{
|
|
78
71
|
displayName: 'No Headers',
|
|
79
72
|
name: 'noHeaders',
|
|
@@ -154,7 +154,7 @@ exports.DescribegptDescription = [
|
|
|
154
154
|
name: 'format',
|
|
155
155
|
type: 'string',
|
|
156
156
|
default: 'Markdown',
|
|
157
|
-
description: 'Output format: Markdown, TSV, JSON, TOON, JSONSchema, SemanticMd, or OKF. TOON is a compact, human-readable encoding of the JSON data model for LLM prompts. See https://toonformat.dev/
|
|
157
|
+
description: 'Output format: Markdown, TSV, JSON, TOON, JSONSchema, SemanticMd, or OKF. TOON is a compact, human-readable encoding of the JSON data model for LLM prompts. Output conforms to the latest TOON v4 spec. See https://toonformat.dev/ & https://toonformat.dev/guide/whats-new-in-v4.html JSONSchema emits the Data Dictionary as a JSON Schema (draft 2020-12) document, enriched with LLM-inferred Label, Description and Content Type (the latter only when the infer-content-type flag is set). qsv- and LLM- specific metadata not modeled by the JSON Schema spec (cardinality, null_count, weighted example counts, content_type, null_values, null_candidates, addl stats columns) is preserved via a single x-qsv annotation object per property; unknown keywords are ignored by validators per the 2020-12 spec. The JSONSchema format requires the dictionary inference phase (the dictionary or all flag). The description inference, when also run, becomes the schema\'s top-level description; tags, when also run, are embedded at x-qsv.tags. The prompt inference is not supported. SemanticMd emits the Data Dictionary as a Semantic Markdown document (https://semanticmd.org/) - human-readable markdown with light, agent-parseable conventions that a companion converter turns into JSON. It enriches each column with a catalog-wide Concept ID (for cross-dataset join discovery), an analytical Role (dimension/measure/identifier/timestamp), join keys & cardinality, data-quality flags, and a richer per-column statistics block; it also emits a dataset grain and a temporal/spatial envelope. To populate Concept/Role/grain, SemanticMd implies --infer-content-type. Like JSONSchema, it requires the dictionary inference phase (the dictionary or all flag). The description inference, when also run, becomes the \'# Dataset\' description; tags, when also run, are embedded in the document frontmatter. The prompt inference is not supported. OKF emits the Data Dictionary as an Open Knowledge Format document (https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf) - a leaner, vendor-neutral plain-markdown-plus-YAML-frontmatter format. It emits frontmatter (type/title/description/resource/timestamp/tags) and a Schema section with a Column/Type/Content Type/Description/Enumeration table. The type frontmatter key is set via the okf-type flag (default "CSV Table"); ds-source maps to resource and ds-updated maps to timestamp. Like SemanticMd, OKF implies infer-content-type, requires the dictionary inference phase (the dictionary or all flag), folds the description inference into the body prose and a single-sentence frontmatter description, and embeds tags in the frontmatter. The prompt inference is not supported.',
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
displayName: 'Freq Options',
|
|
@@ -69,8 +69,8 @@ exports.ExcelDescription = [
|
|
|
69
69
|
displayName: 'Delimiter',
|
|
70
70
|
name: 'delimiter',
|
|
71
71
|
type: 'string',
|
|
72
|
-
default: '
|
|
73
|
-
description: 'The delimiter to use when writing CSV data. Must be a single character.',
|
|
72
|
+
default: '',
|
|
73
|
+
description: 'The delimiter to use when writing CSV data. Must be a single character. (default: ,)',
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
displayName: 'Error Format',
|
|
@@ -91,7 +91,7 @@ exports.FrequencyDescription = [
|
|
|
91
91
|
name: 'frequencyJsonl',
|
|
92
92
|
type: 'boolean',
|
|
93
93
|
default: false,
|
|
94
|
-
description: 'Write the complete frequency distribution as a JSONL cache file (FILESTEM.freq.csv.data.jsonl). Requires a non-stdin input file. The cache contains metadata and per-column frequency data. ALL_UNIQUE columns (rowcount == cardinality) get a single ALL_UNIQUE sentinel. HIGH_CARDINALITY columns (cardinality exceeds the smaller of --high-card-threshold/--high-card-pct of rowcount) get a single HIGH_CARDINALITY sentinel. When a valid (fresh) cache already exists, frequency will automatically reuse it instead of recomputing from the CSV. Use --force to regenerate the cache even when it is valid. Cache is NOT used when --ignore-case, --no-trim, or --weight are active, as these change how values are computed.',
|
|
94
|
+
description: 'Write the complete frequency distribution as a JSONL cache file (FILESTEM.freq.csv.data.jsonl). Requires a non-stdin input file. The cache contains metadata and per-column frequency data. ALL_UNIQUE columns (rowcount == cardinality) get a single ALL_UNIQUE sentinel. HIGH_CARDINALITY columns (cardinality exceeds the smaller of --high-card-threshold/--high-card-pct of rowcount) get a single HIGH_CARDINALITY sentinel. Columns with any value that is not valid UTF-8 get a single NON_UTF8 sentinel, since the cache stores values as UTF-8 text. HIGH_CARDINALITY and NON_UTF8 columns are recomputed when the cache is reused. When a valid (fresh) cache already exists, frequency will automatically reuse it instead of recomputing from the CSV. Use --force to regenerate the cache even when it is valid. Cache is NOT used when --ignore-case, --no-trim, or --weight are active, as these change how values are computed.',
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
displayName: 'High Card Pct',
|
|
@@ -112,7 +112,7 @@ exports.FrequencyDescription = [
|
|
|
112
112
|
name: 'ignoreCase',
|
|
113
113
|
type: 'boolean',
|
|
114
114
|
default: false,
|
|
115
|
-
description: 'Ignore case when computing frequencies.',
|
|
115
|
+
description: 'Ignore case when computing frequencies. The stats cache\'s cardinality is case-sensitive, so it cannot prove that case-folded values are unique. All-unique columns are therefore counted in full instead of being short-circuited to <ALL_UNIQUE> - except Integer columns, which have no letters to fold (unless trimming changes one of their values). On large files with all-unique text columns (e.g. emails), this can use memory proportional to the row count. Exclude such columns with -s if you don\'t need them.',
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
118
|
displayName: 'Json',
|
|
@@ -259,7 +259,7 @@ exports.FrequencyDescription = [
|
|
|
259
259
|
name: 'sketchMethod',
|
|
260
260
|
type: 'string',
|
|
261
261
|
default: 'exact',
|
|
262
|
-
description: 'Algorithm used to compute the frequency table. Choices: \'exact\' (default) tracks every distinct value in a HashMap; \'frequent_items\' uses the Apache DataSketches Frequent Items (Misra-Gries) sketch to track top-K heavy hitters with bounded error and constant memory. The frequent_items mode rejects asc, weight, ignore-case, no-trim, other-sorted, null-sorted, frequency-jsonl, stats-filter, and json/pretty-json/toon output; the frequency cache is bypassed. Counts are estimates. The flags rank-strategy, lmt-threshold, and unq-limit are silently ignored under this mode (the sketch\'s natural ordering is top-K by estimate descending; tied counts use the sketch\'s hash-table iteration order). The \'Other\' row format diverges from exact: label is the bare other-text (no unique-count suffix since the sketch cannot recover the true count of items not in the top-K); rank is 0 to match the exact convention. Note: \'frequent_items\' requires a little-endian target. Apache DataSketches does not support big-endian platforms (e.g., s390x); on those builds, this choice is rejected.',
|
|
262
|
+
description: 'Algorithm used to compute the frequency table. Choices: \'exact\' (default) tracks every distinct value in a HashMap; \'frequent_items\' uses the Apache DataSketches Frequent Items (Misra-Gries) sketch to track top-K heavy hitters with bounded error and constant memory. The frequent_items mode rejects asc, weight, ignore-case, no-trim, other-sorted, null-sorted, frequency-jsonl, stats-filter, and json/pretty-json/toon output; the frequency cache is bypassed. Counts are estimates. The flags rank-strategy, lmt-threshold, and unq-limit are silently ignored under this mode (the sketch\'s natural ordering is top-K by estimate descending; tied counts use the sketch\'s hash-table iteration order). The \'Other\' row format diverges from exact: label is the bare other-text (no unique-count suffix since the sketch cannot recover the true count of items not in the top-K); rank is 0 to match the exact convention. Its count is approximate. NULLs are counted exactly, outside the sketch, and are reported as in exact mode (after "Other"). Note: \'frequent_items\' requires a little-endian target. Apache DataSketches does not support big-endian platforms (e.g., s390x); on those builds, this choice is rejected.',
|
|
263
263
|
},
|
|
264
264
|
{
|
|
265
265
|
displayName: 'Stats Filter',
|
|
@@ -25,8 +25,12 @@ exports.GeocodeDescription = [
|
|
|
25
25
|
{ name: 'cache-clear', value: 'cache-clear' },
|
|
26
26
|
{ name: 'cache-info', value: 'cache-info' },
|
|
27
27
|
{ name: 'cache-prune', value: 'cache-prune' },
|
|
28
|
+
{ name: 'census', value: 'census' },
|
|
29
|
+
{ name: 'censusnow', value: 'censusnow' },
|
|
28
30
|
{ name: 'countryinfo', value: 'countryinfo' },
|
|
29
31
|
{ name: 'countryinfonow', value: 'countryinfonow' },
|
|
32
|
+
{ name: 'geoclient', value: 'geoclient' },
|
|
33
|
+
{ name: 'geoclientnow', value: 'geoclientnow' },
|
|
30
34
|
{ name: 'iplookup', value: 'iplookup' },
|
|
31
35
|
{ name: 'iplookupnow', value: 'iplookupnow' },
|
|
32
36
|
{ name: 'opencage', value: 'opencage' },
|
|
@@ -36,7 +40,7 @@ exports.GeocodeDescription = [
|
|
|
36
40
|
{ name: 'suggest', value: 'suggest' },
|
|
37
41
|
{ name: 'suggestnow', value: 'suggestnow' },
|
|
38
42
|
],
|
|
39
|
-
description: 'Subcommand to execute. Valid values: cache-clear, cache-info, cache-prune, countryinfo, countryinfonow, iplookup, iplookupnow, opencage, opencagenow, reverse, reversenow, suggest, suggestnow',
|
|
43
|
+
description: 'Subcommand to execute. Valid values: cache-clear, cache-info, cache-prune, census, censusnow, countryinfo, countryinfonow, geoclient, geoclientnow, iplookup, iplookupnow, opencage, opencagenow, reverse, reversenow, suggest, suggestnow',
|
|
40
44
|
displayOptions: {
|
|
41
45
|
show: {
|
|
42
46
|
operation: ['geocode'],
|
|
@@ -49,7 +53,7 @@ exports.GeocodeDescription = [
|
|
|
49
53
|
type: 'string',
|
|
50
54
|
required: false,
|
|
51
55
|
default: '',
|
|
52
|
-
description: 'The column to geocode. Used by suggest, reverse & countryinfo subcommands. For suggest, it must be a column with a City string pattern. For reverse, it must be a column using WGS 84 coordinates in "lat, long" or "(lat, long)" format. For countryinfo, it must be a column with a ISO 3166-1 alpha-2 country code. For iplookup, it must be a column with an IP address or a URL. For opencage, it may be a free-form address OR a WGS 84 coordinate. Note that you can use column selector syntax to select the column, but only the first column will be used. See `select --help` for more information.',
|
|
56
|
+
description: 'The column to geocode. Used by suggest, reverse & countryinfo subcommands. For suggest, it must be a column with a City string pattern. For reverse, it must be a column using WGS 84 coordinates in "lat, long" or "(lat, long)" format. For countryinfo, it must be a column with a ISO 3166-1 alpha-2 country code. For iplookup, it must be a column with an IP address or a URL. For opencage, it may be a free-form address OR a WGS 84 coordinate. For geoclient, it is the NYC location, BIN, BBL, street name or street code (see --endpoint). For census, it is a one-line US address or, with --reverse, a WGS 84 coordinate (with --params, the column the result goes in). Note that you can use column selector syntax to select the column, but only the first column will be used. See `select --help` for more information.',
|
|
53
57
|
displayOptions: {
|
|
54
58
|
show: {
|
|
55
59
|
operation: ['geocode'],
|
|
@@ -62,7 +66,7 @@ exports.GeocodeDescription = [
|
|
|
62
66
|
type: 'string',
|
|
63
67
|
required: false,
|
|
64
68
|
default: '',
|
|
65
|
-
description: 'The location to geocode for suggestnow, reversenow, countryinfonow and iplookupnow subcommands. For suggestnow, its a City string pattern. For reversenow, it must be a WGS 84 coordinate. For countryinfonow, it must be a ISO 3166-1 alpha-2 code. For iplookupnow, it must be an IP address or a URL. For opencagenow, it must be an address OR a WGS 84 coordinate.',
|
|
69
|
+
description: 'The location to geocode for suggestnow, reversenow, countryinfonow and iplookupnow subcommands. For suggestnow, its a City string pattern. For reversenow, it must be a WGS 84 coordinate. For countryinfonow, it must be a ISO 3166-1 alpha-2 code. For iplookupnow, it must be an IP address or a URL. For opencagenow, it must be an address OR a WGS 84 coordinate. For geoclientnow, it is a NYC location, BIN, BBL, street name or street code. For censusnow, it is a one-line US address or, with --reverse, a WGS 84 coordinate.',
|
|
66
70
|
displayOptions: {
|
|
67
71
|
show: {
|
|
68
72
|
operation: ['geocode'],
|
|
@@ -132,26 +136,40 @@ exports.GeocodeDescription = [
|
|
|
132
136
|
default: 50000,
|
|
133
137
|
description: 'The number of rows per batch to load into memory, before running in parallel. Set to 0 to load all rows in one batch.',
|
|
134
138
|
},
|
|
139
|
+
{
|
|
140
|
+
displayName: 'Benchmark',
|
|
141
|
+
name: 'benchmark',
|
|
142
|
+
type: 'string',
|
|
143
|
+
default: '',
|
|
144
|
+
description: 'The Census Geocoder benchmark (address ranges release). Default: Public_AR_Current.',
|
|
145
|
+
},
|
|
135
146
|
{
|
|
136
147
|
displayName: 'Cache Dir',
|
|
137
148
|
name: 'cacheDir',
|
|
138
149
|
type: 'string',
|
|
139
150
|
default: '~/.qsv-cache',
|
|
140
|
-
description: 'The directory to use for caching the Geonames cities index and the persistent on-disk OpenCage result
|
|
151
|
+
description: 'The directory to use for caching the Geonames cities index and the persistent on-disk OpenCage, Geoclient and Census result caches. If the directory does not exist, qsv will attempt to create it. If the QSV_CACHE_DIR envvar is set, it will be used instead. The index file is named for the qsv release, so each upgrade downloads a new one. When it does, qsv deletes the index files of all but the 5 most recent releases found in this directory.',
|
|
141
152
|
},
|
|
142
153
|
{
|
|
143
154
|
displayName: 'Cache Ttl',
|
|
144
155
|
name: 'cacheTtl',
|
|
145
156
|
type: 'number',
|
|
146
157
|
default: 1209600,
|
|
147
|
-
description: 'Time-to-live for the persistent on-disk
|
|
158
|
+
description: 'Time-to-live for the persistent on-disk result cache. A value of 0 disables time-based expiration (entries are cached indefinitely). Use --no-cache to disable caching entirely.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
displayName: 'Census Mode',
|
|
162
|
+
name: 'censusMode',
|
|
163
|
+
type: 'string',
|
|
164
|
+
default: '',
|
|
165
|
+
description: 'Whether to use the Census batch endpoints: auto - (default) batch when the output only needs batch fields and at least 50 rows of a --batch still need a lookup. batch - always batch. An output that needs more than the batch fields (e.g. %json) is an error. single - one request per location. The address parts for census --params are street, city, state and zip, e.g. "street={Street},city={City},state=NY". A street needs a zip, or a city and state.',
|
|
148
166
|
},
|
|
149
167
|
{
|
|
150
168
|
displayName: 'Cities Url',
|
|
151
169
|
name: 'citiesUrl',
|
|
152
170
|
type: 'string',
|
|
153
|
-
default: '
|
|
154
|
-
description: 'The URL to download the Geonames cities file from. There are several available at https://download.geonames.org/export/dump/. cities500.zip - cities with populations > 500; ~200k cities, 56mb cities1000.zip - population > 1000; ~140k cities, 44mb cities5000.zip - population > 5000; ~53k cities, 21mb cities15000.zip - population > 15000; ~26k cities, 13mb Note that the more cities are included, the larger the local index file will be, lookup times will be slower, and the search results will be different. For convenience, if this is set to 500, 1000, 5000 or 15000, it will be converted to a geonames cities URL.',
|
|
171
|
+
default: '',
|
|
172
|
+
description: 'The URL to download the Geonames cities file from. There are several available at https://download.geonames.org/export/dump/. cities500.zip - cities with populations > 500; ~200k cities, 56mb cities1000.zip - population > 1000; ~140k cities, 44mb cities5000.zip - population > 5000; ~53k cities, 21mb cities15000.zip - population > 15000; ~26k cities, 13mb Note that the more cities are included, the larger the local index file will be, lookup times will be slower, and the search results will be different. For convenience, if this is set to 500, 1000, 5000 or 15000, it will be converted to a geonames cities URL. If not set, the cities file the current index was built from is used (cities15000.zip if there is no current index). Setting it to a different URL than the current index\'s forces a rebuild.',
|
|
155
173
|
},
|
|
156
174
|
{
|
|
157
175
|
displayName: 'Country',
|
|
@@ -167,12 +185,19 @@ exports.GeocodeDescription = [
|
|
|
167
185
|
default: '',
|
|
168
186
|
description: 'The field delimiter for reading CSV data. Must be a single character. (default: ,)',
|
|
169
187
|
},
|
|
188
|
+
{
|
|
189
|
+
displayName: 'Endpoint',
|
|
190
|
+
name: 'endpoint',
|
|
191
|
+
type: 'string',
|
|
192
|
+
default: '',
|
|
193
|
+
description: 'The Geoclient lookup: search (default), bin, bbl, normalize, streetcode, address, addresspoint, intersection, place or blockface. See GEOCLIENT above.',
|
|
194
|
+
},
|
|
170
195
|
{
|
|
171
196
|
displayName: 'Force',
|
|
172
197
|
name: 'force',
|
|
173
198
|
type: 'boolean',
|
|
174
199
|
default: false,
|
|
175
|
-
description: 'Force update the Geonames cities index. If not set, qsv will check if there are updates available at Geonames.org before updating the index.',
|
|
200
|
+
description: 'Force update the Geonames cities index. If not set, qsv will check if there are updates available at Geonames.org before updating the index. With --force, the index is built even if there is no current index.',
|
|
176
201
|
},
|
|
177
202
|
{
|
|
178
203
|
displayName: 'Formatstr',
|
|
@@ -206,8 +231,8 @@ exports.GeocodeDescription = [
|
|
|
206
231
|
displayName: 'Languages',
|
|
207
232
|
name: 'languages',
|
|
208
233
|
type: 'string',
|
|
209
|
-
default: '
|
|
210
|
-
description: 'The comma-delimited, case-insensitive list of languages to use when building the Geonames cities index. The languages are specified as
|
|
234
|
+
default: '',
|
|
235
|
+
description: 'The comma-delimited, case-insensitive list of languages to use when building the Geonames cities index. The languages are specified as Geonames language codes - the ISO 639-1 2-letter code where one exists (e.g. en,fr,de,es), else the ISO 639-2/3 code. See https://download.geonames.org/export/dump/iso-languagecodes.txt to look up codes and https://download.geonames.org/export/dump/alternatenames/ for the supported language files. 253 languages are currently supported. If not set, the languages the current index was built with are used (en if there is no current index). Setting it to a different list than the current index\'s forces a rebuild.',
|
|
211
236
|
},
|
|
212
237
|
{
|
|
213
238
|
displayName: 'Min Score',
|
|
@@ -235,21 +260,28 @@ exports.GeocodeDescription = [
|
|
|
235
260
|
name: 'noCache',
|
|
236
261
|
type: 'boolean',
|
|
237
262
|
default: false,
|
|
238
|
-
description: 'Disable the persistent on-disk
|
|
263
|
+
description: 'Disable the persistent on-disk result cache. Duplicate queries within a run are still de-duplicated (for geoclient and census, within each --batch).',
|
|
239
264
|
},
|
|
240
265
|
{
|
|
241
266
|
displayName: 'Older Than',
|
|
242
267
|
name: 'olderThan',
|
|
243
268
|
type: 'string',
|
|
244
269
|
default: '',
|
|
245
|
-
description: 'Delete OpenCage cache entries older than this value. Accepts an absolute date/datetime (e.g. 2025-01-31) or a relative age with a unit suffix (s/m/h/d/w = seconds, minutes, hours, days or weeks; e.g. 30d, 2w, 48h). Required by the cache-prune subcommand.',
|
|
270
|
+
description: 'Delete OpenCage, Geoclient and Census cache entries older than this value. Accepts an absolute date/datetime (e.g. 2025-01-31) or a relative age with a unit suffix (s/m/h/d/w = seconds, minutes, hours, days or weeks; e.g. 30d, 2w, 48h). Required by the cache-prune subcommand.',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
displayName: 'Params',
|
|
274
|
+
name: 'params',
|
|
275
|
+
type: 'string',
|
|
276
|
+
default: '',
|
|
277
|
+
description: 'Comma-separated Geoclient parameters for the structured endpoints, each "name={Column}" or "name=value", e.g. "houseNumber={HouseNo},street={Street},borough={Boro}". For search, only fixed options are allowed, e.g. "exactMatchMaxLevel=5". Also used by census to read an address from several columns: see CENSUS only options.',
|
|
246
278
|
},
|
|
247
279
|
{
|
|
248
280
|
displayName: 'Rate Limit',
|
|
249
281
|
name: 'rateLimit',
|
|
250
282
|
type: 'number',
|
|
251
|
-
default:
|
|
252
|
-
description: 'Maximum number of
|
|
283
|
+
default: 0,
|
|
284
|
+
description: 'Maximum number of API requests per second. Defaults to 1 for opencage (its free trial allows 1 request/second, 2,500/day), 40 for geoclient (the public API allows 100/second per IP but only 2,500/minute, so 41.6/second sustained, and 500,000/day) and 5 for census (single-record lookups; batch uploads are paced separately).',
|
|
253
285
|
},
|
|
254
286
|
{
|
|
255
287
|
displayName: 'Rename',
|
|
@@ -263,14 +295,21 @@ exports.GeocodeDescription = [
|
|
|
263
295
|
name: 'reverse',
|
|
264
296
|
type: 'boolean',
|
|
265
297
|
default: false,
|
|
266
|
-
description: 'Force reverse geocoding for opencage/opencagenow (treat the query as a "lat, long" WGS-84 coordinate). If not set, forward and reverse mode is auto-detected per row.',
|
|
298
|
+
description: 'Force reverse geocoding for opencage/opencagenow (treat the query as a "lat, long" WGS-84 coordinate). If not set, forward and reverse mode is auto-detected per row. For census/censusnow, <column> holds "lat, long" coordinates and the Census geographies at that point are returned.',
|
|
267
299
|
},
|
|
268
300
|
{
|
|
269
301
|
displayName: 'Timeout',
|
|
270
302
|
name: 'timeout',
|
|
271
303
|
type: 'number',
|
|
272
304
|
default: 120,
|
|
273
|
-
description: 'Timeout for downloading Geonames cities index. Also applies to each Geonames source file downloaded when rebuilding the index with index-update - raise it on slow connections.',
|
|
305
|
+
description: 'Timeout for downloading Geonames cities index. Also applies to each Geonames source file downloaded when rebuilding the index with index-update, and to the prebuilt index downloaded by index-load and index-reset - raise it on slow connections. For opencage, geoclient and census, it is the timeout for each API request.',
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
displayName: 'Vintage',
|
|
309
|
+
name: 'vintage',
|
|
310
|
+
type: 'string',
|
|
311
|
+
default: '',
|
|
312
|
+
description: 'The Census Geocoder vintage (geography release), e.g. Current_Current, Census2020_Current or ACS2026_Current. Default: Current_Current.',
|
|
274
313
|
},
|
|
275
314
|
],
|
|
276
315
|
},
|
|
@@ -77,6 +77,13 @@ exports.GeoconvertDescription = [
|
|
|
77
77
|
},
|
|
78
78
|
},
|
|
79
79
|
options: [
|
|
80
|
+
{
|
|
81
|
+
displayName: 'Delimiter',
|
|
82
|
+
name: 'delimiter',
|
|
83
|
+
type: 'string',
|
|
84
|
+
default: '',
|
|
85
|
+
description: 'The field delimiter for reading CSV input. Must be a single character. (default: ,)',
|
|
86
|
+
},
|
|
80
87
|
{
|
|
81
88
|
displayName: 'Geometry',
|
|
82
89
|
name: 'geometry',
|
|
@@ -103,7 +110,7 @@ exports.GeoconvertDescription = [
|
|
|
103
110
|
name: 'maxLength',
|
|
104
111
|
type: 'number',
|
|
105
112
|
default: 0,
|
|
106
|
-
description: 'The maximum column length when the output format is CSV. Oftentimes, the geometry column is too long to fit in a CSV file, causing other tools like Python & PostgreSQL to fail. If a column is too long, it will be truncated to the specified length and an ellipsis ("...") will be appended.',
|
|
113
|
+
description: 'The maximum column length in bytes when the output format is CSV. Oftentimes, the geometry column is too long to fit in a CSV file, causing other tools like Python & PostgreSQL to fail. If a column is too long, it will be truncated to the specified length and an ellipsis ("...") will be appended, so a truncated value is up to 3 bytes longer.',
|
|
107
114
|
},
|
|
108
115
|
],
|
|
109
116
|
},
|
|
@@ -104,7 +104,7 @@ exports.GetDescription = [
|
|
|
104
104
|
name: 'cacheDir',
|
|
105
105
|
type: 'string',
|
|
106
106
|
default: '~/.qsv-cache',
|
|
107
|
-
description: 'The qsv cache directory.
|
|
107
|
+
description: 'The qsv cache directory. If the QSV_CACHE_DIR envvar is set, it will be used instead.',
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
110
|
displayName: 'Ckan Api',
|
|
@@ -237,13 +237,6 @@ exports.JoinpDescription = [
|
|
|
237
237
|
default: false,
|
|
238
238
|
description: 'This returns only the rows in the first CSV data set that have a corresponding row in the second data set. The output schema is the same as the first data set.',
|
|
239
239
|
},
|
|
240
|
-
{
|
|
241
|
-
displayName: 'Low Memory',
|
|
242
|
-
name: 'lowMemory',
|
|
243
|
-
type: 'boolean',
|
|
244
|
-
default: false,
|
|
245
|
-
description: 'Use low memory mode when parsing CSVs. This will use less memory but will be slower. It will also process the join in streaming mode. Only use this when you get out of memory errors.',
|
|
246
|
-
},
|
|
247
240
|
{
|
|
248
241
|
displayName: 'Maintain Order',
|
|
249
242
|
name: 'maintainOrder',
|
|
@@ -340,7 +333,7 @@ exports.JoinpDescription = [
|
|
|
340
333
|
name: 'streaming',
|
|
341
334
|
type: 'boolean',
|
|
342
335
|
default: false,
|
|
343
|
-
description: '
|
|
336
|
+
description: 'Write the join result as it is computed, batch by batch, instead of collecting the whole result in memory first. Use this when the result is too big for memory: it uses less memory but is slower. An --output file is written beside its target and only moved into place if the join succeeds; overwriting an existing file copies the result into it, so it keeps its owner, group, mode and links, and briefly needs disk space for two copies. On stdout, rows are sent as they are computed, so a join that fails part-way leaves its output cut short; check the exit code.',
|
|
344
337
|
},
|
|
345
338
|
{
|
|
346
339
|
displayName: 'Time Format',
|
|
@@ -62,8 +62,8 @@ exports.JsonlDescription = [
|
|
|
62
62
|
displayName: 'Delimiter',
|
|
63
63
|
name: 'delimiter',
|
|
64
64
|
type: 'string',
|
|
65
|
-
default: '
|
|
66
|
-
description: 'The delimiter to use when writing CSV data. Must be a single character.',
|
|
65
|
+
default: '',
|
|
66
|
+
description: 'The delimiter to use when writing CSV data. Must be a single character. (default: ,)',
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
displayName: 'Ignore Errors',
|
|
@@ -69,7 +69,7 @@ exports.PivotpDescription = [
|
|
|
69
69
|
name: 'agg',
|
|
70
70
|
type: 'string',
|
|
71
71
|
default: 'smart',
|
|
72
|
-
description: 'The aggregation function to use: first - First value encountered last - Last value encountered sum - Sum of values min - Minimum value max - Maximum value mean - Average value median - Median value quantile@<p> - Quantile at probability p in [0, 1] using linear interpolation. Alias: q@<p>. Examples: quantile@0.95, q@0.5 (q@0.5 is equivalent to median for even-length groups). len - Count of values item - Get single value from group. Raises error if there are multiple values. smart - use value column data type & statistics to pick an aggregation. Always uses type, cardinality, sparsity, CV, sign distribution (n_negative/n_positive), and sort_order from streaming stats. When the stats cache includes non-streaming stats (from a prior `stats --everything` or `stats --mode
|
|
72
|
+
description: 'The aggregation function to use: first - First value encountered last - Last value encountered sum - Sum of values min - Minimum value max - Maximum value mean - Average value median - Median value quantile@<p> - Quantile at probability p in [0, 1] using linear interpolation. Alias: q@<p>. Examples: quantile@0.95, q@0.5 (q@0.5 is equivalent to median for even-length groups). len - Count of values item - Get single value from group. Raises error if there are multiple values. smart - use value column data type & statistics to pick an aggregation. Always uses type, cardinality, sparsity, CV, sign distribution (n_negative/n_positive), and sort_order from streaming stats. High variability means a CV above 100% (stddev > mean). When the stats cache includes non-streaming stats (from a prior `stats --everything` or `stats --mode`), also uses mode_count. With a single --values column, smart first runs moarstats --advanced to enrich the input\'s stats cache (writing <stem>.stats.csv, .stats.csv.json and .stats.csv.data.jsonl beside it) unless the cache already has those stats. This one-time pass reads the whole file; skip it with --no-moarstats. It is also skipped with an explicit --delimiter, stdin and special formats. The moarstats stats used are outlier profile, Pearson skewness, MAD/stddev ratio, median/mean ratio and quartile coefficient of dispersion (the two ratios only for positive data), moment skewness (|G1| >= 1 picks median; Pearson skewness is the fallback), kurtosis, bimodality (bimodality coefficient >= 0.60 with negative excess kurtosis), entropy and Gini coefficient. A single-value column uses first. The choice depends on the data, so pass an explicit --agg to pin a result across qsv versions. For Date/DateTime values, checks sparsity and sort order. Will only work if there is one value column, otherwise it falls back to `first`',
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
displayName: 'Col Separator',
|
|
@@ -90,7 +90,7 @@ exports.PivotpDescription = [
|
|
|
90
90
|
name: 'delimiter',
|
|
91
91
|
type: 'string',
|
|
92
92
|
default: '',
|
|
93
|
-
description: 'The field delimiter for reading/writing CSV data. Must be a single character. (default: ,)',
|
|
93
|
+
description: 'The field delimiter for reading/writing CSV data. Must be a single character. If not set, QSV_DEFAULT_DELIMITER is used, else \',\'. A .tsv/.tab (tab) or .ssv (semicolon) extension on the input or --output file sets that file\'s delimiter. (default: ,)',
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
displayName: 'Grand Total',
|
|
@@ -125,7 +125,7 @@ exports.PivotpDescription = [
|
|
|
125
125
|
name: 'maintainOrder',
|
|
126
126
|
type: 'boolean',
|
|
127
127
|
default: false,
|
|
128
|
-
description: '
|
|
128
|
+
description: 'Accepted for compatibility. Output is always in first-appearance order: rows follow their index values\' first appearance and pivoted columns their <on-cols> values\' first appearance.',
|
|
129
129
|
},
|
|
130
130
|
{
|
|
131
131
|
displayName: 'Max Columns',
|
|
@@ -134,6 +134,13 @@ exports.PivotpDescription = [
|
|
|
134
134
|
default: 100000,
|
|
135
135
|
description: 'Maximum number of columns the pivot may create before it is refused. Guards against pivoting on a high-cardinality column, which can exhaust memory. Unlike --validate, this ALWAYS runs. Set to 0 for no limit, for a deliberately wide pivot. (pivot mode only; ignored in group-by mode)',
|
|
136
136
|
},
|
|
137
|
+
{
|
|
138
|
+
displayName: 'No Moarstats',
|
|
139
|
+
name: 'noMoarstats',
|
|
140
|
+
type: 'boolean',
|
|
141
|
+
default: false,
|
|
142
|
+
description: 'For smart aggregation, do not run moarstats --advanced to enrich the stats cache. Smart aggregation then uses whatever stats are already cached (or basic `stats --cardinality` stats).',
|
|
143
|
+
},
|
|
137
144
|
{
|
|
138
145
|
displayName: 'Sort Columns',
|
|
139
146
|
name: 'sortColumns',
|
|
@@ -69,8 +69,8 @@ exports.ReadstatDescription = [
|
|
|
69
69
|
displayName: 'Delimiter',
|
|
70
70
|
name: 'delimiter',
|
|
71
71
|
type: 'string',
|
|
72
|
-
default: '
|
|
73
|
-
description: 'The delimiter to use when writing CSV data. Must be a single character.',
|
|
72
|
+
default: '',
|
|
73
|
+
description: 'The delimiter to use when writing CSV data. Must be a single character. (default: ,)',
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
displayName: 'Dictionary',
|
|
@@ -84,7 +84,7 @@ exports.SchemaDescription = [
|
|
|
84
84
|
name: 'ignoreCase',
|
|
85
85
|
type: 'boolean',
|
|
86
86
|
default: false,
|
|
87
|
-
description: 'Ignore case when compiling unique values for enum constraints.
|
|
87
|
+
description: 'Ignore case when compiling unique values for enum constraints. String columns are then checked against the enum threshold by their case-insensitive cardinality. As the `validate` command is case-sensitive, the enum & const constraints of String columns are written as equivalent case-insensitive regex patterns instead (e.g. "^(?i:false|true)$"). These use the inline `(?i:...)` modifier, which other JSON Schema validators may not support, e.g. on older JavaScript engines.',
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
90
|
displayName: 'Memcheck',
|
|
@@ -68,8 +68,8 @@ exports.ScoresqlDescription = [
|
|
|
68
68
|
displayName: 'Delimiter',
|
|
69
69
|
name: 'delimiter',
|
|
70
70
|
type: 'string',
|
|
71
|
-
default: '
|
|
72
|
-
description: 'The field delimiter for reading CSV data. Must be a single character.',
|
|
71
|
+
default: '',
|
|
72
|
+
description: 'The field delimiter for reading CSV data. Must be a single character. (default: ,)',
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
displayName: 'Duckdb',
|
|
@@ -110,8 +110,8 @@ exports.SqlpDescription = [
|
|
|
110
110
|
displayName: 'Delimiter',
|
|
111
111
|
name: 'delimiter',
|
|
112
112
|
type: 'string',
|
|
113
|
-
default: '
|
|
114
|
-
description: 'The field delimiter for reading and writing CSV data. Must be a single character.',
|
|
113
|
+
default: '',
|
|
114
|
+
description: 'The field delimiter for reading and writing CSV data. Must be a single character. (default: ,)',
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
displayName: 'Float Precision',
|
|
@@ -141,13 +141,6 @@ exports.SqlpDescription = [
|
|
|
141
141
|
default: 10000,
|
|
142
142
|
description: 'The number of rows to scan when inferring the schema of the CSV. Set to 0 to do a full table scan (warning: can be slow).',
|
|
143
143
|
},
|
|
144
|
-
{
|
|
145
|
-
displayName: 'Low Memory',
|
|
146
|
-
name: 'lowMemory',
|
|
147
|
-
type: 'boolean',
|
|
148
|
-
default: false,
|
|
149
|
-
description: 'Use low memory mode when parsing CSVs. This will use less memory but will be slower. Only use this when you get out of memory errors.',
|
|
150
|
-
},
|
|
151
144
|
{
|
|
152
145
|
displayName: 'No Optimizations',
|
|
153
146
|
name: 'noOptimizations',
|
|
@@ -174,7 +167,7 @@ exports.SqlpDescription = [
|
|
|
174
167
|
name: 'streaming',
|
|
175
168
|
type: 'boolean',
|
|
176
169
|
default: false,
|
|
177
|
-
description: 'Use streaming
|
|
170
|
+
description: 'Write the query result as it is computed, batch by batch, instead of collecting the whole result in memory first. Use this when the result is too big for memory. Works with the csv, jsonl, parquet and arrow formats; json and avro output still collect the whole result. Queries already run on Polars\' streaming engine either way. An --output file is written beside its target and only moved into place if the query succeeds. Overwriting an existing file copies the result into it, so it keeps its owner, group, mode and links; that briefly needs disk space for two copies. On stdout, rows are sent as they are computed, so a query that fails part-way leaves its output cut short; check sqlp\'s exit code before using it.',
|
|
178
171
|
},
|
|
179
172
|
{
|
|
180
173
|
displayName: 'Time Format',
|
|
@@ -77,7 +77,7 @@ exports.StatsDescription = [
|
|
|
77
77
|
name: 'cardinalityMethod',
|
|
78
78
|
type: 'string',
|
|
79
79
|
default: 'exact',
|
|
80
|
-
description: 'Algorithm used to compute the --cardinality column. Choices: exact - track every unique value in a frequency map (current behavior). O(cardinality) memory per column. Subject to --mode-cardinality-cap, which emits the ">=<n>" sentinel on overflow. approx - use HyperLogLog (Apache DataSketches port, lg_k=12). O(1) memory per column (~5KB), ~1.5% relative standard error. Notes: * --mode-cardinality-cap no longer affects the cardinality column under approx; the ">=<n>" sentinel is never emitted. * The cap STILL governs mode/antimode tracking (mode columns still emit "*HIGH_CARDINALITY" on overflow). * --infer-boolean forces exact (boolean inference needs cardinality == 2 exactness); a one-time warning is emitted. * Reproducible across PARALLEL --jobs values: the HLL union used at merge time is associative and order-invariant, so chunk completion order does not affect the final estimate. --jobs 1 never reaches that union and so can report a different estimate than a parallel run - pin --jobs when comparing cardinality across runs. * Requires a little-endian target. Apache DataSketches does not support big-endian platforms (e.g., s390x); on those builds, this choice is rejected.',
|
|
80
|
+
description: 'Algorithm used to compute the --cardinality column. Choices: exact - track every unique value in a frequency map (current behavior). O(cardinality) memory per column. Subject to --mode-cardinality-cap, which emits the ">=<n>" sentinel on overflow. approx - use HyperLogLog (Apache DataSketches port, lg_k=12). O(1) memory per column (~5KB), ~1.5% relative standard error. Notes: * --mode-cardinality-cap no longer affects the cardinality column under approx; the ">=<n>" sentinel is never emitted. * The cap STILL governs mode/antimode tracking (mode columns still emit "*HIGH_CARDINALITY" on overflow). * --infer-boolean forces exact (boolean inference needs cardinality == 2 exactness); a one-time warning is emitted. * When modes are computed (with --mode or with --everything) and no mode cardinality cap is set, the exact mode tracker counts every unique value, so that exact count is reported and no sketch is built. With a cap, the estimate is used only for columns whose tracker was dropped. * The estimate never exceeds the row count. * Reproducible across PARALLEL --jobs values: the HLL union used at merge time is associative and order-invariant, so chunk completion order does not affect the final estimate. --jobs 1 never reaches that union and so can report a different estimate than a parallel run - pin --jobs when comparing cardinality across runs. * Requires a little-endian target. Apache DataSketches does not support big-endian platforms (e.g., s390x); on those builds, this choice is rejected.',
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
displayName: 'Dates Whitelist',
|
|
@@ -154,7 +154,7 @@ exports.StatsDescription = [
|
|
|
154
154
|
name: 'memcheck',
|
|
155
155
|
type: 'boolean',
|
|
156
156
|
default: false,
|
|
157
|
-
description: 'Use CONSERVATIVE heuristics for the in-memory load check (file size vs. available + free_swap × platform factor − headroom), instead of the default NORMAL check (file size vs. total memory − headroom). The CONSERVATIVE check is stricter and trips OOM far more readily. Ignored when computing default, streaming statistics. (See also: QSV_MEMORY_CHECK env var, equivalent to passing --memcheck.) Independently of this flag, the in-memory load check runs whenever stats takes the non-parallel path with non-streaming columns. On OOM (in either NORMAL or CONSERVATIVE mode), qsv auto-creates an index when no index exists (skipped for stdin) AND switches to approx quantile + approx cardinality methods (DataSketches t-digest and HyperLogLog) where compatible. The sketch fallback can also fire when an index is already present and the OOM still trips (e.g., when jobs is pinned to 1 on a pre-indexed file). A wwarn is emitted listing the auto-enabled estimators.',
|
|
157
|
+
description: 'Use CONSERVATIVE heuristics for the in-memory load check (file size vs. available + free_swap × platform factor − headroom), instead of the default NORMAL check (file size vs. total memory − headroom). The CONSERVATIVE check is stricter and trips OOM far more readily. Ignored when computing default, streaming statistics. (See also: QSV_MEMORY_CHECK env var, equivalent to passing --memcheck.) Independently of this flag, the in-memory load check runs whenever stats takes the non-parallel path with non-streaming columns. On OOM (in either NORMAL or CONSERVATIVE mode), qsv auto-creates an index when no index exists (skipped for stdin) AND switches to approx quantile + approx cardinality methods (DataSketches t-digest and HyperLogLog) where compatible. The sketch fallback can also fire when an index is already present and the OOM still trips (e.g., when jobs is pinned to 1 on a pre-indexed file). A wwarn is emitted listing the auto-enabled estimators. When modes are computed (with --mode or with the everything option) and no mode cardinality cap is set, approx cardinality is NOT auto-enabled: the exact mode table is kept either way, so it would save nothing. A wwarn suggests --mode-cardinality-cap, which is what bounds that table.',
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
displayName: 'Mode',
|
|
@@ -96,8 +96,8 @@ exports.TemplateDescription = [
|
|
|
96
96
|
displayName: 'Delimiter',
|
|
97
97
|
name: 'delimiter',
|
|
98
98
|
type: 'string',
|
|
99
|
-
default: '
|
|
100
|
-
description: 'Field separator for reading CSV',
|
|
99
|
+
default: '',
|
|
100
|
+
description: 'Field separator for reading CSV (default: ,)',
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
displayName: 'Globals Json',
|
|
@@ -78,7 +78,7 @@ exports.ToDescription = [
|
|
|
78
78
|
name: 'allStrings',
|
|
79
79
|
type: 'boolean',
|
|
80
80
|
default: false,
|
|
81
|
-
description: 'Convert all fields to strings.',
|
|
81
|
+
description: 'Convert all fields to strings. For parquet, columns are read as strings without type inference, so the inference length and any pschema.json are not used.',
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
displayName: 'Compress Level',
|
|
@@ -171,7 +171,7 @@ exports.ValidateDescription = [
|
|
|
171
171
|
name: 'noFormatValidation',
|
|
172
172
|
type: 'boolean',
|
|
173
173
|
default: false,
|
|
174
|
-
description: 'Disable JSON Schema format validation. Ignores all JSON Schema "format" keywords (e.g. date,email, uri, currency, etc.). This is useful when you want to validate the structure of the CSV file w/o worrying about the data types and domain/range of the fields.',
|
|
174
|
+
description: 'Disable JSON Schema format validation. Ignores all JSON Schema "format" keywords (e.g. date,email, uri, currency, etc.). This is useful when you want to validate the structure of the CSV file w/o worrying about the data types and domain/range of the fields. Without this option, a "format" that qsv does not know (e.g. a typo like "emial") is not checked, and a warning names it.',
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
displayName: 'No Headers',
|
|
@@ -180,6 +180,13 @@ exports.ValidateDescription = [
|
|
|
180
180
|
default: false,
|
|
181
181
|
description: 'When set, the first row will not be interpreted as headers. It will be validated with the rest of the rows. Otherwise, the first row will always appear as the header row in the output. Note that this option is only valid when running in RFC 4180 validation mode as JSON Schema validation requires headers.',
|
|
182
182
|
},
|
|
183
|
+
{
|
|
184
|
+
displayName: 'Offline',
|
|
185
|
+
name: 'offline',
|
|
186
|
+
type: 'boolean',
|
|
187
|
+
default: false,
|
|
188
|
+
description: 'Do not resolve "$ref"s to schemas outside the JSON Schema file, whether they are URLs or local files; a schema that has them fails to compile. Use this with JSON Schemas you do not trust. The JSON Schema file itself and dynamicEnum lookups are still loaded as usual.',
|
|
189
|
+
},
|
|
183
190
|
{
|
|
184
191
|
displayName: 'Pretty Json',
|
|
185
192
|
name: 'prettyJson',
|
|
@@ -199,7 +206,7 @@ exports.ValidateDescription = [
|
|
|
199
206
|
name: 'splitRagged',
|
|
200
207
|
type: 'boolean',
|
|
201
208
|
default: false,
|
|
202
|
-
description: 'Opt-in mode: instead of aborting on the first row with the wrong number of columns (a "ragged" row), write well-formed rows to the \'<input>.<valid>\' file and the ragged rows to the \'<input>.<invalid>\' file, with a report appended to \'<input>.validation-errors.tsv\'. Returns a non-zero exit code when any ragged row is found. Only column-count mismatches are diverted; malformed quoting and non-UTF-8 data still abort validation. Works in both RFC 4180 and JSON Schema validation modes. The split files are written next to each input file, so this is intended for on-disk file input(s).',
|
|
209
|
+
description: 'Opt-in mode: instead of aborting on the first row with the wrong number of columns (a "ragged" row), write well-formed rows to the \'<input>.<valid>\' file and the ragged rows to the \'<input>.<invalid>\' file, with a report appended to \'<input>.validation-errors.tsv\'. Returns a non-zero exit code when any ragged row is found. Only column-count mismatches are diverted; malformed quoting and non-UTF-8 data still abort validation. Works in both RFC 4180 and JSON Schema validation modes. The split files are written next to each input file, so this is intended for on-disk file input(s). A compressed input keeps its full name (data.csv.sz.valid). In RFC 4180 mode, which checks every entry in a zip archive, an entry is named for both (data.zip.data.csv.valid; data.zip.sub/x.csv.valid for an entry in a folder). Piped stdin\'s are \'stdin.csv.*\' in the current directory. If any split file would be written twice, or would overwrite an input, nothing is written.',
|
|
203
210
|
},
|
|
204
211
|
{
|
|
205
212
|
displayName: 'Timeout',
|
|
@@ -23,6 +23,7 @@ exports.VizDescription = [
|
|
|
23
23
|
default: 'bar',
|
|
24
24
|
options: [
|
|
25
25
|
{ name: 'bar', value: 'bar' },
|
|
26
|
+
{ name: 'barpolar', value: 'barpolar' },
|
|
26
27
|
{ name: 'box', value: 'box' },
|
|
27
28
|
{ name: 'candlestick', value: 'candlestick' },
|
|
28
29
|
{ name: 'choropleth', value: 'choropleth' },
|
|
@@ -36,6 +37,7 @@ exports.VizDescription = [
|
|
|
36
37
|
{ name: 'map', value: 'map' },
|
|
37
38
|
{ name: 'ohlc', value: 'ohlc' },
|
|
38
39
|
{ name: 'parcats', value: 'parcats' },
|
|
40
|
+
{ name: 'parcoords', value: 'parcoords' },
|
|
39
41
|
{ name: 'pie', value: 'pie' },
|
|
40
42
|
{ name: 'radar', value: 'radar' },
|
|
41
43
|
{ name: 'sankey', value: 'sankey' },
|
|
@@ -44,10 +46,11 @@ exports.VizDescription = [
|
|
|
44
46
|
{ name: 'smart', value: 'smart' },
|
|
45
47
|
{ name: 'splom', value: 'splom' },
|
|
46
48
|
{ name: 'sunburst', value: 'sunburst' },
|
|
49
|
+
{ name: 'ternary', value: 'ternary' },
|
|
47
50
|
{ name: 'treemap', value: 'treemap' },
|
|
48
51
|
{ name: 'violin', value: 'violin' },
|
|
49
52
|
],
|
|
50
|
-
description: 'Subcommand to execute. Valid values: bar, box, candlestick, choropleth, contour, funnel, geo, heatmap, histogram, icicle, line, map, ohlc, parcats, pie, radar, sankey, scatter, scatter3d, smart, splom, sunburst, treemap, violin',
|
|
53
|
+
description: 'Subcommand to execute. Valid values: bar, barpolar, box, candlestick, choropleth, contour, funnel, geo, heatmap, histogram, icicle, line, map, ohlc, parcats, parcoords, pie, radar, sankey, scatter, scatter3d, smart, splom, sunburst, ternary, treemap, violin',
|
|
51
54
|
displayOptions: {
|
|
52
55
|
show: {
|
|
53
56
|
operation: ['viz'],
|
|
@@ -95,7 +98,7 @@ exports.VizDescription = [
|
|
|
95
98
|
name: 'agg',
|
|
96
99
|
type: 'string',
|
|
97
100
|
default: '',
|
|
98
|
-
description: 'How to combine values. For bar/line, aggregate the y values when the x value repeats: one of sum, mean, count, min, max. For treemap/sunburst/icicle, only the additive aggregations apply: count (the default) or sum (which requires --value). For choropleth, how rows sharing a region are combined: sum when --value is given, else count; pass mean for an intensive measure (a density, rate, index or per-capita figure), since summing those is meaningless and the count/sum hover\'s "share of total" line would be too. On a bubble animation (see the slider option), it collapses each entity x frame cell to a single bubble and defaults to mean, the cell centroid; count is rejected there, since a row count is not a position. For smart (with a GeoJSON), how its region map combines the value column per region: sum (the default, and the only one that also gets a rate panel when a denominator is available), mean, min or max; count keeps the row-count map even when every region has the same number of rows, and takes no value column.',
|
|
101
|
+
description: 'How to combine values. For bar/line, aggregate the y values when the x value repeats: one of sum, mean, count, min, max. For barpolar, the same per category (and series): sum by default, and only count when the y column is omitted. For treemap/sunburst/icicle, only the additive aggregations apply: count (the default) or sum (which requires --value). For choropleth, how rows sharing a region are combined: sum when --value is given, else count; pass mean for an intensive measure (a density, rate, index or per-capita figure), since summing those is meaningless and the count/sum hover\'s "share of total" line would be too. On a bubble animation (see the slider option), it collapses each entity x frame cell to a single bubble and defaults to mean, the cell centroid; count is rejected there, since a row count is not a position. For smart (with a GeoJSON), how its region map combines the value column per region: sum (the default, and the only one that also gets a rate panel when a denominator is available), mean, min or max; count keeps the row-count map even when every region has the same number of rows, and takes no value column.',
|
|
99
102
|
},
|
|
100
103
|
{
|
|
101
104
|
displayName: 'Annotation',
|
|
@@ -104,6 +107,13 @@ exports.VizDescription = [
|
|
|
104
107
|
default: '',
|
|
105
108
|
description: 'Caption note drawn at the bottom of the plot (e.g. to note a clipped outlier). Cartesian charts only.',
|
|
106
109
|
},
|
|
110
|
+
{
|
|
111
|
+
displayName: 'Area',
|
|
112
|
+
name: 'area',
|
|
113
|
+
type: 'boolean',
|
|
114
|
+
default: false,
|
|
115
|
+
description: 'For funnel: draw a funnel area, whose stacked sections are sized by each stage\'s share of the total and labeled with its value and percent of the total, instead of bars labeled with the conversion from the previous stage. Its outline always narrows, so a stage larger than the one before it can\'t show as growth; a warning names the first such stage.',
|
|
116
|
+
},
|
|
107
117
|
{
|
|
108
118
|
displayName: 'Bins',
|
|
109
119
|
name: 'bins',
|
|
@@ -151,7 +161,7 @@ exports.VizDescription = [
|
|
|
151
161
|
name: 'color',
|
|
152
162
|
type: 'string',
|
|
153
163
|
default: '',
|
|
154
|
-
description: 'For scatter/scatter3d/map/geo: a numeric column to encode as marker color (a continuous colorscale with a colorbar). For categorical coloring, use the --series option instead. Cannot be combined with --series. In map density mode, this column is the heatmap weight.',
|
|
164
|
+
description: 'For scatter/scatter3d/ternary/map/geo: a numeric column to encode as marker color (a continuous colorscale with a colorbar). For categorical coloring, use the --series option instead. Cannot be combined with --series. In map density mode, this column is the heatmap weight. For parcoords: the numeric column that colors each line (default: the first axis).',
|
|
155
165
|
},
|
|
156
166
|
{
|
|
157
167
|
displayName: 'Color Scale',
|
|
@@ -165,7 +175,7 @@ exports.VizDescription = [
|
|
|
165
175
|
name: 'cols',
|
|
166
176
|
type: 'string',
|
|
167
177
|
default: '',
|
|
168
|
-
description: 'Columns to use. For heatmap: numeric columns for the correlation matrix (default: all numeric). For radar: the numeric axes to plot. For treemap/sunburst/icicle: the categorical dimensions that form the hierarchy levels, outermost first (e.g. region,category,subcategory). For splom: the numeric columns to cross-plot (default: all numeric). For parcats: the categorical dimensions to flow across (best with 3-4).',
|
|
178
|
+
description: 'Columns to use. For heatmap: numeric columns for the correlation matrix (default: all numeric). For radar: the numeric axes to plot. For treemap/sunburst/icicle: the categorical dimensions that form the hierarchy levels, outermost first (e.g. region,category,subcategory). For splom: the numeric columns to cross-plot (default: all numeric). For parcats: the categorical dimensions to flow across (best with 3-4). For parcoords: the numeric axes, in order (default: all numeric). For ternary: exactly 3 numeric columns, the a, b and c parts.',
|
|
169
179
|
},
|
|
170
180
|
{
|
|
171
181
|
displayName: 'Dataset Pid',
|
|
@@ -174,6 +184,13 @@ exports.VizDescription = [
|
|
|
174
184
|
default: '',
|
|
175
185
|
description: 'A persistent identifier (PID) for the dataset - typically a full URL such as a DOI (https://doi.org/10.1234/abc) or other citable link. When set, a "PID" row is added to the metadata table at the top of the Data Schematic. http(s) and mailto values become a clickable link; any other scheme is shown as plain text. HTML output only. Only affects `smart`.',
|
|
176
186
|
},
|
|
187
|
+
{
|
|
188
|
+
displayName: 'Degrees',
|
|
189
|
+
name: 'degrees',
|
|
190
|
+
type: 'boolean',
|
|
191
|
+
default: false,
|
|
192
|
+
description: 'For barpolar: read --x as an angle in degrees (0 = north, clockwise) and draw each bar at that angle, so gaps in the data stay gaps. Without it, each distinct --x value gets an evenly spaced slot, which suits hours, months and complete degree bins (compass names are placed by bearing either way).',
|
|
193
|
+
},
|
|
177
194
|
{
|
|
178
195
|
displayName: 'Delimiter',
|
|
179
196
|
name: 'delimiter',
|
|
@@ -339,8 +356,8 @@ exports.VizDescription = [
|
|
|
339
356
|
displayName: 'Location Mode',
|
|
340
357
|
name: 'locationMode',
|
|
341
358
|
type: 'string',
|
|
342
|
-
default: '
|
|
343
|
-
description: 'How --locations values are matched to regions. One of: iso3 (
|
|
359
|
+
default: '',
|
|
360
|
+
description: 'How --locations values are matched to regions. One of: iso3 (ISO-3166-1 alpha-3 country codes), usa-states (2-letter US state codes), country-names (full country names), geojson-id (match a --geojson feature id). Defaults to geojson-id when a --geojson source is given (without --geocode), else iso3.',
|
|
344
361
|
},
|
|
345
362
|
{
|
|
346
363
|
displayName: 'Locations',
|
|
@@ -382,7 +399,14 @@ exports.VizDescription = [
|
|
|
382
399
|
name: 'maxCharts',
|
|
383
400
|
type: 'number',
|
|
384
401
|
default: 0,
|
|
385
|
-
description: 'Maximum number of panels in the Data Schematic. 0 (the default) means auto: draw every eligible column (up to
|
|
402
|
+
description: 'Maximum number of panels in the Data Schematic. 0 (the default) means auto: draw every eligible column (up to 65), for both HTML and static image export. Up to 8 cartesian panels render as one typed subplot grid; beyond 8, HTML switches to an inline-div grid and static export uses domain-positioned axes to fit one image. Set a positive <n> to cap the panel count instead; eligible columns beyond the cap are reported but not drawn.',
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
displayName: 'No Daemon Bridge',
|
|
406
|
+
name: 'noDaemonBridge',
|
|
407
|
+
type: 'boolean',
|
|
408
|
+
default: false,
|
|
409
|
+
description: 'Leave out the qsv-clientd bridge script. By default a `smart` HTML Data Schematic sends one "hello" request to 127.0.0.1 when opened (port 14470, or QSV_CLIENTD_PORT at render time) and, only if a qsv-clientd daemon answers, offers a "Live data" chip to pair with it (approved in a shell) for drill-down, refresh, re-render and read-only queries. With no daemon it does nothing, so the page stays self-contained. Setting QSV_VIZ_NO_DAEMON=1 has the same effect. The page\'s qsv-schematic-source provenance JSON is kept either way, but without the input fingerprint (which costs an extra read of the input) and without the source URL of a dc: input. HTML output only. Only affects `smart`. See https://github.com/dathere/qsv/blob/master/docs/DATA_SCHEMATIC.md',
|
|
386
410
|
},
|
|
387
411
|
{
|
|
388
412
|
displayName: 'No Headers',
|
|
@@ -405,6 +429,13 @@ exports.VizDescription = [
|
|
|
405
429
|
default: false,
|
|
406
430
|
description: 'Omit the "Other (N)" aggregate bar from frequency bar charts. It collects the categories beyond --limit (N = how many distinct categories were rolled up) and is shown by default. When just ONE category is left over, it is charted under its own name instead of as an opaque "Other (1)" bar.',
|
|
407
431
|
},
|
|
432
|
+
{
|
|
433
|
+
displayName: 'No Parcoords',
|
|
434
|
+
name: 'noParcoords',
|
|
435
|
+
type: 'boolean',
|
|
436
|
+
default: false,
|
|
437
|
+
description: 'Don\'t add the parallel-coordinates panel, which `smart` otherwise draws when 3 or more numeric columns correlate (|r| >= 0.3). Only affects `smart`.',
|
|
438
|
+
},
|
|
408
439
|
{
|
|
409
440
|
displayName: 'No Snap',
|
|
410
441
|
name: 'noSnap',
|
|
@@ -480,14 +511,14 @@ exports.VizDescription = [
|
|
|
480
511
|
name: 'series',
|
|
481
512
|
type: 'string',
|
|
482
513
|
default: '',
|
|
483
|
-
description: 'Column to split into multiple series (one trace per distinct value). Applies to bar, line, scatter, scatter3d, radar, map and geo.',
|
|
514
|
+
description: 'Column to split into multiple series (one trace per distinct value). Applies to bar, line, scatter, scatter3d, radar, barpolar (stacked), ternary, map and geo.',
|
|
484
515
|
},
|
|
485
516
|
{
|
|
486
517
|
displayName: 'Size',
|
|
487
518
|
name: 'size',
|
|
488
519
|
type: 'string',
|
|
489
520
|
default: '',
|
|
490
|
-
description: 'For scatter/scatter3d/map/geo: a numeric column to encode as marker size, producing a bubble chart (values are rescaled to a readable pixel range). Cannot be combined with --series, EXCEPT on an animated scatter (see the --slider option), where the --series column names the entity and this column is the third data variable. In map density mode, this column is the heatmap weight.',
|
|
521
|
+
description: 'For scatter/scatter3d/ternary/map/geo: a numeric column to encode as marker size, producing a bubble chart (values are rescaled to a readable pixel range). Cannot be combined with --series, EXCEPT on an animated scatter (see the --slider option), where the --series column names the entity and this column is the third data variable. In map density mode, this column is the heatmap weight.',
|
|
491
522
|
},
|
|
492
523
|
{
|
|
493
524
|
displayName: 'Slider',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dartfx/n8n-nodes-qsv",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "n8n community node for datHere QSV ultra-fast tabular data wrangling, stats, and transformations (requires 'qsv' CLI on host)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -54,10 +54,16 @@
|
|
|
54
54
|
"tsx": "^4.19.3",
|
|
55
55
|
"typescript": "^5.7.3"
|
|
56
56
|
},
|
|
57
|
+
"qsvVersion": "26.0.0",
|
|
57
58
|
"scripts": {
|
|
58
59
|
"build": "tsc && gulp build:icons",
|
|
59
60
|
"dev": "tsc --watch",
|
|
60
61
|
"generate:qsv": "tsx scripts/generate-qsv-nodes.ts",
|
|
62
|
+
"sync:qsv": "tsx scripts/sync-qsv-release.ts --local --align-minor",
|
|
63
|
+
"sync:qsv:upstream": "tsx scripts/sync-qsv-release.ts --align-minor",
|
|
64
|
+
"sync:qsv:check": "tsx scripts/sync-qsv-release.ts --check-only",
|
|
65
|
+
"release:staging": "tsx scripts/sync-qsv-release.ts --local --align-minor --staging --publish",
|
|
66
|
+
"release:prod": "tsx scripts/sync-qsv-release.ts --local --align-minor --git-tag --push",
|
|
61
67
|
"format": "prettier --write \"**/*.{ts,js,json,md}\"",
|
|
62
68
|
"lint": "eslint \"**/*.ts\"",
|
|
63
69
|
"test": "jest --passWithNoTests",
|