Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions LICENSE-3rdparty.csv
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ anyhow,https://github.com/dtolnay/anyhow,MIT OR Apache-2.0,David Tolnay <dtolnay
arbitrary,https://github.com/rust-fuzz/arbitrary,MIT OR Apache-2.0,"The Rust-Fuzz Project Developers, Nick Fitzgerald <fitzgen@gmail.com>, Manish Goregaokar <manishsmail@gmail.com>, Simonas Kazlauskas <arbitrary@kazlauskas.me>, Brian L. Troutwine <brian@troutwine.us>, Corey Farwell <coreyf@rwell.org>"
arc-swap,https://github.com/vorner/arc-swap,MIT OR Apache-2.0,Michal 'vorner' Vaner <vorner@vorner.cz>
arrayvec,https://github.com/bluss/arrayvec,MIT OR Apache-2.0,bluss
arrow-array,https://github.com/apache/arrow-rs,Apache-2.0 AND MIT,Apache Arrow <dev@arrow.apache.org>
arrow-buffer,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-cast,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-cmp,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-data,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-ipc,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-json,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-ord,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-schema,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
arrow-select,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
ascii-canvas,https://github.com/lalrpop/ascii-canvas,Apache-2.0 OR MIT,Niko Matsakis <niko@alum.mit.edu>
assert-json-diff,https://github.com/davidpdrsn/assert-json-diff,MIT,David Pedersen <david.pdrsn@gmail.com>
async-channel,https://github.com/smol-rs/async-channel,Apache-2.0 OR MIT,Stjepan Glavina <stjepang@gmail.com>
Expand Down Expand Up @@ -261,6 +271,7 @@ fiat-crypto,https://github.com/mit-plv/fiat-crypto,MIT OR Apache-2.0 OR BSD-1-Cl
find-msvc-tools,https://github.com/rust-lang/cc-rs,MIT OR Apache-2.0,The find-msvc-tools Authors
findshlibs,https://github.com/gimli-rs/findshlibs,MIT OR Apache-2.0,The findshlibs Authors
fixedbitset,https://github.com/petgraph/fixedbitset,MIT OR Apache-2.0,bluss
flatbuffers,https://github.com/google/flatbuffers,Apache-2.0,"Robert Winslow <hello@rwinslow.com>, FlatBuffers Maintainers"
flate2,https://github.com/rust-lang/flate2-rs,MIT OR Apache-2.0,"Alex Crichton <alex@alexcrichton.com>, Josh Triplett <josh@joshtriplett.org>"
float-cmp,https://github.com/mikedilger/float-cmp,MIT,Mike Dilger <mike@mikedilger.com>
fluent-uri,https://github.com/yescallop/fluent-uri-rs,MIT,Scallop Ye <yescallop@gmail.com>
Expand Down Expand Up @@ -386,6 +397,12 @@ lambda_runtime_api_client,https://github.com/aws/aws-lambda-rust-runtime,Apache-
lazy_static,https://github.com/rust-lang-nursery/lazy-static.rs,MIT OR Apache-2.0,Marvin Löbel <loebel.marvin@gmail.com>
left-right,https://github.com/jonhoo/left-right,MIT OR Apache-2.0,Jon Gjengset <jon@thesquareplanet.com>
levenshtein_automata,https://github.com/tantivy-search/levenshtein-automata,MIT,Paul Masurel <paul.masurel@gmail.com>
lexical-core,https://github.com/Alexhuszagh/rust-lexical,MIT OR Apache-2.0,Alex Huszagh <ahuszagh@gmail.com>
lexical-parse-float,https://github.com/Alexhuszagh/rust-lexical,MIT OR Apache-2.0,Alex Huszagh <ahuszagh@gmail.com>
lexical-parse-integer,https://github.com/Alexhuszagh/rust-lexical,MIT OR Apache-2.0,Alex Huszagh <ahuszagh@gmail.com>
lexical-util,https://github.com/Alexhuszagh/rust-lexical,MIT OR Apache-2.0,Alex Huszagh <ahuszagh@gmail.com>
lexical-write-float,https://github.com/Alexhuszagh/rust-lexical,MIT OR Apache-2.0,Alex Huszagh <ahuszagh@gmail.com>
lexical-write-integer,https://github.com/Alexhuszagh/rust-lexical,MIT OR Apache-2.0,Alex Huszagh <ahuszagh@gmail.com>
libc,https://github.com/rust-lang/libc,MIT OR Apache-2.0,The Rust Project Developers
libm,https://github.com/rust-lang/compiler-builtins,MIT,"Alex Crichton <alex@alexcrichton.com>, Amanieu d'Antras <amanieu@gmail.com>, Jorge Aparicio <japaricious@gmail.com>, Trevor Gross <tg@trevorgross.com>"
libredox,https://gitlab.redox-os.org/redox-os/libredox,MIT,4lDO2 <4lDO2@protonmail.com>
Expand Down Expand Up @@ -442,6 +459,7 @@ normalize-line-endings,https://github.com/derekdreery/normalize-line-endings,Apa
nu-ansi-term,https://github.com/nushell/nu-ansi-term,MIT,"ogham@bsago.me, Ryan Scheel (Havvy) <ryan.havvy@gmail.com>, Josh Triplett <josh@joshtriplett.org>, The Nushell Project Developers"
num,https://github.com/rust-num/num,MIT OR Apache-2.0,The Rust Project Developers
num-bigint,https://github.com/rust-num/num-bigint,MIT OR Apache-2.0,The Rust Project Developers
num-bigint,https://github.com/rust-num/num-bigint,MIT OR Apache-2.0,The num-bigint Authors
num-bigint-dig,https://github.com/dignifiedquire/num-bigint,MIT OR Apache-2.0,"dignifiedquire <dignifiedquire@gmail.com>, The Rust Project Developers"
num-cmp,https://github.com/lifthrasiir/num-cmp,MIT OR Apache-2.0,Kang Seonghoon <public+git@mearie.org>
num-complex,https://github.com/rust-num/num-complex,MIT OR Apache-2.0,The Rust Project Developers
Expand Down Expand Up @@ -500,6 +518,7 @@ papergrid,https://github.com/zhiburt/tabled,MIT,Maxim Zhiburt <zhiburt@gmail.com
parking,https://github.com/smol-rs/parking,Apache-2.0 OR MIT,"Stjepan Glavina <stjepang@gmail.com>, The Rust Project Developers"
parking_lot,https://github.com/Amanieu/parking_lot,MIT OR Apache-2.0,Amanieu d'Antras <amanieu@gmail.com>
parking_lot_core,https://github.com/Amanieu/parking_lot,MIT OR Apache-2.0,Amanieu d'Antras <amanieu@gmail.com>
parquet,https://github.com/apache/arrow-rs,Apache-2.0,Apache Arrow <dev@arrow.apache.org>
parse-size,https://github.com/kennytm/parse-size,MIT,kennytm <kennytm@gmail.com>
paste,https://github.com/dtolnay/paste,MIT OR Apache-2.0,David Tolnay <dtolnay@gmail.com>
pbkdf2,https://github.com/RustCrypto/password-hashes/tree/master/pbkdf2,MIT OR Apache-2.0,RustCrypto Developers
Expand Down Expand Up @@ -667,6 +686,7 @@ security-framework-sys,https://github.com/kornelski/rust-security-framework,MIT
seize,https://github.com/ibraheemdev/seize,MIT,Ibraheem Ahmed <ibraheem@ibraheem.ca>
semver,https://github.com/dtolnay/semver,MIT OR Apache-2.0,David Tolnay <dtolnay@gmail.com>
separator,https://github.com/saghm/rust-separator,MIT,Saghm Rossi <saghmrossi@gmail.com>
seq-macro,https://github.com/dtolnay/seq-macro,MIT OR Apache-2.0,David Tolnay <dtolnay@gmail.com>
serde,https://github.com/serde-rs/serde,MIT OR Apache-2.0,"Erick Tryzelaar <erick.tryzelaar@gmail.com>, David Tolnay <dtolnay@gmail.com>"
serde-tuple-vec-map,https://github.com/daboross/serde-tuple-vec-map,MIT,David Ross <daboross@daboross.net>
serde-value,https://github.com/arcnmx/serde-value,MIT,arcnmx
Expand Down
38 changes: 38 additions & 0 deletions docs/internals/parquet-bulk-load.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Parquet bulk load (cli only)

