FieldData

FieldData is the template class for column-based field payloads. It stores the values of one field for insert, upsert, query, search, and iterator operations. FieldDataPtr is a std::shared_ptr to the base Field interface and is the type accepted by APIs that carry one or more field columns.

class Field {
public:
    const std::string& Name() const;
    DataType Type() const;
    DataType ElementType() const;  // ARRAY fields only
    virtual size_t Count() const = 0;
    virtual void Reserve(size_t count) = 0;
};

using FieldDataPtr = std::shared_ptr<Field>;

template <typename T, DataType Dt>
class FieldData : public Field {
public:
    using ElementT = T;

    FieldData();
    explicit FieldData(std::string name);
    FieldData(std::string name, const std::vector<T>& data);
    FieldData(std::string name, const std::vector<T>& data,
              const std::vector<bool>& valid_data);
    FieldData(std::string name, std::vector<T>&& data);
    FieldData(std::string name, std::vector<T>&& data,
              std::vector<bool>&& valid_data);

    StatusCode Add(const T& element);
    StatusCode Add(T&& element);
    StatusCode AddNull();
    StatusCode Append(const std::vector<T>& elements);
    StatusCode Append(const std::vector<T>& elements,
                      const std::vector<bool>& valid_data);

    size_t Count() const final;
    void Reserve(size_t count) final;

    virtual const std::vector<T>& Data() const;
    virtual T Value(size_t i) const;
    virtual bool IsNull(size_t i) const;
    virtual const std::vector<bool>& ValidData() const;
};

TEMPLATE PARAMETERS:

  • T (C++ value type)

    The C++ type used to store one element. For array and vector fields, this is itself a container type, as shown in the alias tables below.

  • Dt (DataType)

    The logical Milvus data type represented by this field payload.

METHODS:

  • StatusCode Add(const T& element) / StatusCode Add(T&& element)

    Appends one element. Returns a non-success status if the element is invalid for the field type.

  • StatusCode AddNull()

    Appends a null value to a nullable field.

  • StatusCode Append(const std::vector<T>& elements)

    Appends all elements in one call.

  • StatusCode Append(const std::vector<T>& elements, const std::vector<bool>& valid_data)

    Appends elements and validity metadata. An empty valid_data means every element is valid; otherwise, its size must equal elements.size() and false marks a null value.

  • size_t Count() const

    Returns the number of elements in the column.

  • void Reserve(size_t count)

    Pre-allocates storage for count elements.

  • const std::vector<T>& Data() const

    Returns the stored elements.

  • T Value(size_t i) const

    Returns the element at i.

  • bool IsNull(size_t i) const

    Returns whether the element at i is null.

  • const std::vector<bool>& ValidData() const

    Returns validity metadata for all elements.

Inherited Field methods:

  • Name() returns the field name.
  • Type() returns the field DataType.
  • ElementType() returns the element DataType for an ARRAY field.

Scalar, text, JSON, and spatial aliases

AliasDataTypeElementT
BoolFieldDataBOOLbool
Int8FieldDataINT8int8_t
Int16FieldDataINT16int16_t
Int32FieldDataINT32int32_t
Int64FieldDataINT64int64_t
FloatFieldDataFLOATfloat
DoubleFieldDataDOUBLEdouble
VarCharFieldDataVARCHARstd::string
GeometryFieldDataGEOMETRYstd::string (WKT)
TextFieldDataTEXTstd::string
TimestamptzFieldDataTIMESTAMPTZstd::string (RFC 3339)
JSONFieldDataJSONnlohmann::json

Vector aliases

AliasDataTypeElementT
BinaryVecFieldDataBINARY_VECTORstd::vector<uint8_t>
FloatVecFieldDataFLOAT_VECTORstd::vector<float>
SparseFloatVecFieldDataSPARSE_FLOAT_VECTORstd::map<uint32_t, float>
Float16VecFieldDataFLOAT16_VECTORstd::vector<uint16_t>
BFloat16VecFieldDataBFLOAT16_VECTORstd::vector<uint16_t>
Int8VecFieldDataINT8_VECTORstd::vector<int8_t>

BinaryVecFieldData is a specialized class, not a simple using alias. It also supports binary strings:

std::vector<std::string> DataAsString() const;
StatusCode AddAsString(const std::string& element);
StatusCode AddAsString(std::string&& element);

Array aliases

Array fields use ArrayFieldData<T, Et>, which derives from FieldData<std::vector<T>, DataType::ARRAY>. Its ElementT is std::vector<T>.

AliasElement type
ArrayBoolFieldDatabool
ArrayInt8FieldDataint8_t
ArrayInt16FieldDataint16_t
ArrayInt32FieldDataint32_t
ArrayInt64FieldDataint64_t
ArrayFloatFieldDatafloat
ArrayDoubleFieldDatadouble
ArrayVarCharFieldDatastd::string
ArrayTextFieldDatastd::string (text array)
StructFieldDatanlohmann::json (struct field)

ArrayFieldData provides Add(const ElementT&) and Add(ElementT&&) to append one array value. Other element, count, validity, and reserve behavior is inherited from FieldData.

Each concrete alias also has a corresponding XxxFieldDataPtr alias, such as Int64FieldDataPtr and FloatVecFieldDataPtr.

Example

#include <milvus/types/FieldData.h>
using namespace milvus;

auto id = Int64FieldData("id");
id.Add(1001);

auto vector = FloatVecFieldData("vector");
vector.Add({0.1f, 0.2f, 0.3f});

FieldDataPtr id_ptr = std::make_shared<Int64FieldData>(id);

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Was this page helpful?