vortex_btrblocks/schemes/binary/
zstd.rs1use vortex_array::ArrayRef;
7use vortex_array::Canonical;
8use vortex_array::ExecutionCtx;
9use vortex_array::IntoArray;
10use vortex_compressor::estimate::CompressionEstimate;
11use vortex_compressor::estimate::DeferredEstimate;
12use vortex_error::VortexResult;
13
14use crate::ArrayAndStats;
15use crate::CascadingCompressor;
16use crate::CompressorContext;
17use crate::Scheme;
18
19#[derive(Debug, Copy, Clone, PartialEq, Eq)]
21pub struct ZstdScheme;
22
23impl Scheme for ZstdScheme {
24 fn scheme_name(&self) -> &'static str {
25 "vortex.binary.zstd"
26 }
27
28 fn matches(&self, canonical: &Canonical) -> bool {
29 canonical.dtype().is_binary()
30 }
31
32 fn expected_compression_ratio(
33 &self,
34 _data: &ArrayAndStats,
35 _compress_ctx: CompressorContext,
36 _exec_ctx: &mut ExecutionCtx,
37 ) -> CompressionEstimate {
38 CompressionEstimate::Deferred(DeferredEstimate::Sample)
39 }
40
41 fn compress(
42 &self,
43 _compressor: &CascadingCompressor,
44 data: &ArrayAndStats,
45 _compress_ctx: CompressorContext,
46 exec_ctx: &mut ExecutionCtx,
47 ) -> VortexResult<ArrayRef> {
48 let compacted = data
49 .array_as_varbinview()
50 .into_owned()
51 .compact_buffers(exec_ctx)?;
52 Ok(
53 vortex_zstd::Zstd::from_var_bin_view_without_dict(&compacted, 3, 8192, exec_ctx)?
54 .into_array(),
55 )
56 }
57}