rowpipe 2.1.0 → 2.2.1
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 +183 -5
- package/dist/analytics/profiler.d.ts +56 -0
- package/dist/analytics/profiler.d.ts.map +1 -0
- package/dist/analytics/profiler.js +277 -0
- package/dist/analytics/profiler.js.map +1 -0
- package/dist/analytics/schema-inference.d.ts.map +1 -1
- package/dist/analytics/schema-inference.js +14 -0
- package/dist/analytics/schema-inference.js.map +1 -1
- package/dist/cli/commands/clean.d.ts +15 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +108 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +6 -0
- package/dist/cli/commands/convert.d.ts.map +1 -1
- package/dist/cli/commands/convert.js +6 -6
- package/dist/cli/commands/convert.js.map +1 -1
- package/dist/cli/commands/db.d.ts +35 -0
- package/dist/cli/commands/db.d.ts.map +1 -0
- package/dist/cli/commands/db.js +173 -0
- package/dist/cli/commands/db.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +8 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +89 -2
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/join.d.ts +23 -0
- package/dist/cli/commands/join.d.ts.map +1 -0
- package/dist/cli/commands/join.js +97 -0
- package/dist/cli/commands/join.js.map +1 -0
- package/dist/cli/commands/pipeline.d.ts +20 -0
- package/dist/cli/commands/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/pipeline.js +53 -12
- package/dist/cli/commands/pipeline.js.map +1 -1
- package/dist/cli/commands/profile.d.ts +22 -0
- package/dist/cli/commands/profile.d.ts.map +1 -0
- package/dist/cli/commands/profile.js +53 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/view.d.ts +12 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +52 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/commands/window.d.ts +10 -0
- package/dist/cli/commands/window.d.ts.map +1 -0
- package/dist/cli/commands/window.js +87 -0
- package/dist/cli/commands/window.js.map +1 -0
- package/dist/cli/index.js +201 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/core/batch.d.ts +1 -1
- package/dist/core/batch.d.ts.map +1 -1
- package/dist/core/batch.js.map +1 -1
- package/dist/core/pipeline.d.ts +2 -2
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +5 -2
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/types.d.ts +21 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/db/adapters/index.d.ts +6 -0
- package/dist/db/adapters/index.d.ts.map +1 -0
- package/dist/db/adapters/index.js +21 -0
- package/dist/db/adapters/index.js.map +1 -0
- package/dist/db/adapters/mysql.d.ts +16 -0
- package/dist/db/adapters/mysql.d.ts.map +1 -0
- package/dist/db/adapters/mysql.js +230 -0
- package/dist/db/adapters/mysql.js.map +1 -0
- package/dist/db/adapters/postgres.d.ts +17 -0
- package/dist/db/adapters/postgres.d.ts.map +1 -0
- package/dist/db/adapters/postgres.js +239 -0
- package/dist/db/adapters/postgres.js.map +1 -0
- package/dist/db/adapters/sqlite.d.ts +19 -0
- package/dist/db/adapters/sqlite.d.ts.map +1 -0
- package/dist/db/adapters/sqlite.js +241 -0
- package/dist/db/adapters/sqlite.js.map +1 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +11 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/mapping.d.ts +45 -0
- package/dist/db/mapping.d.ts.map +1 -0
- package/dist/db/mapping.js +222 -0
- package/dist/db/mapping.js.map +1 -0
- package/dist/db/pushdown.d.ts +25 -0
- package/dist/db/pushdown.d.ts.map +1 -0
- package/dist/db/pushdown.js +165 -0
- package/dist/db/pushdown.js.map +1 -0
- package/dist/db/sink.d.ts +15 -0
- package/dist/db/sink.d.ts.map +1 -0
- package/dist/db/sink.js +47 -0
- package/dist/db/sink.js.map +1 -0
- package/dist/db/source.d.ts +14 -0
- package/dist/db/source.d.ts.map +1 -0
- package/dist/db/source.js +69 -0
- package/dist/db/source.js.map +1 -0
- package/dist/db/types.d.ts +80 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/db/url.d.ts +15 -0
- package/dist/db/url.d.ts.map +1 -0
- package/dist/db/url.js +145 -0
- package/dist/db/url.js.map +1 -0
- package/dist/diff/hash.d.ts.map +1 -1
- package/dist/diff/hash.js +4 -3
- package/dist/diff/hash.js.map +1 -1
- package/dist/diff/key.d.ts.map +1 -1
- package/dist/diff/key.js +8 -1
- package/dist/diff/key.js.map +1 -1
- package/dist/diff/reporter.d.ts.map +1 -1
- package/dist/diff/reporter.js +5 -3
- package/dist/diff/reporter.js.map +1 -1
- package/dist/diff/storage/disk-index.d.ts.map +1 -1
- package/dist/diff/storage/disk-index.js +2 -1
- package/dist/diff/storage/disk-index.js.map +1 -1
- package/dist/diff/storage/memory-index.d.ts.map +1 -1
- package/dist/diff/storage/memory-index.js +3 -2
- package/dist/diff/storage/memory-index.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/planner/executor.d.ts.map +1 -1
- package/dist/planner/executor.js +7 -0
- package/dist/planner/executor.js.map +1 -1
- package/dist/planner/types.d.ts +4 -0
- package/dist/planner/types.d.ts.map +1 -1
- package/dist/readers/csv.d.ts.map +1 -1
- package/dist/readers/csv.js +1 -2
- package/dist/readers/csv.js.map +1 -1
- package/dist/readers/index.d.ts +5 -1
- package/dist/readers/index.d.ts.map +1 -1
- package/dist/readers/index.js +43 -0
- package/dist/readers/index.js.map +1 -1
- package/dist/readers/json.d.ts.map +1 -1
- package/dist/readers/json.js +1 -2
- package/dist/readers/json.js.map +1 -1
- package/dist/readers/jsonl.d.ts.map +1 -1
- package/dist/readers/jsonl.js +1 -2
- package/dist/readers/jsonl.js.map +1 -1
- package/dist/readers/multi-file.d.ts +29 -0
- package/dist/readers/multi-file.d.ts.map +1 -0
- package/dist/readers/multi-file.js +169 -0
- package/dist/readers/multi-file.js.map +1 -0
- package/dist/transforms/clean.d.ts +18 -0
- package/dist/transforms/clean.d.ts.map +1 -0
- package/dist/transforms/clean.js +118 -0
- package/dist/transforms/clean.js.map +1 -0
- package/dist/transforms/expression.d.ts.map +1 -1
- package/dist/transforms/expression.js +12 -0
- package/dist/transforms/expression.js.map +1 -1
- package/dist/transforms/jit-compiler.d.ts +50 -0
- package/dist/transforms/jit-compiler.d.ts.map +1 -0
- package/dist/transforms/jit-compiler.js +275 -0
- package/dist/transforms/jit-compiler.js.map +1 -0
- package/dist/transforms/join/index-storage.d.ts +36 -0
- package/dist/transforms/join/index-storage.d.ts.map +1 -0
- package/dist/transforms/join/index-storage.js +176 -0
- package/dist/transforms/join/index-storage.js.map +1 -0
- package/dist/transforms/join/index.d.ts +4 -0
- package/dist/transforms/join/index.d.ts.map +1 -0
- package/dist/transforms/join/index.js +4 -0
- package/dist/transforms/join/index.js.map +1 -0
- package/dist/transforms/join/join.d.ts +15 -0
- package/dist/transforms/join/join.d.ts.map +1 -0
- package/dist/transforms/join/join.js +216 -0
- package/dist/transforms/join/join.js.map +1 -0
- package/dist/transforms/join/types.d.ts +29 -0
- package/dist/transforms/join/types.d.ts.map +1 -0
- package/dist/transforms/join/types.js +2 -0
- package/dist/transforms/join/types.js.map +1 -0
- package/dist/transforms/window.d.ts +24 -0
- package/dist/transforms/window.d.ts.map +1 -0
- package/dist/transforms/window.js +317 -0
- package/dist/transforms/window.js.map +1 -0
- package/dist/ui/colors.d.ts +57 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +94 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/viewer.d.ts +67 -0
- package/dist/ui/viewer.d.ts.map +1 -0
- package/dist/ui/viewer.js +673 -0
- package/dist/ui/viewer.js.map +1 -0
- package/dist/utils/compression.d.ts +68 -19
- package/dist/utils/compression.d.ts.map +1 -1
- package/dist/utils/compression.js +222 -34
- package/dist/utils/compression.js.map +1 -1
- package/dist/utils/formatting.d.ts +5 -0
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +15 -0
- package/dist/utils/formatting.js.map +1 -1
- package/dist/writers/csv.d.ts.map +1 -1
- package/dist/writers/csv.js +13 -14
- package/dist/writers/csv.js.map +1 -1
- package/dist/writers/index.d.ts +1 -0
- package/dist/writers/index.d.ts.map +1 -1
- package/dist/writers/index.js +35 -0
- package/dist/writers/index.js.map +1 -1
- package/dist/writers/json.d.ts.map +1 -1
- package/dist/writers/json.js +6 -5
- package/dist/writers/json.js.map +1 -1
- package/dist/writers/jsonl.d.ts.map +1 -1
- package/dist/writers/jsonl.js +6 -5
- package/dist/writers/jsonl.js.map +1 -1
- package/dist/writers/markdown.d.ts.map +1 -1
- package/dist/writers/markdown.js +5 -4
- package/dist/writers/markdown.js.map +1 -1
- package/dist/writers/parquet.d.ts +1 -1
- package/dist/writers/parquet.d.ts.map +1 -1
- package/package.json +10 -2
- package/skills/rowpipe/SKILL.md +8 -4
package/README.md
CHANGED
|
@@ -13,11 +13,15 @@ Designed around stream backpressure and batch processing, Rowpipe processes mult
|
|
|
13
13
|
## Highlights
|
|
14
14
|
|
|
15
15
|
- **Stream-First Architecture**: Datasets are never buffered entirely in memory; rows flow in configurable batches through async generator pipelines.
|
|
16
|
-
- **Rich Format Ecosystem**: Native streaming support for **CSV, TSV / PSV, JSON, JSONL, XLSX, Apache Parquet (`.parquet`), Markdown tables (`.md`), and Gzip (`.gz`)**.
|
|
16
|
+
- **Rich Format Ecosystem**: Native streaming support for **PostgreSQL, MySQL, SQLite, CSV, TSV / PSV, JSON, JSONL, XLSX, Apache Parquet (`.parquet`), Markdown tables (`.md`), and Gzip (`.gz`)**.
|
|
17
|
+
- **First-Class Database Streaming (`rowpipe db`)**: True cursor-based streaming sources and sinks for PostgreSQL, MySQL, and SQLite. "Databases are just another Rowpipe source and sink" — rows normalize directly into standard `DataBatch` objects with zero parallel data models.
|
|
18
|
+
- **Intelligent Pushdown Optimizer**: Automatically pushes compatible operations (`SELECT`, `WHERE`, `ORDER BY`, `LIMIT`, `OFFSET`) down into database queries in `--table` mode while seamlessly executing non-pushdownable transforms in the local streaming pipeline.
|
|
19
|
+
- **Database Writing, Migration & DDL**: Stream directly into database tables (`--to-db`) with automatic table creation (`--create-table`), batched inserts, transactions (`--transaction`), dialect-specific upsert (`--upsert --conflict <cols>`), and truncate (`--truncate`).
|
|
20
|
+
- **Lossless Type Precision**: Preserves full `BIGINT` and arbitrary precision `DECIMAL` / `NUMERIC` values without floating point corruption. Safely maps `JSONB`, `BYTEA`/`BLOB`, dates, and timestamps.
|
|
21
|
+
- **Connection Security & Credential Masking**: Automatically sanitizes database passwords across all logs, explain plans, errors, and metadata (`postgres://user:***@host/db`).
|
|
17
22
|
- **Apache Parquet Support**: High-performance columnar binary format reader (Snappy, Zstd, Gzip decompression via pure JS) and streaming writer.
|
|
18
|
-
- **Cross-Format Conversion & Multi-Sheet Export**: Convert seamlessly across all formats. Export individual Excel sheets or bulk export all worksheets with `--all-sheets`.
|
|
19
23
|
- **Filesystem as Data (`rowpipe files`)**: First-class streaming filesystem source adapter. Directories and files become streams of tabular records (`path`, `size`, `type`, `extension`, `modified_at`, streaming `hash`, `mime`) composable with `filter`, `select`, `stats`, `convert`, and `diff`.
|
|
20
|
-
- **Cross-Format Dataset Diffing (`rowpipe diff`)**: High-performance, stream-first comparison across CSV, JSONL, XLSX, and
|
|
24
|
+
- **Cross-Format Dataset Diffing (`rowpipe diff`)**: High-performance, stream-first comparison across CSV, JSONL, XLSX, Parquet, and Database tables with bounded memory and automatic spill-to-disk. Supports composite keys, duplicate policies, value tolerance, column filtering, schema diffing, JSONL patch generation, and CI `--fail-on-diff` mode.
|
|
21
25
|
|
|
22
26
|
- **Zero-`eval` Safe Expression Engine**: Ultra-fast JIT closure-compiled evaluators supporting arithmetic (`revenue - cost`), string/date pipe functions (`email | lower | trim`), and direct JSON dot-notation (`payload.user.city`).
|
|
23
27
|
- **Map & Reduce Streaming Engine**: Compute row derivations (`rowpipe map`) and global or group-by aggregations (`rowpipe reduce --by country`) in a single pass.
|
|
@@ -549,11 +553,185 @@ rowpipe diff dist.snapshot.v1.jsonl dist.snapshot.v2.jsonl \
|
|
|
549
553
|
#### 5. Native Directory Diffing (`rowpipe files diff`)
|
|
550
554
|
Compare two directory trees directly:
|
|
551
555
|
|
|
556
|
+
---
|
|
557
|
+
|
|
558
|
+
## Databases
|
|
559
|
+
|
|
560
|
+
Rowpipe provides first-class streaming database support for **PostgreSQL, MySQL, and SQLite**.
|
|
561
|
+
|
|
562
|
+
The key architectural rule is:
|
|
563
|
+
|
|
564
|
+
> **Databases are just another Rowpipe source and sink.**
|
|
565
|
+
|
|
566
|
+
Database rows normalize directly into standard Rowpipe `DataBatch` and `Row` objects. There is no parallel execution engine or secondary row type — existing operations (`filter`, `select`, `sort`, `group`, `reduce`, `stats`, `diff`) compose natively without intermediate files or memory buffering.
|
|
567
|
+
|
|
568
|
+
```text
|
|
569
|
+
PostgreSQL / MySQL / SQLite / CSV / JSONL / Parquet / Files
|
|
570
|
+
↓
|
|
571
|
+
DataBatch / Row
|
|
572
|
+
↓
|
|
573
|
+
filter / select / map / sort
|
|
574
|
+
group / reduce / stats / diff
|
|
575
|
+
↓
|
|
576
|
+
TabularWriter
|
|
577
|
+
↓
|
|
578
|
+
PostgreSQL / MySQL / SQLite / CSV / JSONL / Parquet / Markdown
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### 1. Database Streaming Sources
|
|
582
|
+
|
|
583
|
+
Read directly from database tables or custom queries in bounded, cursor-based streams:
|
|
584
|
+
|
|
552
585
|
```bash
|
|
553
|
-
|
|
586
|
+
# Read from PostgreSQL table in streaming batches
|
|
587
|
+
rowpipe db postgres://localhost/mydb --table users
|
|
588
|
+
|
|
589
|
+
# Read from MySQL database
|
|
590
|
+
rowpipe db mysql://root@localhost/app --table orders
|
|
591
|
+
|
|
592
|
+
# Read from SQLite database file
|
|
593
|
+
rowpipe db sqlite://./data.db --table events
|
|
594
|
+
# or direct file path
|
|
595
|
+
rowpipe db ./data.db --table events
|
|
596
|
+
|
|
597
|
+
# Execute custom SQL query
|
|
598
|
+
rowpipe db postgres://localhost/mydb \
|
|
599
|
+
--query 'SELECT id, email, created_at FROM users WHERE active = true'
|
|
600
|
+
|
|
601
|
+
# Parameterized queries (driver-level binding)
|
|
602
|
+
rowpipe db postgres://localhost/mydb \
|
|
603
|
+
--query 'SELECT * FROM users WHERE age > $1 AND status = $2' \
|
|
604
|
+
--params '[30, "ACTIVE"]'
|
|
554
605
|
```
|
|
555
606
|
|
|
556
|
-
|
|
607
|
+
### 2. Output to Any Rowpipe Format
|
|
608
|
+
|
|
609
|
+
Database streams flow directly through Rowpipe writers to CSV, JSONL, Parquet, or Markdown tables:
|
|
610
|
+
|
|
611
|
+
```bash
|
|
612
|
+
# Stream PostgreSQL table to JSONL
|
|
613
|
+
rowpipe db postgres://localhost/app --table users --to jsonl > users.jsonl
|
|
614
|
+
|
|
615
|
+
# Stream MySQL query to CSV
|
|
616
|
+
rowpipe db mysql://localhost/app --query 'SELECT * FROM orders' --to csv > orders.csv
|
|
617
|
+
|
|
618
|
+
# Stream SQLite table to GitHub Markdown table
|
|
619
|
+
rowpipe db sqlite://./sales.db --table sales --limit 20 --to markdown
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
### 3. Pipeline Operations & Pushdown Optimizer
|
|
623
|
+
|
|
624
|
+
When querying tables with `--table`, Rowpipe's **Intelligent Pushdown Optimizer** analyzes the pipeline and pushes compatible operations directly into database SQL:
|
|
625
|
+
|
|
626
|
+
* `select` $\rightarrow$ `SELECT col1, col2`
|
|
627
|
+
* `filter` $\rightarrow$ `WHERE condition`
|
|
628
|
+
* `sort` $\rightarrow$ `ORDER BY col DESC`
|
|
629
|
+
* `limit` $\rightarrow$ `LIMIT N`
|
|
630
|
+
* `offset` $\rightarrow$ `OFFSET N`
|
|
631
|
+
|
|
632
|
+
Unsupported or complex operations safely remain in the local streaming pipeline.
|
|
633
|
+
|
|
634
|
+
```bash
|
|
635
|
+
# Pushes down WHERE, SELECT, ORDER BY, and LIMIT to database SQL
|
|
636
|
+
rowpipe db postgres://localhost/app \
|
|
637
|
+
--table users \
|
|
638
|
+
--filter 'active == true and age > 25' \
|
|
639
|
+
--select id,email,created_at \
|
|
640
|
+
--sort created_at:desc \
|
|
641
|
+
--limit 100 \
|
|
642
|
+
--to jsonl
|
|
643
|
+
|
|
644
|
+
# Mixed execution: pushdown WHERE + local aggregations
|
|
645
|
+
rowpipe db sqlite://./sales.db \
|
|
646
|
+
--table sales \
|
|
647
|
+
--where 'year = 2026' \
|
|
648
|
+
--group-by country \
|
|
649
|
+
--sum revenue \
|
|
650
|
+
--sort revenue_sum:desc
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
### 4. Database Sinks & File-to-Database Loading
|
|
654
|
+
|
|
655
|
+
Load CSV, JSONL, XLSX, Parquet, or other databases directly into database tables in batched transactions:
|
|
656
|
+
|
|
657
|
+
```bash
|
|
658
|
+
# Load CSV into PostgreSQL table with automatic DDL table creation
|
|
659
|
+
rowpipe users.csv \
|
|
660
|
+
--to-db postgres://localhost/app \
|
|
661
|
+
--to-table users \
|
|
662
|
+
--create-table
|
|
663
|
+
|
|
664
|
+
# Load JSONL into SQLite database
|
|
665
|
+
rowpipe events.jsonl \
|
|
666
|
+
--to-db sqlite://./app.db \
|
|
667
|
+
--to-table events \
|
|
668
|
+
--create-table
|
|
669
|
+
|
|
670
|
+
# Dialect-specific Upsert on conflict keys
|
|
671
|
+
rowpipe users.csv \
|
|
672
|
+
--to-db postgres://localhost/app \
|
|
673
|
+
--to-table users \
|
|
674
|
+
--upsert \
|
|
675
|
+
--conflict id
|
|
676
|
+
|
|
677
|
+
# Destructive Truncate before bulk inserting
|
|
678
|
+
rowpipe new_catalog.parquet \
|
|
679
|
+
--to-db mysql://localhost/store \
|
|
680
|
+
--to-table catalog \
|
|
681
|
+
--truncate \
|
|
682
|
+
--transaction
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
### 5. Database-to-Database Migrations (Zero Intermediate Files)
|
|
686
|
+
|
|
687
|
+
Stream data directly between different database dialects with on-the-fly transformations:
|
|
688
|
+
|
|
689
|
+
```bash
|
|
690
|
+
# Migrate PostgreSQL table directly to SQLite with filtering & projection
|
|
691
|
+
rowpipe db postgres://production/app \
|
|
692
|
+
--table users \
|
|
693
|
+
--filter 'deleted_at == null' \
|
|
694
|
+
--select id,email,created_at \
|
|
695
|
+
--to-db sqlite://./backup.db \
|
|
696
|
+
--to-table active_users \
|
|
697
|
+
--create-table
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
### 6. Cross-Format Diffing with Databases
|
|
701
|
+
|
|
702
|
+
Diff a database table directly against a CSV, JSONL, or Parquet file using Rowpipe's diff engine:
|
|
703
|
+
|
|
704
|
+
```bash
|
|
705
|
+
# Compare PostgreSQL table against CSV export
|
|
706
|
+
rowpipe diff \
|
|
707
|
+
'postgres://localhost/app?table=users' \
|
|
708
|
+
users_backup.csv \
|
|
709
|
+
--key id \
|
|
710
|
+
--coerce
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
### 7. Database Introspection
|
|
714
|
+
|
|
715
|
+
Inspect tables and schema types without third-party database clients:
|
|
716
|
+
|
|
717
|
+
```bash
|
|
718
|
+
# List all tables in database
|
|
719
|
+
rowpipe db postgres://localhost/app --tables
|
|
720
|
+
|
|
721
|
+
# Inspect column schema, data types, and nullability
|
|
722
|
+
rowpipe db postgres://localhost/app --schema users
|
|
723
|
+
|
|
724
|
+
# Output schema as machine-readable JSON
|
|
725
|
+
rowpipe db postgres://localhost/app --schema users --json
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
### 8. Lossless Type Mapping & Security
|
|
729
|
+
|
|
730
|
+
- **BIGINT**: Values outside JavaScript safe integer range (e.g. `9223372036854775807`) are preserved losslessly as `bigint` without silent precision loss.
|
|
731
|
+
- **DECIMAL / NUMERIC**: High-precision numbers survive database $\leftrightarrow$ file workflows without floating point truncation.
|
|
732
|
+
- **JSON / JSONB**: Native objects and arrays are preserved and parsed appropriately.
|
|
733
|
+
- **BYTEA / BLOB**: Binary buffers are mapped cleanly without dumping corrupted text to stdout.
|
|
734
|
+
- **Credential Masking**: Connection URLs containing passwords (e.g. `postgres://admin:secret@host/db`) are automatically masked (`postgres://admin:***@host/db`) across all logs, explain plans, progress outputs, and errors.
|
|
557
735
|
|
|
558
736
|
---
|
|
559
737
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Aggregator, ColumnType, Row, SemanticType } from "../core/types.js";
|
|
2
|
+
export interface ColumnProfileResult {
|
|
3
|
+
name: string;
|
|
4
|
+
inferredType: ColumnType;
|
|
5
|
+
typeConfidence: number;
|
|
6
|
+
typeBreakdown: Record<string, number>;
|
|
7
|
+
anomalies: unknown[];
|
|
8
|
+
totalRows: number;
|
|
9
|
+
nullCount: number;
|
|
10
|
+
nullPercentage: number;
|
|
11
|
+
emptyStringCount: number;
|
|
12
|
+
approxDistinctCount: number;
|
|
13
|
+
distinctPercentage: number;
|
|
14
|
+
semanticType?: SemanticType;
|
|
15
|
+
semanticConfidence?: number;
|
|
16
|
+
isNumeric: boolean;
|
|
17
|
+
min?: number;
|
|
18
|
+
max?: number;
|
|
19
|
+
sum?: number;
|
|
20
|
+
mean?: number;
|
|
21
|
+
stddev?: number;
|
|
22
|
+
zerosCount?: number;
|
|
23
|
+
negativeCount?: number;
|
|
24
|
+
isString: boolean;
|
|
25
|
+
minLength?: number;
|
|
26
|
+
maxLength?: number;
|
|
27
|
+
avgLength?: number;
|
|
28
|
+
topValues?: Array<{
|
|
29
|
+
value: string;
|
|
30
|
+
count: number;
|
|
31
|
+
percentage: number;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export interface DatasetProfileResult {
|
|
35
|
+
totalRows: number;
|
|
36
|
+
totalColumns: number;
|
|
37
|
+
columns: ColumnProfileResult[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Single-pass Streaming Dataset Profiler.
|
|
41
|
+
*/
|
|
42
|
+
export declare class DatasetProfiler implements Aggregator<DatasetProfileResult> {
|
|
43
|
+
private columnProfilers;
|
|
44
|
+
private totalRows;
|
|
45
|
+
add(row: Row): void;
|
|
46
|
+
result(): DatasetProfileResult;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Formats profile results as an aligned terminal table.
|
|
50
|
+
*/
|
|
51
|
+
export declare function formatProfileTerminal(profile: DatasetProfileResult): string;
|
|
52
|
+
/**
|
|
53
|
+
* Formats profile results as a GitHub Flavored Markdown document.
|
|
54
|
+
*/
|
|
55
|
+
export declare function formatProfileMarkdown(profile: DatasetProfileResult): string;
|
|
56
|
+
//# sourceMappingURL=profiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../../src/analytics/profiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMlF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,UAAU,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AA+LD;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU,CAAC,oBAAoB,CAAC;IACtE,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,SAAS,CAAK;IAEtB,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAYnB,MAAM,IAAI,oBAAoB;CAY/B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAsC3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CA+B3E"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { classifyPrimitiveType } from "./schema-inference.js";
|
|
2
|
+
import { detectSemanticType } from "./semantic-types.js";
|
|
3
|
+
import { HyperLogLog } from "./stats.js";
|
|
4
|
+
import { formatNumber, formatTable } from "../utils/formatting.js";
|
|
5
|
+
class ColumnProfiler {
|
|
6
|
+
name;
|
|
7
|
+
totalCount = 0;
|
|
8
|
+
nullCount = 0;
|
|
9
|
+
emptyStringCount = 0;
|
|
10
|
+
typeCounts = {
|
|
11
|
+
string: 0,
|
|
12
|
+
integer: 0,
|
|
13
|
+
bigint: 0,
|
|
14
|
+
number: 0,
|
|
15
|
+
decimal: 0,
|
|
16
|
+
boolean: 0,
|
|
17
|
+
date: 0,
|
|
18
|
+
datetime: 0,
|
|
19
|
+
binary: 0,
|
|
20
|
+
json: 0,
|
|
21
|
+
null: 0,
|
|
22
|
+
mixed: 0,
|
|
23
|
+
};
|
|
24
|
+
semanticCounts = {};
|
|
25
|
+
hll = new HyperLogLog(10);
|
|
26
|
+
frequencies = new Map();
|
|
27
|
+
// Numeric tracking (Welford's algorithm)
|
|
28
|
+
numericCount = 0;
|
|
29
|
+
numMin = Number.POSITIVE_INFINITY;
|
|
30
|
+
numMax = Number.NEGATIVE_INFINITY;
|
|
31
|
+
numSum = 0;
|
|
32
|
+
welfordMean = 0;
|
|
33
|
+
welfordM2 = 0;
|
|
34
|
+
zerosCount = 0;
|
|
35
|
+
negativeCount = 0;
|
|
36
|
+
// String tracking
|
|
37
|
+
stringCount = 0;
|
|
38
|
+
strMinLen = Number.POSITIVE_INFINITY;
|
|
39
|
+
strMaxLen = 0;
|
|
40
|
+
strSumLen = 0;
|
|
41
|
+
// Anomaly tracking
|
|
42
|
+
anomalies = [];
|
|
43
|
+
constructor(name) {
|
|
44
|
+
this.name = name;
|
|
45
|
+
}
|
|
46
|
+
add(val) {
|
|
47
|
+
this.totalCount++;
|
|
48
|
+
if (val === null || val === undefined) {
|
|
49
|
+
this.nullCount++;
|
|
50
|
+
this.typeCounts.null++;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (val === "") {
|
|
54
|
+
this.emptyStringCount++;
|
|
55
|
+
this.typeCounts.null++;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const valStr = String(val);
|
|
59
|
+
this.hll.add(valStr);
|
|
60
|
+
// Track top frequency for up to 1000 distinct items
|
|
61
|
+
if (this.frequencies.size < 1000 || this.frequencies.has(valStr)) {
|
|
62
|
+
this.frequencies.set(valStr, (this.frequencies.get(valStr) || 0) + 1);
|
|
63
|
+
}
|
|
64
|
+
const primType = classifyPrimitiveType(val);
|
|
65
|
+
this.typeCounts[primType] = (this.typeCounts[primType] || 0) + 1;
|
|
66
|
+
// Semantic type detection
|
|
67
|
+
if (typeof val === "string" && val.length > 2) {
|
|
68
|
+
const sem = detectSemanticType(val);
|
|
69
|
+
if (sem) {
|
|
70
|
+
this.semanticCounts[sem] = (this.semanticCounts[sem] || 0) + 1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Numeric aggregation
|
|
74
|
+
const numVal = typeof val === "number" ? val : (typeof val === "string" && /^-?\d+(?:\.\d+)?$/.test(val.trim()) ? Number(val) : NaN);
|
|
75
|
+
if (!Number.isNaN(numVal)) {
|
|
76
|
+
this.numericCount++;
|
|
77
|
+
this.numSum += numVal;
|
|
78
|
+
if (numVal < this.numMin)
|
|
79
|
+
this.numMin = numVal;
|
|
80
|
+
if (numVal > this.numMax)
|
|
81
|
+
this.numMax = numVal;
|
|
82
|
+
if (numVal === 0)
|
|
83
|
+
this.zerosCount++;
|
|
84
|
+
if (numVal < 0)
|
|
85
|
+
this.negativeCount++;
|
|
86
|
+
// Welford's algorithm for online variance
|
|
87
|
+
const delta = numVal - this.welfordMean;
|
|
88
|
+
this.welfordMean += delta / this.numericCount;
|
|
89
|
+
const delta2 = numVal - this.welfordMean;
|
|
90
|
+
this.welfordM2 += delta * delta2;
|
|
91
|
+
}
|
|
92
|
+
// String aggregation
|
|
93
|
+
if (typeof val === "string") {
|
|
94
|
+
this.stringCount++;
|
|
95
|
+
const len = val.length;
|
|
96
|
+
if (len < this.strMinLen)
|
|
97
|
+
this.strMinLen = len;
|
|
98
|
+
if (len > this.strMaxLen)
|
|
99
|
+
this.strMaxLen = len;
|
|
100
|
+
this.strSumLen += len;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
computeResult() {
|
|
104
|
+
const nonNullRows = this.totalCount - this.nullCount - this.emptyStringCount;
|
|
105
|
+
let dominantType = "string";
|
|
106
|
+
let maxTypeCount = 0;
|
|
107
|
+
for (const [t, count] of Object.entries(this.typeCounts)) {
|
|
108
|
+
if (t === "null")
|
|
109
|
+
continue;
|
|
110
|
+
if (count > maxTypeCount) {
|
|
111
|
+
maxTypeCount = count;
|
|
112
|
+
dominantType = t;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const typeConfidence = nonNullRows > 0 ? maxTypeCount / nonNullRows : 1;
|
|
116
|
+
const isNumeric = dominantType === "integer" || dominantType === "number" || dominantType === "decimal" || dominantType === "bigint";
|
|
117
|
+
const isString = dominantType === "string" || dominantType === "date" || dominantType === "datetime";
|
|
118
|
+
// Top values calculation
|
|
119
|
+
const sortedFreq = Array.from(this.frequencies.entries())
|
|
120
|
+
.sort((a, b) => b[1] - a[1])
|
|
121
|
+
.slice(0, 5)
|
|
122
|
+
.map(([value, count]) => ({
|
|
123
|
+
value,
|
|
124
|
+
count,
|
|
125
|
+
percentage: this.totalCount > 0 ? Math.round((count / this.totalCount) * 1000) / 10 : 0,
|
|
126
|
+
}));
|
|
127
|
+
// Semantic type
|
|
128
|
+
let semanticType;
|
|
129
|
+
let semanticConfidence;
|
|
130
|
+
let maxSemCount = 0;
|
|
131
|
+
for (const [sem, count] of Object.entries(this.semanticCounts)) {
|
|
132
|
+
if (count > maxSemCount) {
|
|
133
|
+
maxSemCount = count;
|
|
134
|
+
semanticType = sem;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (semanticType && nonNullRows > 0) {
|
|
138
|
+
semanticConfidence = Math.round((maxSemCount / nonNullRows) * 100) / 100;
|
|
139
|
+
}
|
|
140
|
+
const approxDistinct = this.hll.count();
|
|
141
|
+
const res = {
|
|
142
|
+
name: this.name,
|
|
143
|
+
inferredType: dominantType,
|
|
144
|
+
typeConfidence: Math.round(typeConfidence * 100) / 100,
|
|
145
|
+
typeBreakdown: { ...this.typeCounts },
|
|
146
|
+
anomalies: this.anomalies,
|
|
147
|
+
totalRows: this.totalCount,
|
|
148
|
+
nullCount: this.nullCount + this.emptyStringCount,
|
|
149
|
+
nullPercentage: this.totalCount > 0 ? Math.round(((this.nullCount + this.emptyStringCount) / this.totalCount) * 1000) / 10 : 0,
|
|
150
|
+
emptyStringCount: this.emptyStringCount,
|
|
151
|
+
approxDistinctCount: approxDistinct,
|
|
152
|
+
distinctPercentage: this.totalCount > 0 ? Math.round((approxDistinct / this.totalCount) * 1000) / 10 : 0,
|
|
153
|
+
semanticType,
|
|
154
|
+
semanticConfidence,
|
|
155
|
+
isNumeric,
|
|
156
|
+
isString,
|
|
157
|
+
topValues: sortedFreq,
|
|
158
|
+
};
|
|
159
|
+
if (isNumeric && this.numericCount > 0) {
|
|
160
|
+
res.min = this.numMin === Number.POSITIVE_INFINITY ? undefined : this.numMin;
|
|
161
|
+
res.max = this.numMax === Number.NEGATIVE_INFINITY ? undefined : this.numMax;
|
|
162
|
+
res.sum = this.numSum;
|
|
163
|
+
res.mean = this.welfordMean;
|
|
164
|
+
res.stddev = this.numericCount > 1 ? Math.sqrt(this.welfordM2 / (this.numericCount - 1)) : 0;
|
|
165
|
+
res.zerosCount = this.zerosCount;
|
|
166
|
+
res.negativeCount = this.negativeCount;
|
|
167
|
+
}
|
|
168
|
+
if (isString && this.stringCount > 0) {
|
|
169
|
+
res.minLength = this.strMinLen === Number.POSITIVE_INFINITY ? 0 : this.strMinLen;
|
|
170
|
+
res.maxLength = this.strMaxLen;
|
|
171
|
+
res.avgLength = Math.round((this.strSumLen / this.stringCount) * 10) / 10;
|
|
172
|
+
}
|
|
173
|
+
return res;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Single-pass Streaming Dataset Profiler.
|
|
178
|
+
*/
|
|
179
|
+
export class DatasetProfiler {
|
|
180
|
+
columnProfilers = new Map();
|
|
181
|
+
totalRows = 0;
|
|
182
|
+
add(row) {
|
|
183
|
+
this.totalRows++;
|
|
184
|
+
for (const [col, val] of Object.entries(row)) {
|
|
185
|
+
let profiler = this.columnProfilers.get(col);
|
|
186
|
+
if (!profiler) {
|
|
187
|
+
profiler = new ColumnProfiler(col);
|
|
188
|
+
this.columnProfilers.set(col, profiler);
|
|
189
|
+
}
|
|
190
|
+
profiler.add(val);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
result() {
|
|
194
|
+
const columns = [];
|
|
195
|
+
for (const profiler of this.columnProfilers.values()) {
|
|
196
|
+
columns.push(profiler.computeResult());
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
totalRows: this.totalRows,
|
|
200
|
+
totalColumns: columns.length,
|
|
201
|
+
columns,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Formats profile results as an aligned terminal table.
|
|
207
|
+
*/
|
|
208
|
+
export function formatProfileTerminal(profile) {
|
|
209
|
+
const headers = ["COLUMN", "TYPE", "DISTINCT", "NULLS (%)", "MIN / MIN-LEN", "MAX / MAX-LEN", "MEAN / TOP-VALUE"];
|
|
210
|
+
const rows = profile.columns.map((c) => {
|
|
211
|
+
const nullStr = `${formatNumber(c.nullCount)} (${c.nullPercentage}%)`;
|
|
212
|
+
const distinctStr = `${formatNumber(c.approxDistinctCount)} (${c.distinctPercentage}%)`;
|
|
213
|
+
let minStr = "-";
|
|
214
|
+
let maxStr = "-";
|
|
215
|
+
let meanStr = "-";
|
|
216
|
+
if (c.isNumeric && c.min !== undefined && c.max !== undefined) {
|
|
217
|
+
minStr = String(c.min);
|
|
218
|
+
maxStr = String(c.max);
|
|
219
|
+
meanStr = c.mean !== undefined ? (Math.round(c.mean * 100) / 100).toString() : "-";
|
|
220
|
+
}
|
|
221
|
+
else if (c.isString) {
|
|
222
|
+
minStr = `${c.minLength ?? 0} chars`;
|
|
223
|
+
maxStr = `${c.maxLength ?? 0} chars`;
|
|
224
|
+
if (c.topValues && c.topValues.length > 0) {
|
|
225
|
+
meanStr = `${c.topValues[0].value} (${c.topValues[0].count})`;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return [
|
|
229
|
+
c.name,
|
|
230
|
+
c.semanticType ? `${c.inferredType} (${c.semanticType})` : c.inferredType,
|
|
231
|
+
distinctStr,
|
|
232
|
+
nullStr,
|
|
233
|
+
minStr,
|
|
234
|
+
maxStr,
|
|
235
|
+
meanStr,
|
|
236
|
+
];
|
|
237
|
+
});
|
|
238
|
+
let out = `\n======================================================\n`;
|
|
239
|
+
out += ` Rowpipe Dataset Profile (${formatNumber(profile.totalRows)} rows, ${profile.totalColumns} columns)\n`;
|
|
240
|
+
out += `======================================================\n\n`;
|
|
241
|
+
out += formatTable(headers, rows);
|
|
242
|
+
out += "\n";
|
|
243
|
+
return out;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Formats profile results as a GitHub Flavored Markdown document.
|
|
247
|
+
*/
|
|
248
|
+
export function formatProfileMarkdown(profile) {
|
|
249
|
+
let md = `# Dataset Profile Report\n\n`;
|
|
250
|
+
md += `* **Total Rows**: ${formatNumber(profile.totalRows)}\n`;
|
|
251
|
+
md += `* **Total Columns**: ${profile.totalColumns}\n\n`;
|
|
252
|
+
md += `| Column | Type | Distinct | Nulls (%) | Min | Max | Mean / Top Value |\n`;
|
|
253
|
+
md += `| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n`;
|
|
254
|
+
for (const c of profile.columns) {
|
|
255
|
+
const typeStr = c.semanticType ? `${c.inferredType} (${c.semanticType})` : c.inferredType;
|
|
256
|
+
const nullStr = `${formatNumber(c.nullCount)} (${c.nullPercentage}%)`;
|
|
257
|
+
const distinctStr = `${formatNumber(c.approxDistinctCount)} (${c.distinctPercentage}%)`;
|
|
258
|
+
let minStr = "-";
|
|
259
|
+
let maxStr = "-";
|
|
260
|
+
let meanStr = "-";
|
|
261
|
+
if (c.isNumeric && c.min !== undefined && c.max !== undefined) {
|
|
262
|
+
minStr = String(c.min);
|
|
263
|
+
maxStr = String(c.max);
|
|
264
|
+
meanStr = c.mean !== undefined ? (Math.round(c.mean * 100) / 100).toString() : "-";
|
|
265
|
+
}
|
|
266
|
+
else if (c.isString) {
|
|
267
|
+
minStr = `${c.minLength ?? 0} chars`;
|
|
268
|
+
maxStr = `${c.maxLength ?? 0} chars`;
|
|
269
|
+
if (c.topValues && c.topValues.length > 0) {
|
|
270
|
+
meanStr = `${c.topValues[0].value} (${c.topValues[0].count})`;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
md += `| **${c.name}** | \`${typeStr}\` | ${distinctStr} | ${nullStr} | ${minStr} | ${maxStr} | ${meanStr} |\n`;
|
|
274
|
+
}
|
|
275
|
+
return md;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=profiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../src/analytics/profiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-inference.d.ts","sourceRoot":"","sources":["../../src/analytics/schema-inference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGlF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"schema-inference.d.ts","sourceRoot":"","sources":["../../src/analytics/schema-inference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGlF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CA+ChE;AAED,qBAAa,yBAA0B,YAAW,UAAU,CAAC,oBAAoB,CAAC;IAChF,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAQf;gBAEQ,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAIzC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IA2CnB,MAAM,IAAI,oBAAoB;CA6F/B"}
|
|
@@ -10,9 +10,19 @@ export function classifyPrimitiveType(value) {
|
|
|
10
10
|
}
|
|
11
11
|
if (typeof value === "boolean")
|
|
12
12
|
return "boolean";
|
|
13
|
+
if (typeof value === "bigint")
|
|
14
|
+
return "bigint";
|
|
13
15
|
if (typeof value === "number") {
|
|
14
16
|
return Number.isInteger(value) ? "integer" : "number";
|
|
15
17
|
}
|
|
18
|
+
if (Buffer.isBuffer(value) || value instanceof Uint8Array) {
|
|
19
|
+
return "binary";
|
|
20
|
+
}
|
|
21
|
+
if (typeof value === "object") {
|
|
22
|
+
if (value instanceof Date)
|
|
23
|
+
return "datetime";
|
|
24
|
+
return "json";
|
|
25
|
+
}
|
|
16
26
|
const str = String(value).trim();
|
|
17
27
|
// Boolean strings
|
|
18
28
|
if (["true", "false"].includes(str.toLowerCase())) {
|
|
@@ -56,10 +66,14 @@ export class SchemaInferenceAggregator {
|
|
|
56
66
|
counts: {
|
|
57
67
|
string: 0,
|
|
58
68
|
integer: 0,
|
|
69
|
+
bigint: 0,
|
|
59
70
|
number: 0,
|
|
71
|
+
decimal: 0,
|
|
60
72
|
boolean: 0,
|
|
61
73
|
date: 0,
|
|
62
74
|
datetime: 0,
|
|
75
|
+
binary: 0,
|
|
76
|
+
json: 0,
|
|
63
77
|
null: 0,
|
|
64
78
|
mixed: 0,
|
|
65
79
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-inference.js","sourceRoot":"","sources":["../../src/analytics/schema-inference.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema-inference.js","sourceRoot":"","sources":["../../src/analytics/schema-inference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface CleanCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
trim?: boolean;
|
|
4
|
+
nullValues?: string;
|
|
5
|
+
fillNulls?: string | string[];
|
|
6
|
+
coerce?: boolean;
|
|
7
|
+
stripChars?: string;
|
|
8
|
+
case?: "lower" | "upper" | "title";
|
|
9
|
+
dropEmptyRows?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Handles `rowpipe clean [input] [options]`
|
|
13
|
+
*/
|
|
14
|
+
export declare function cleanCommand(inputPath?: string, options?: CleanCommandOptions): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=clean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"AASA,OAAO,EAA8B,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEtF,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,SAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAqGf"}
|