Insert()
This method inserts entities organized in columns into the specified collection.
func (c *GrpcClient) Insert(ctx context.Context, collName string, partitionName string, columns ...entity.Column) (entity.Column, error)
Request Parameters
Parameter | Description | Type |
---|---|---|
| Context for the current call to work. |
|
| Name of the collection to insert data into. |
|
| Name of the partition to insert data into. |
|
| Data to insert into the specified collection. You should include the data for all the fields defined in the collection schema. |
|
entity.Column
This interface type defines a set of method signatures as follows.
type Column interface {
Name() string
Type() FieldType
Len() int
Slice(int, int) Column
AppendValue(interface{}) error
Get(int) (interface{}, error)
GetAsInt64(int) (int64, error)
GetAsString(int) (string, error)
GetAsDouble(int) (float64, error)
GetAsBool(int) (bool, error)
}
Method Signature | Return Type | Description |
---|---|---|
|
| Return the column name. |
|
| Return the column data type. |
|
| Return the number of rows in the column. |
|
| Return a column that contains the specified rows from the column. |
|
| Append values to the column. |
|
| Return the value at the specified ID in the column or an error. |
|
| Converts the value at the specified ID in the column to an Int64 number and returns the converted value or an error. |
|
| Converts the value at the specified ID in the column to a string and returns the converted value or an error. |
|
| Converts the value at the specified ID in the column to a Float64 number and returns the converted value or an error. |
|
| Converts the value at the specified ID in the column to a boolean and returns the converted value or an error. |
For details on the struct types that implement the above method signatures, refer to Columns.
Return
entity.Column
Errors
Any error in the execution of the request. Possible errors are as follows:
-
ErrClientNotReady
: The client is not connected to Milvus. -
ErrCollectionNotExists
: The collection with the specified name does not exist. -
The specified field is invalid.
-
The call to this API fails.
Example
// insert
pkValues := make([]int64, 0, 2000)
varcharValues := make([]string, 0, 2000)
vectors:= make([][]float32, 0, 2000)
for i := 0; i < 2000; i++ {
pkValues = append(pkValues, int64(i))
varcharValues = append(varcharValues, "aa")
v := make([]float32, 0, 768)
for j := 0; j < 768; j++ {
v = append(v, rand.Float32())
}
vectors = append(vectors, v)
}
resInsert, errInsert := mc.Insert(context.Background(),
collectionName,
"",
entity.NewColumnInt64("id", pkValues),
entity.NewColumnVarChar("varchar", varcharValues),
entity.NewColumnFloatVector("vector", 768, vectors),
)
if errInsert != nil {
log.Fatal("failed to insert data:", errInsert.Error())
}
log.Println(resInsert.Name(), resInsert.Len())
- Other vectors
import (
"context"
"encoding/binary"
"log"
"math"
"math/rand"
"strconv"
"github.com/milvus-io/milvus-sdk-go/v2/client"
"github.com/milvus-io/milvus-sdk-go/v2/entity"
"github.com/x448/float16"
)
func GenFloat16Vector(dim int64) []byte {
ret := make([]byte, dim*2)
for i := 0; i < int(dim); i++ {
v := float16.Fromfloat32(rand.Float32()).Bits()
binary.LittleEndian.PutUint16(ret[i*2:], v)
}
return ret
}
func GenBFloat16Vector(dim int64) []byte {
ret16 := make([]uint16, 0, dim)
for i := 0; i < int(dim); i++ {
f := rand.Float32()
bits := math.Float32bits(f)
bits >>= 16
bits &= 0x7FFF
ret16 = append(ret16, uint16(bits))
}
ret := make([]byte, len(ret16)*2)
for i, value := range ret16 {
binary.LittleEndian.PutUint16(ret[i*2:], value)
}
return ret
}
func GenBinaryVector(dim int64) []byte {
vector := make([]byte, dim/8)
rand.Read(vector)
return vector
}
// insert
pkValues := make([]int64, 0, 2000)
binaryVectors := make([][]byte, 0, 2000)
fp16Vectors := make([][]byte, 0, 2000)
bf16Vectors := make([][]byte, 0, 2000)
sparseVectors := make([]entity.SparseEmbedding, 0, 2000)
for j := 0; j < 2000; j++ {
pkValues = append(pkValues, int64(j+1))
// binary vectors
binaryVectors = append(binaryVectors, GenBinaryVector(768))
// fp16 vectors
fp16Vectors = append(fp16Vectors, GenFloat16Vector(768))
// bf16 vectors
bf16Vectors = append(bf16Vectors, GenBFloat16Vector(768))
// sparse vectors
positions := []uint32{0, 100, 200, 300}
values := []float32{rand.Float32(), rand.Float32(), rand.Float32(), rand.Float32()}
sparseEmb, err := entity.NewSliceSparseEmbedding(positions, values)
if err != nil {
log.Fatalf("Generate vector failed %s", err)
}
sparseVectors = append(sparseVectors, sparseEmb)
}
resInsert, errInsert := mc.Insert(context.Background(),
collectionName,
"",
entity.NewColumnInt64("id", pkValues),
entity.NewColumnBinaryVector("binary", 768, binaryVectors),
entity.NewColumnFloat16Vector("fp16", 768, fp16Vectors),
entity.NewColumnBFloat16Vector("bf16", 768, bf16Vectors),
entity.NewColumnSparseVectors("sparse", sparseVectors),
)
if errInsert != nil {
log.Fatal("failed to insert data:", errInsert.Error())
}
log.Println(resInsert.Name(), resInsert.Len())