column

package
v0.34.0-test1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 13, 2022 License: BSD-3-Clause Imports: 6 Imported by: 0

Documentation

Overview

Package column implements the organization of columns on storage for a ZST columnar storage object.

A ZST object is created by allocating a Writer for any top-level Zed type via NewWriter. The object to be written is wrapped in a Spiller with a column threshold. Output is streamed to the underlying spiller in a single pass. (In the future, we may implement multiple passes to optimize the storage layout of column data or spread a given ZST object across multiple files.

NewWriter recursively decends into the Zed type, allocating a Writer for each node in the type tree. The top-level body is written via a call to Write. The columns buffer data in memory until they reach their byte threshold or until Flush is called.

After all of the Zed data is written, a reassembly map is formed for each column writer by calling its EncodeMap method, which builds the value in place using zcode.Builder and returns the Zed type of the reassembly map value.

Data is read from a ZST file by scanning the reassembly maps to build column Readers for each Zed type by calling NewReader with the map, which recusirvely builds an assembly structure. An io.ReaderAt is passed to NewReader so each column reader can access the underlying storage object and read its column data effciently in largish column chunks.

Once an assembly is built, the recontructed Zed row data can be read from the assembly by calling the Read method on the top-level Record and passing in a zcode.Builder to reconstruct the record body in place. The assembly does not need any type information as the structure of values is entirely self describing in the Zed data format.

Index

Constants

View Source
const MaxSegmentThresh = 20 * 1024 * 1024
View Source
const SegmapTypeString = "[{offset:int64,length:int32}]"

Variables

View Source
var ErrColumnMismatch = errors.New("zng record value doesn't match column writer")
View Source
var ErrCorruptSegment = errors.New("segmap value corrupt")
View Source
var ErrNonRecordAccess = errors.New("attempting to access a field in a non-record value")

Functions

This section is empty.

Types

type ArrayReader added in v1.0.0

type ArrayReader struct {
	// contains filtered or unexported fields
}

func NewArrayReader added in v1.0.0

func NewArrayReader(inner zed.Type, in zed.Value, r io.ReaderAt) (*ArrayReader, error)

func (*ArrayReader) Read added in v1.0.0

func (a *ArrayReader) Read(b *zcode.Builder) error

type ArrayWriter

type ArrayWriter struct {
	// contains filtered or unexported fields
}

func NewArrayWriter

func NewArrayWriter(inner zed.Type, spiller *Spiller) *ArrayWriter

func (*ArrayWriter) EncodeMap added in v1.0.0

func (a *ArrayWriter) EncodeMap(zctx *zed.Context, b *zcode.Builder) (zed.Type, error)

func (*ArrayWriter) Flush

func (a *ArrayWriter) Flush(eof bool) error

func (*ArrayWriter) Write

func (a *ArrayWriter) Write(body zcode.Bytes) error

type FieldReader added in v1.0.0

type FieldReader struct {
	// contains filtered or unexported fields
}

func NewFieldReader added in v1.0.0

func NewFieldReader(typ zed.Type, in zed.Value, r io.ReaderAt) (*FieldReader, error)

func (*FieldReader) Read added in v1.0.0

func (f *FieldReader) Read(b *zcode.Builder) error

type FieldWriter

type FieldWriter struct {
	// contains filtered or unexported fields
}

func (*FieldWriter) EncodeMap added in v1.0.0

func (f *FieldWriter) EncodeMap(zctx *zed.Context, b *zcode.Builder) (zed.Type, error)

func (*FieldWriter) Flush

func (f *FieldWriter) Flush(eof bool) error

type IntReader added in v1.0.0

type IntReader struct {
	PrimitiveReader
}

func NewIntReader added in v1.0.0

func NewIntReader(val zed.Value, r io.ReaderAt) (*IntReader, error)

func (*IntReader) Read added in v1.0.0

func (p *IntReader) Read() (int64, error)

type IntWriter

type IntWriter struct {
	PrimitiveWriter
}

func NewIntWriter

func NewIntWriter(spiller *Spiller) *IntWriter

func (*IntWriter) Write

func (p *IntWriter) Write(v int32) error

type PresenceReader added in v1.0.0

type PresenceReader struct {
	IntReader
	// contains filtered or unexported fields
}

func NewPresence

func NewPresence(i IntReader) *PresenceReader

func (*PresenceReader) IsEmpty added in v1.0.0

func (p *PresenceReader) IsEmpty() bool

func (*PresenceReader) Read added in v1.0.0

func (p *PresenceReader) Read() (bool, error)

type PresenceWriter

type PresenceWriter struct {
	IntWriter
	// contains filtered or unexported fields
}

func NewPresenceWriter

func NewPresenceWriter(spiller *Spiller) *PresenceWriter

func (*PresenceWriter) Finish

func (p *PresenceWriter) Finish()

func (*PresenceWriter) TouchNull added in v1.0.0

func (p *PresenceWriter) TouchNull()

func (*PresenceWriter) TouchValue

func (p *PresenceWriter) TouchValue()

type PrimitiveReader added in v1.0.0

type PrimitiveReader struct {
	// contains filtered or unexported fields
}

func NewPrimitiveReader added in v1.0.0

func NewPrimitiveReader(in zed.Value, reader io.ReaderAt) (*PrimitiveReader, error)

func (*PrimitiveReader) Read added in v1.0.0

func (p *PrimitiveReader) Read(b *zcode.Builder) error

type PrimitiveWriter

type PrimitiveWriter struct {
	// contains filtered or unexported fields
}

func NewPrimitiveWriter

func NewPrimitiveWriter(spiller *Spiller) *PrimitiveWriter

func (*PrimitiveWriter) EncodeMap added in v1.0.0

func (p *PrimitiveWriter) EncodeMap(zctx *zed.Context, b *zcode.Builder) (zed.Type, error)

func (*PrimitiveWriter) Flush

func (p *PrimitiveWriter) Flush(eof bool) error

func (*PrimitiveWriter) Write

func (p *PrimitiveWriter) Write(body zcode.Bytes) error

type Reader added in v1.0.0

type Reader interface {
	Read(*zcode.Builder) error
}

func NewReader added in v1.0.0

func NewReader(typ zed.Type, in zed.Value, r io.ReaderAt) (Reader, error)

type RecordReader added in v1.0.0

type RecordReader []FieldReader

func NewRecordReader added in v1.0.0

func NewRecordReader(utyp zed.Type, in zed.Value, reader io.ReaderAt) (RecordReader, error)

func (RecordReader) Lookup added in v1.0.0

func (r RecordReader) Lookup(typ *zed.TypeRecord, fields []string) (zed.Type, Reader, error)

func (RecordReader) Read added in v1.0.0

func (r RecordReader) Read(b *zcode.Builder) error

type RecordWriter

type RecordWriter []*FieldWriter

func NewRecordWriter

func NewRecordWriter(typ *zed.TypeRecord, spiller *Spiller) RecordWriter

func (RecordWriter) EncodeMap added in v1.0.0

func (r RecordWriter) EncodeMap(zctx *zed.Context, b *zcode.Builder) (zed.Type, error)

func (RecordWriter) Flush

func (r RecordWriter) Flush(eof bool) error

func (RecordWriter) Write

func (r RecordWriter) Write(body zcode.Bytes) error

type Segment

type Segment struct {
	Offset int64
	Length int64
}

func NewSegmap added in v1.0.0

func NewSegmap(in zed.Value) ([]Segment, error)

func NewSegment added in v1.0.0

func NewSegment(zv zcode.Bytes) Segment

func (Segment) NewSectionReader

func (s Segment) NewSectionReader(r io.ReaderAt) io.Reader

type Spiller

type Spiller struct {
	Thresh int
	// contains filtered or unexported fields
}

func NewSpiller

func NewSpiller(w io.Writer, thresh int) *Spiller

func (*Spiller) Position

func (s *Spiller) Position() int64

func (*Spiller) Write

func (s *Spiller) Write(segments []Segment, b zcode.Bytes) ([]Segment, error)

type UnionReader added in v1.0.0

type UnionReader struct {
	// contains filtered or unexported fields
}

func NewUnionReader added in v1.0.0

func NewUnionReader(utyp zed.Type, in zed.Value, r io.ReaderAt) (*UnionReader, error)

func (*UnionReader) Read added in v1.0.0

func (u *UnionReader) Read(b *zcode.Builder) error

type UnionWriter

type UnionWriter struct {
	// contains filtered or unexported fields
}

func NewUnionWriter

func NewUnionWriter(typ *zed.TypeUnion, spiller *Spiller) *UnionWriter

func (*UnionWriter) EncodeMap added in v1.0.0

func (u *UnionWriter) EncodeMap(zctx *zed.Context, b *zcode.Builder) (zed.Type, error)

func (*UnionWriter) Flush

func (u *UnionWriter) Flush(eof bool) error

func (*UnionWriter) Write

func (u *UnionWriter) Write(body zcode.Bytes) error

type Writer

type Writer interface {
	// Write encodes the given value into memory.  When the column exceeds
	// a threshold, it is automatically flushed.  Flush may also be called
	// explicitly to push columns to storage and thus avoid too much row skew
	// between columns.
	Write(zcode.Bytes) error
	// Push all in-memory column data to the storage layer.
	Flush(bool) error
	// EncodeMap is called after all data is flushed to build the reassembly
	// record for this column.
	EncodeMap(*zed.Context, *zcode.Builder) (zed.Type, error)
}

func NewWriter

func NewWriter(typ zed.Type, spiller *Spiller) Writer

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL