Skip to content

vectra

0.13.0Package record

Columnar Query Engine for Larger-than-RAM Data

1packages depend
3.1Kdownloads / year
68.3%test coverage
13/13flavors OK

Overview

About

A minimal columnar query engine with lazy execution on datasets larger than RAM. Provides 'dplyr'-like verbs (filter(), select(), mutate(), group_by(), summarise(), joins, window functions) and common aggregations (n(), sum(), mean(), min(), max(), sd(), first(), last()) backed by a pure C11 pull-based execution engine and a custom on-disk format ('.vtr'). Reads and writes 'GeoTIFF' (including tiled and 'BigTIFF' layouts) and a tiled raster format ('.vec') with overview pyramids and time cubes for larger-than-RAM raster data. Streams vector operations (spatial transforms, point-in-polygon and nearest-feature joins including a two-sided grid-partitioned join, select-by-location, clip, erase, dissolve, 'rasterization', 'polygonization', and contouring) through 'sf', and runs raster operations (zonal statistics, focal windows, terrain derivatives, resample or 'reproject' warp, polygon masking, map algebra, and 'mosaicking') in native C or over the tiled '.vec' format, one batch or tile at a time for data larger than RAM.

Changes in 0.13.0

New features

  • tbl_parquet() reads Parquet files natively, with no arrow dependency (#25): data page v1 and v2, the dictionary, RLE/bit-packed, delta and byte-stream-split encodings, and UNCOMPRESSED, SNAPPY, GZIP, ZSTD and LZ4 pages. Logical types map to Date, POSIXct, int64 and double; struct fields are flattened and one-level lists and maps are read as joined text (list_sep). Only the columns a query uses are read, row-group statistics skip groups a filter cannot match, and a vector of files or a directory reads as one table. BROTLI and LZO pages, and lists of lists, raise an error naming the column.
  • tbl_tiff() reads LZW-compressed GeoTIFFs, including those vec_to_tiff(compression = "lzw") writes, and undoes predictor 2 (horizontal differencing) and predictor 3 (floating point) for LZW and DEFLATE strips and tiles (#21).
Show all changes in 0.13.0Hide the rest of the changes in 0.13.0
  • Expressions support sin(), cos(), tan(), asin(), acos(), atan(), atan2(), sinh(), cosh(), tanh(), asinh(), acosh(), atanh(), expm1(), log1p() and ^ (#22). A math call with the wrong number of arguments is now an error instead of dropping the extra ones, and sign(), pmin()/pmax() follow base R on NaN.
  • Every verb that takes expressions captures them through rlang, so !!, !!!, {{ }}, :=, .data and .env work as in dplyr (#24). group_by() and count() accept !!sym(k), .data[[k]], across(all_of(k)), pick() and computed groups (group_by(odd = x %% 2)), and gain .add.
  • spatial_join() gains keep_geom. keep_geom = FALSE drops the left geometry, and with coords = the points are never encoded (#23).

Performance and memory

  • vectra_mem() is now a bound on what a query allocates (#19, #28). All the buffering steps of a query (sorts, joins, grouped aggregates, fuzzy joins, k-mer counts) reserve the bytes they actually allocate from one shared pool of vectra_mem() bytes, and spill when it is exhausted; each is guaranteed a quarter of an equal share. Previously each step received the whole budget and counted only part of what it allocated, so a join feeding a grouped aggregate could peak at several times the budget. Temporary spill files are written uncompressed, which is faster at the same peak memory. On 2e7 rows with a 256 MB budget, a join followed by a grouped summary went from 50.1 s and 427 MB above idle to 7.7 s and 168 MB.
  • Grouped summarise() aggregates in hash tables instead of always sorting its input (#16). When the groups outgrow their share of the budget, the rest of the input is hash-partitioned to disk and each partition aggregated in turn; results stay sorted by key, and median()/n_distinct() keep their spilling path. On 2e7 rows and 1,000 groups this took 0.9 s instead of 1.9 s, with memory falling from 1.16 GB to under 100 MB.
  • arrange() with enough memory emits its result in 131,072-row batches from one permutation instead of as a single batch holding a second copy of the data (#20). arrange() followed by write_vtr() on 2e7 rows went from 54.8 s to 3.5 s.
  • Column pruning passes through mutate(), select() and rename(), so a scan reads only the columns a query uses (#17). Filters prune row groups by zone map, sorted-column search and index even when written after a mutate(), select(), arrange() or another filter, and in every input of bind_rows() (#18); the plan no longer depends on the order the verbs are written in.
  • spatial_join()'s native path is a lazy streaming node: the result flows into the next verb without a spill and without buffering R data frames (#23). Tagging 1e7 points and counting went from 72.5 s to 6.9 s.
  • compress = "fast", the write_vtr() default, runs its LZ stage at the fastest match-search level; streaming a filtered result to .vtr is about 2.8x faster for files about 3.6% larger (#26). compress = "small" also tries that setting, so it is still never larger than "fast".

Bug fixes

  • bind_rows() of stores whose column types differ keeps the widened type after column pruning instead of narrowing a double to an integer.
  • Filter pushdown no longer stops after the 16th input of bind_rows().
  • arrange() documentation now states that NA sorts last in both directions, which is what it has always done.
  • explain() no longer prints an offload grade of "streaming scan" for plans that contain a sort or a join; the grade is shown only for replay caches and partitions that carry one (#27).

Installation

  • configure now tests the candidate OpenMP flags by building, loading and calling a small parallel routine, and keeps the first that works (#15). On macOS it tries -Xclang -fopenmp -lomp first, so a binary that uses OpenMP records a real dependency on the libomp.dylib that CRAN's R ships instead of looking its symbols up at load time; if nothing works the package builds single-threaded and says so. The package now compiles without warnings when OpenMP is unavailable.

Documentation

  • The engine, large-data, spatial, formats and indexing vignettes, and the README, describe the current engine: the tdc container format, hash-first aggregation, the shared memory pool, spilling joins, streaming windows and mapped hash indexes (#27).

From NEWS.md in the release

Install

Health

CRAN checks
13OK
Slowest check: 14.9 min · r-oldrel-windows-x86_64
Status changes
  • OK13 OK2026-09-17
  • ERROR12 OK, 1 ERROR2026-09-08
  • OK13 OK2026-08-04
  • NOTE12 OK, 1 NOTE2026-08-01
  • OK13 OK2026-07-04
Show 7 earlier changesHide 7 earlier changes
  • ERROR12 OK, 1 ERROR2026-07-01
  • OK13 OK2026-06-30
  • ERROR12 OK, 1 ERROR2026-06-29
  • OK12 OK, 1 FAILURE2026-06-08
  • ERROR12 OK, 1 ERROR2026-06-07
  • OK12 OK2026-05-09
  • ERROR5 OK, 2 NOTE, 1 ERROR2026-04-22
Advisories

none known

Documentation

In release 0.13.0
READMEYes · 963 wordsVignettesYes · 15 · dynamicNEWSYes · 100% structured · mentions 0.13.0Citation fileNoWebsiteYes · pkgdown
Help pages
121
Examples that run
84%86 run in a plain check (28 of them under a condition) · 13 only when donttest examples are enabled (R CMD check --as-cran) · 3 never run
Exported functions with examples
86%
Documented parameters
97%
Return-value docs
100%
Help pages citing references
2%

Downloads

3.1K
CRAN downloads in the past year
Rank #4,966 · ~9/day · ~261/mo
Daily download trend is not available in this view yet.
63930 days
1.7K90 days
3.1K1 year
Compare downloads with other packages →
Also on224 r2u3 autocran

Repository

10Stars
0Forks
0Open issues
0Open PRs
51Releases
310Commits
2Commit identities
columnardata-analysisquery-enginerr-packagerstatsclarge-data
310 commits · Last activity 2026-10-24 · +11.1% stars, 30d · Default branch at 0.13.2, ahead of CRAN 0.13.0 (checked 2026-10-21)
Responsiveness
How these are sampled
PRs merged (all time)
not measured
Median days to close, 50 most recently updated closed issues
0
Median days to close, 50 most recently updated closed PRs
not measured

Stars over time

2026-04-25 · 12026-10-13 · 10
PracticesBeta

9 development-tooling and community-health practices detected across 6 families in the upstream repository

Checks run against github.com/gcol33/vectra on 2026-10-21.

Continuous integration (2)
GitHub ActionsR CMD check workflow

The R CMD check workflow runs on Linux, macOS and Windows, and on R-devel

Docs source (3)
README.Rmdpkgdown

GitHub Pages site last deployed 2026-10-19

pkgdown site last built 2026-10-19

Coverage (1)
Coverage reporting
Reproducibility and dev environment (1)
data-raw/
Show all practicesHide 2 practices
CRAN release process (1)
cran-comments.md
Research and citation (1)
CITATION.cff
How this is detected·Detection ruleset v4 (2026-10-20)
AI coding toolsBeta

This repository shows signs of AI coding tools.

  • Claude Codefirst seen 2026-03-05
    Named in .Rbuildignore: .claude, CLAUDE.md
    Named in .gitignore: .claude, CLAUDE.md
    Commits: at least 280 crediting it in the message
Models named in its commits
  • Claude Opus 4.8115 commits · Jun to Jul 2026
  • Claude Opus 4.642 commits · Mar to Apr 2026
  • Claude Opus 4.723 commits · Apr to May 2026
  • Claude Sonnet 4.618 commits · Apr to May 2026
  • Claude Fable 52 commits · Jun 2026

Some of these counts are a minimum, because the search stopped before the oldest commits.

Counts are commits, not lines of code. Commits by a tool's accounts count once across all of its accounts. Commits crediting it are the largest count among its credit lines, a minimum.How this is detected·Detection ruleset v4 (updated 2026-09-27)

Dependencies

Declared dependencies
19 external dependencies (excludes base and recommended)

Installing vectra adds 8 packages (6 with compiled code, 3.8 MB of source tarballs). Heaviest: libgeos 1.0 MB, vctrs 1.0 MB, rlang 766 KB.

Depends (1)
R >= 4.1.0
Imports (4)
LinkingTo (1)
Enhances (0)
none
Reverse dependencies
1direct
0indirect
Imports 1
Depends, Imports or LinkingTo, most downloaded first

People & History

People (9)
Author, Maintainer since 0.5.1 (2026), Copyright holder
Contributor, Copyright holder · added in 0.13.0
zstd decoder and xxHash in src/zstd
Contributor · added in 0.13.0
miniz in src/miniz
Contributor · added in 0.13.0
minimum-redundancy code routine in src/miniz
Contributor · added in 0.13.0
minimum-redundancy code routine in src/miniz
Contributor, Copyright holder · added in 0.13.0
miniz in src/miniz
Copyright holder · added in 0.13.0
zstd decoder in src/zstd
Copyright holder · added in 0.13.0
miniz in src/miniz
Copyright holder · added in 0.13.0
miniz in src/miniz
Releases (13)

Pick two releases to compare their code metrics.

  • 0.13.0Latest
    record
    2026-09-30 · current release · diff ↗ ·
    added 1 export
    tbl_parquet
  • 0.12.4
    record
    2026-09-16 · diff ↗
  • 0.12.3
    record
    2026-09-14 · diff ↗
  • 0.12.0
    record
    2026-09-09 · diff ↗
  • 0.11.8
    record
    2026-07-31 · diff ↗
  • 0.11.3
    record
    2026-07-17 · diff ↗
  • 0.11.1
    record
    2026-07-10 · diff ↗ ·
    added 7 exports
    feature_knn, kmer, rast_feature_distance, tbl_bed, tbl_fasta, tbl_fastq, vectra_mem
  • 0.9.8
    record
    2026-06-29 · diff ↗ ·
    added 12 exports
    as_embedding, cosine, dot, floor_time, interval_join, l2, resample, roll_max, roll_mean, roll_min, roll_n, roll_sum
  • 0.9.7
    record
    2026-06-29 · diff ↗ ·
    added 17 exports
    spatial_centerline, spatial_construct, spatial_eliminate, spatial_explode, spatial_knn, spatial_line_merge, spatial_locate, spatial_network, spatial_polygonize, spatial_route, spatial_service_area, spatial_simplify, spatial_smooth, spatial_snap, spatial_snap_grid, spatial_split, spatial_topology
  • 0.9.1
    record
    2026-06-29 · diff ↗ ·
    added 19 exports
    collect_sf, contours, focal, grid, mask, mosaic, polygonize, proximity, rast_calc, rasterize, spatial_clip, spatial_dissolve, spatial_filter, spatial_join, spatial_map, spatial_overlay, terrain, warp, zonal
  • 0.7.1
    record
    2026-06-12 · diff ↗ ·
    added 5 exports
    chunk_feeder, collect_chunked, group_map, group_modify, offload
  • unarchivedReturned to CRAN
    2026-05-08
  • 0.6.2
    record
    2026-05-08 · diff ↗ ·
    added 14 exports
    tiff_band_names, tiff_crs, vec_build_overviews, vec_close_raster, vec_extract_points, vec_open_raster, vec_raster_layout, vec_raster_times, vec_read_pixel_series, vec_read_time_slice, vec_read_window, vec_to_tiff, vec_write_raster, vec_write_time_cube
  • archivedRemoved from CRAN
    2026-05-06
    issues were not corrected in time
  • R
    R 4.6.0 released · 2026-04-24
  • 0.5.1
    record
    2026-04-21
Show 1 earlier eventHide 1 earlier event
  • R
    R 4.5.0 released · 2025-04-11

Package metadata

First published
2026-04-21
Total releases
13 / 1 yrs
License
MIT + file LICENSE OSI
Minimum R
≥ 4.1.0
Download size
2.3 MB

Cite

Cite this package

Run in R for the authors' preferred citation:

citation("vectra")
Colling, G., Meta Platforms, Inc. and affiliates, RAD Game Tools and Valve Software, Rich Geldreich and Tenacious Software LLC, Collet, Y., Geldreich, R., Katajainen, J., Moffat, A., & Raiber, M. (2026). vectra: Columnar Query Engine for Larger-than-RAM Data (Version 0.13.0) [Computer software]. https://doi.org/10.32614/CRAN.package.vectra

This package has no citation file, so citation() returns this entry built from DESCRIPTION.

The repository also keeps a CITATION.cff.

Cite the R Observatory

For a number measured here: a download total, a coverage figure, an archival date.

APA

Balamuta, J. J. (2026). R Observatory: Metrics for vectra version 0.13.0 [Data set]. HJJB, LLC. Data release v2026-10-25. https://doi.org/10.5281/zenodo.21843040

From data release v2026-10-25, which the citation names so these numbers can be found later. More on citing and the projects behind them.

Report a problem with this page →

Privacy choices

These apply to this browser and are stored on this device only. Nothing about your choice is sent to us.

Read the privacy policy