LanceDB C API Documentation
Welcome to the LanceDB C API documentation. This library provides C bindings for LanceDB, a developer-friendly, serverless vector database for AI applications.
Contents:
Overview
The LanceDB C API provides a complete interface to LanceDB functionality including:
Database connections and configuration
Table creation and management
Data insertion and querying
Vector similarity search
Index creation and management
Quick Start
This example shows how to create a LanceDB table with vector data using Apache Arrow.
1. Connect to a database:
#include <lancedb.h>
#include <arrow/c/bridge.h>
#include <arrow/api.h>
// Create a connection to a local database
LanceDBConnectBuilder* builder = lancedb_connect("./my_database");
LanceDBConnection* db = lancedb_connect_builder_execute(builder);
2. Create Arrow schema (using Arrow C++ API):
// Define schema with id and vector columns
auto id_field = arrow::field("id", arrow::int32());
auto vector_field = arrow::field("vector",
arrow::fixed_size_list(arrow::float32(), 128));
auto schema = arrow::schema({id_field, vector_field});
// Export to C ABI
struct ArrowSchema c_schema;
arrow::ExportSchema(*schema, &c_schema);
3. Create data (using Arrow builders):
arrow::Int32Builder id_builder;
arrow::FixedSizeListBuilder vector_builder(
arrow::default_memory_pool(),
std::make_unique<arrow::FloatBuilder>(),
128 // dimension
);
// Add 100 rows
for (int i = 0; i < 100; i++) {
id_builder.Append(i);
auto* float_builder = static_cast<arrow::FloatBuilder*>(
vector_builder.value_builder());
for (int j = 0; j < 128; j++) {
float_builder->Append(i * 0.1f + j);
}
vector_builder.Append();
}
// Build arrays
std::shared_ptr<arrow::Array> id_array, vector_array;
id_builder.Finish(&id_array);
vector_builder.Finish(&vector_array);
// Create RecordBatch
auto batch = arrow::RecordBatch::Make(schema, 100, {id_array, vector_array});
// Export to C ABI
struct ArrowArray c_array;
arrow::ExportRecordBatch(*batch, &c_array, &c_schema);
4. Create table with schema and data:
// Create reader from Arrow C ABI
LanceDBRecordBatchReader* reader = lancedb_record_batch_reader_from_arrow(
(FFI_ArrowArray*)&c_array,
(FFI_ArrowSchema*)&c_schema
);
// Create table
LanceDBTable* table;
char* error_message = NULL;
LanceDBError result = lancedb_table_create(
db,
"my_vectors",
(FFI_ArrowSchema*)&c_schema,
reader,
&table,
&error_message
);
if (result == LANCEDB_SUCCESS) {
printf("Table created with %lu rows\n", lancedb_table_count_rows(table));
lancedb_table_free(table);
} else {
fprintf(stderr, "Error: %s\n", error_message);
lancedb_free_string(error_message);
}
// Clean up
lancedb_connection_free(db);