milvus/docs/design_docs/20230405-default_value.md
smellthemoon 2afc982ce1
[MEP]Default Value (#23343)
Signed-off-by: lixinguo <xinguo.li@zilliz.com>
Co-authored-by: lixinguo <xinguo.li@zilliz.com>
2023-04-20 10:56:31 +08:00

2.8 KiB

MEP: Default Value

Current state: Under Discussion

ISSUE: [Feature]: Support Default Value #23337

Keywords: Default, Insert, Upsert

Released: v2.3.1

Summary

Support Default Value when input data.

Motivation

For now, Milvus don't support Default function. If the user pass in the same data under a certain field schema, the data can only be passed in repeatedly, which is not so flexible and user-friendly。

We need a way to support Default function, which is more efficient.

Public Interfaces

Add new field default_value in FieldSchema

message FieldSchema {
  ...
  ScalarField default_value = 11; // default_value only support scalars for now
}

Design Details

  1. Add the default_value in the field schema as an optional field.

message FieldSchema {
  ...
  ScalarField default_value = 11; // default_value only support scalars for now
}
  1. Will use the default_value if no data pass(the field get nil when insert and upsert).

message FieldData {
  ...
  oneof field {
    ScalarField scalars = 3;
    VectorField vectors = 4;
  }
}
    # create collection
    nb = 3000
    fields = [
        FieldSchema(name="int64", dtype=DataType.INT64, is_primary=True),
         # restrict at most one value to be passed in as the default value
        FieldSchema(name="float", dtype=DataType.FLOAT, default_value=1.0)
    ]
    schema = CollectionSchema(
        fields=fields, description="collection")

    collection = Collection(name="hello_milvus", schema=default_schema)

    #  insert data
    collection.insert(
        [
            [i for i in range(nb)],
            # will use the default_value
            [],
        ]
    )

Compatibility, Deprecation, and Migration Plan

Test Cases ExpectedBehavior
schema built in 2.2.x can be used normally in the new version

Test Plan

Unit Tests

  • Test for using default value in proxy

E2E Tests

Test Cases Expected Behavior
set illegal default value report error
set legal default value use default value as fields data
schema built in 2.2.x can be used normally in the new version
don't set default value the same

Rejected Alternatives

Default value is set by column, and the writing method of [1,2,3, {default}, {default}, 4, 5] is not supported.

References

None