Apache datasketches

Clone this repo:
  1. cb94ebe Merge pull request #157 from proost/doc-update-release by Hyeonho Kim · 3 days ago main
  2. 1c4e49d Merge pull request #177 from proost/perf-change-to-value-types by Hyeonho Kim · 3 days ago
  3. 9259e0c Merge pull request #194 from yeiin/perf/tuple-decode-hash-alloc by Hyeonho Kim · 3 days ago
  4. b7175f3 Merge pull request #190 from jaideeppyne/fix/numeric-serde-bounds by Hyeonho Kim · 3 days ago
  5. 321bbfc Merge pull request #188 from jaideeppyne/fix/tdigest-last-weight-two by Hyeonho Kim · 3 days ago

Go Lint Release GoDoc License Coverage Status

Apache® DataSketches™ Core Go Library Component

This is the core Go component of the DataSketches library. It contains some of the sketching algorithms and can be accessed directly from user applications.

This project is currently under development. Breaking changes may occur before a stable release.

Note that we have parallel core library components for C++, Java, Python, and Rust implementations of many of the same sketch algorithms:

Please visit the main DataSketches website for more information.

If you are interested in making contributions to this site, please see our Community page for information on how to contact us.

Major Sketches

TypeImplementationStatus
Cardinality
CpcSketch✅
HllSketch✅
ThetaSketch✅
TupleSketch✅
Quantiles
CormodeDoublesSketch❌
CormodeItemsSketch❌
KllDoublesSketch✅
KllFloatsSketch✅
KllSketch✅
ReqFloatsSketch⚠️
TDigestDouble✅
TDigestFloat❌
Frequencies️
FreqLongsSketch✅
FreqItemsSketch✅
CountMinSketch✅
Sampling
ReservoirLongsSketch✅
ReserviorItemsSketch✅
VarOptItemsSketch✅
EbppsSketch❌
Membership
BloomFilter✅
Density
DensitySketch❌

Specialty Sketches

TypeInterface NameStatus
Cardinality/FM85UniqueCountMap❌
Cardinality/Tuple
FdtSketch❌
ArrayOfDoublesSketch✅
DoubleSketch✅
IntegerSketch✅
ArrayOfStringsSketch✅
EngagementTest3❌

✅ = Released in v0.2.0

❌ = Not yet implemented

⚠️ = Implemented but not officially released

🚧 = In progress

Build & Runtime Dependencies

This code requires Go 1.24

Compilation and Test

Test can be run using go test command

go test ./...

A Dockerfile is also provided with the necessary env to build and test the project.

./build/Dockerfile
./build/run-docker-test.sh

Linting

Lint runs in CI via the Lint workflow, which uses golangci-lint v2.13.2 with the configuration in .golangci.yml.

Install that same version locally. The upstream project recommends the binary install and discourages go install and tool directives, because a source build compiles against your local Go version and can report different findings than CI:

curl -sSfL https://golangci-lint.run/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.13.2

Prebuilt binaries are also available on the releases page, and package managers such as Homebrew work as well. Pin v2.13.2 either way, so local results match CI.

Then:

make lint     # report findings
make format   # gofmt, goimports, and golangci-lint --fix