Alter Collection Field
You can alter the properties of a collection field to change column constraints or enforce stricter data integrity rules.
This page covers field property changes, not schema-shape changes such as adding or dropping fields. To add scalar fields or drop fields from an existing collection, refer to Alter Collection Schema.
-
Each collection consists of only one primary field. Once set during collection creation, you cannot change the primary field or alter its properties.
-
Each collection can have only one partition key. Once set during collection creation, you cannot change the partition key.
-
for a StructArray field or one of its subfield paths, such as
chunks[text], you can alter onlymmap.enabled,field.description, andwarmup. Other properties, such asmax_capacityandmax_length, are rejected. The parent field and its subfields are stored together, andmmap.enabledandwarmuptake effect on the shared storage when enabled on any of them: disabling one of these properties on a subfield alone does not take effect while the parent field or a sibling subfield still has it enabled. Also,warmupset todisabledoes not skip all reads: data required for query execution, such as element offsets, is still read.
Alter VarChar field
A VarChar field has a property named max_length, which defines the maximum number of bytes allowed for each field value. You can change the max_length property.
The following example assumes the collection has a VarChar field named varchar and sets its max_length property.
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- CSharp
- cURL
from pymilvus import MilvusClient
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)
client.alter_collection_field(
collection_name="my_collection",
field_name="varchar",
field_params={
"max_length": 1024
}
)
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.service.collection.request.*;
ConnectConfig config = ConnectConfig.builder()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN")
.build();
MilvusClientV2 client = new MilvusClientV2(config);
client.alterCollectionField(AlterCollectionFieldReq.builder()
.collectionName("my_collection")
.fieldName("varchar")
.property("max_length", "1024")
.build());
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v3/common"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
ctx := context.Background()
milvusAddr := "YOUR_CLUSTER_ENDPOINT"
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: milvusAddr,
APIKey: "YOUR_CLUSTER_TOKEN",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
defer client.Close(ctx)
err = client.AlterCollectionFieldProperty(ctx, milvusclient.NewAlterCollectionFieldPropertiesOption(
"my_collection", "varchar").WithProperty(common.MaxLengthKey, 1024))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2::prelude::*;
let config = ConnectConfig::new().uri("YOUR_CLUSTER_ENDPOINT").token("YOUR_CLUSTER_TOKEN");
let client = ClientV2::new(&config).await?;
client
.alter_collection_field_properties(
AlterCollectionFieldPropertiesRequest::builder()
.collection_name("my_collection")
.field_name("varchar")
.property("max_length", "1024")
.build()?,
)
.await?;
#include "milvus/MilvusClientV2.h"
#include <iostream>
auto client = milvus::MilvusClientV2::Create();
milvus::ConnectParam connect_param{"YOUR_CLUSTER_ENDPOINT", "YOUR_CLUSTER_TOKEN"};
auto status = client->Connect(connect_param);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
status = client->AlterCollectionFieldProperties(milvus::AlterCollectionFieldPropertiesRequest()
.WithCollectionName("my_collection")
.WithFieldName("varchar")
.AddProperty("max_length", "1024"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
import { MilvusClient } from '@zilliz/milvus2-sdk-node';
const client = new MilvusClient({ address: 'YOUR_CLUSTER_ENDPOINT', token: 'YOUR_CLUSTER_TOKEN' });
await client.alterCollectionFieldProperties({
collection_name: 'my_collection',
field_name: 'varchar',
properties: { max_length: 1024 },
});
using Milvus.Client.V2;
using Milvus.Client.V2.Types;
using Milvus.Client.V2.Requests.Collection;
using var client = new MilvusClientV2(new ConnectConfig
{
Uri = "YOUR_CLUSTER_ENDPOINT",
ApiKey = "YOUR_CLUSTER_TOKEN"
});
await client.ConnectAsync();
await client.AlterCollectionFieldAsync(new AlterCollectionFieldReq
{
CollectionName = "my_collection",
FieldName = "varchar",
Properties = { ["max_length"] = "1024" }
});
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
# restful
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/fields/alter_properties" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
--data '{
"collectionName": "my_collection",
"fieldName": "varchar",
"fieldParams": {
"max_length": "1024"
}
}'
Alter ARRAY field
An array field has two properties, namely element_type and max_capacity. The former determines the data type of the elements in an array, while the latter constrains the maximum number of elements in the array. You can change the max_capacity property only.
The following example assumes the collection has an array field named array and sets its max_capacity property.
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- CSharp
- cURL
client.alter_collection_field(
collection_name="my_collection",
field_name="array",
field_params={
"max_capacity": 64
}
)
client.alterCollectionField(AlterCollectionFieldReq.builder()
.collectionName("my_collection")
.fieldName("array")
.property("max_capacity", "64")
.build());
import (
"fmt"
"github.com/milvus-io/milvus/client/v3/common"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
err = client.AlterCollectionFieldProperty(ctx, milvusclient.NewAlterCollectionFieldPropertiesOption(
"my_collection", "array").WithProperty(common.MaxCapacityKey, 64))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2::prelude::*;
client
.alter_collection_field_properties(
AlterCollectionFieldPropertiesRequest::builder()
.collection_name("my_collection")
.field_name("array")
.property("max_capacity", "64")
.build()?,
)
.await?;
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto status = client->AlterCollectionFieldProperties(milvus::AlterCollectionFieldPropertiesRequest()
.WithCollectionName("my_collection")
.WithFieldName("array")
.AddProperty("max_capacity", "64"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.alterCollectionFieldProperties({
collection_name: "my_collection",
field_name: 'array',
properties: {
max_capacity: 64
}
});
using Milvus.Client.V2.Requests.Collection;
await client.AlterCollectionFieldAsync(new AlterCollectionFieldReq
{
CollectionName = "my_collection",
FieldName = "array",
Properties = { ["max_capacity"] = "64" }
});
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
# restful
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/fields/alter_properties" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
--data '{
"collectionName": "my_collection",
"fieldName": "array",
"fieldParams": {
"max_capacity": "64"
}
}'
Alter field-level mmap settings
Memory mapping (Mmap) enables direct memory access to large files on disk, allowing Zilliz Cloud to store indexes and data in both memory and hard drives. This approach helps optimize data placement policy based on access frequency, expanding storage capacity for collections without impacting search performance.
The following example assumes the collection has a field named doc_chunk and sets its mmap_enabled property.
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- CSharp
- cURL
client.alter_collection_field(
collection_name="my_collection",
field_name="doc_chunk",
field_params={"mmap.enabled": True}
)
client.alterCollectionField(AlterCollectionFieldReq.builder()
.collectionName("my_collection")
.fieldName("doc_chunk")
.property("mmap.enabled", "true")
.build());
import (
"fmt"
"github.com/milvus-io/milvus/client/v3/common"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
err = client.AlterCollectionFieldProperty(ctx, milvusclient.NewAlterCollectionFieldPropertiesOption(
"my_collection", "doc_chunk").WithProperty(common.MmapEnabledKey, true))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2::prelude::*;
client
.alter_collection_field_properties(
AlterCollectionFieldPropertiesRequest::builder()
.collection_name("my_collection")
.field_name("doc_chunk")
.property("mmap.enabled", "true")
.build()?,
)
.await?;
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto status = client->AlterCollectionFieldProperties(milvus::AlterCollectionFieldPropertiesRequest()
.WithCollectionName("my_collection")
.WithFieldName("doc_chunk")
.AddProperty("mmap.enabled", "true"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.alterCollectionFieldProperties({
collection_name: 'my_collection',
field_name: 'doc_chunk',
properties: { 'mmap.enabled': true },
});
using Milvus.Client.V2.Requests.Collection;
await client.AlterCollectionFieldAsync(new AlterCollectionFieldReq
{
CollectionName = "my_collection",
FieldName = "doc_chunk",
Properties = { ["mmap.enabled"] = "true" }
});
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
# restful
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/fields/alter_properties" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
--data '{
"collectionName": "my_collection",
"fieldName": "doc_chunk",
"fieldParams": {
"mmap.enabled": true
}
}'