Index a parquet file without merges.



```
quickwit tool local-ingest --index idx --input-path file:///data/x.parquet --num-pipelines N
```

## How it works

```
CLI
├─ plan = ParquetLoadPlan::try_new(file) // parses the footer once
├─ source_loader: File → ParquetSourceFactory { plan }
├─ IndexingService::new(...).with_source_loader(source_loader)
└─ SpawnPipeline + DetachIndexingPipeline × N → ParquetSource { plan }
```

- Sources pull row groups from the plan, decode them on the
blocking runtime, and emit JSON documents (`arrow_json`).
- Only the CLI replaces the source loader, so servers can't run a Parquet
source.

## Failure handling

No checkpoint. On failure, the CLI stops actors, attempts to clear the
index, and reports cleanup errors alongside the load error.
Rollback is best effort: detached uploads can outlive actor shutdown after an
early pipeline failure. Process termination is not covered.

## Benchmark settings

Size splits with `split_num_docs_target`; use `no_merge` to keep them
unchanged when running a server afterwards.
`--num-pipelines` defaults to half the CPUs: 16 pipelines was the fastest on an
m8gd.8xlarge (32 vCPUs) with 5M-document splits.
10 changes: 8 additions & 2 deletions docs/reference/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -761,7 +761,7 @@ Performs utility operations. Requires a node config.

### tool local-ingest

Indexes NDJSON documents locally.
Indexes NDJSON or Parquet documents locally.
`quickwit tool local-ingest [args]`

*Synopsis*
Expand All @@ -771,6 +771,8 @@ quickwit tool local-ingest
--index <index>
[--input-path <input-path>]
[--input-format <input-format>]
[--num-pipelines <num-pipelines>]
[--batch-num-rows <batch-num-rows>]
[--overwrite]
[--transform-script <transform-script>]
[--keep-cache]
Expand All @@ -782,10 +784,14 @@ quickwit tool local-ingest
|-----------------|-------------|--------:|
| `--index` | ID of the target index | |
| `--input-path` | Location of the input file. | |
| `--input-format` | Format of the input data. | `json` |
| `--input-format` | Format of the input documents: `json` or `plain`. Parquet rows are indexed as `json` documents. | `json` |
| `--num-pipelines` | Number of indexing pipelines running in parallel. Values greater than 1 require a `.parquet` input file. Defaults to half the number of CPUs for a `.parquet` input file, 1 otherwise. | |
| `--batch-num-rows` | Number of Parquet rows decoded at once. Only valid with a `.parquet` input file. | |
| `--overwrite` | Overwrites pre-existing index. | |
| `--transform-script` | VRL program to transform docs before ingesting. | |
| `--keep-cache` | Does not clear local cache directory upon completion. | |

An `--input-path` ending with `.parquet` is bulk loaded by several pipelines without merging (benchmark only, requires the `parquet` Cargo feature). The index must be empty (`--overwrite` clears it); cleanup on failure is best effort. See `docs/internals/parquet-bulk-load.md`.
### tool extract-split

Downloads and extracts a split to a directory.
Expand Down
Loading
Loading