mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-23 05:19:58 +00:00
This reverts commit a547c523c2 or #2281
The current implementation can cause panics and performance degradation.
I will bring this back with more testing in
https://github.com/lancedb/lancedb/pull/2311
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Documentation**
- Enhanced clarity on read consistency settings with updated
descriptions and default behavior.
- Removed outdated warnings about eventual consistency from the
troubleshooting guide.
- **Refactor**
- Streamlined the handling of the read consistency interval across
integrations, now defaulting to "None" for improved performance.
- Simplified internal logic to offer a more consistent experience.
- **Tests**
- Updated test expectations to reflect the new default representation
for the read consistency interval.
- Removed redundant tests related to "no consistency" settings for
streamlined testing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
207 lines
5.6 KiB
TypeScript
207 lines
5.6 KiB
TypeScript
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
|
import { expect, test } from "@jest/globals";
|
|
// --8<-- [start:imports]
|
|
import * as lancedb from "@lancedb/lancedb";
|
|
import * as arrow from "apache-arrow";
|
|
import {
|
|
Field,
|
|
FixedSizeList,
|
|
Float16,
|
|
Int32,
|
|
Schema,
|
|
Utf8,
|
|
} from "apache-arrow";
|
|
// --8<-- [end:imports]
|
|
import { withTempDirectory } from "./util.ts";
|
|
|
|
test("basic table examples", async () => {
|
|
await withTempDirectory(async (databaseDir) => {
|
|
// --8<-- [start:connect]
|
|
const db = await lancedb.connect(databaseDir);
|
|
// --8<-- [end:connect]
|
|
{
|
|
// --8<-- [start:create_table]
|
|
const _tbl = await db.createTable(
|
|
"myTable",
|
|
[
|
|
{ vector: [3.1, 4.1], item: "foo", price: 10.0 },
|
|
{ vector: [5.9, 26.5], item: "bar", price: 20.0 },
|
|
],
|
|
{ mode: "overwrite" },
|
|
);
|
|
// --8<-- [end:create_table]
|
|
|
|
const data = [
|
|
{ vector: [3.1, 4.1], item: "foo", price: 10.0 },
|
|
{ vector: [5.9, 26.5], item: "bar", price: 20.0 },
|
|
];
|
|
|
|
{
|
|
// --8<-- [start:create_table_exists_ok]
|
|
const tbl = await db.createTable("myTable", data, {
|
|
existOk: true,
|
|
});
|
|
// --8<-- [end:create_table_exists_ok]
|
|
expect(await tbl.countRows()).toBe(2);
|
|
}
|
|
{
|
|
// --8<-- [start:create_table_overwrite]
|
|
const tbl = await db.createTable("myTable", data, {
|
|
mode: "overwrite",
|
|
});
|
|
// --8<-- [end:create_table_overwrite]
|
|
expect(await tbl.countRows()).toBe(2);
|
|
}
|
|
}
|
|
|
|
await db.dropTable("myTable");
|
|
|
|
{
|
|
// --8<-- [start:create_table_with_schema]
|
|
const schema = new arrow.Schema([
|
|
new arrow.Field(
|
|
"vector",
|
|
new arrow.FixedSizeList(
|
|
2,
|
|
new arrow.Field("item", new arrow.Float32(), true),
|
|
),
|
|
),
|
|
new arrow.Field("item", new arrow.Utf8(), true),
|
|
new arrow.Field("price", new arrow.Float32(), true),
|
|
]);
|
|
const data = [
|
|
{ vector: [3.1, 4.1], item: "foo", price: 10.0 },
|
|
{ vector: [5.9, 26.5], item: "bar", price: 20.0 },
|
|
];
|
|
const tbl = await db.createTable("myTable", data, {
|
|
schema,
|
|
});
|
|
// --8<-- [end:create_table_with_schema]
|
|
expect(await tbl.countRows()).toBe(2);
|
|
}
|
|
|
|
{
|
|
// --8<-- [start:create_empty_table]
|
|
|
|
const schema = new arrow.Schema([
|
|
new arrow.Field("id", new arrow.Int32()),
|
|
new arrow.Field("name", new arrow.Utf8()),
|
|
]);
|
|
|
|
const emptyTbl = await db.createEmptyTable("empty_table", schema);
|
|
// --8<-- [end:create_empty_table]
|
|
expect(await emptyTbl.countRows()).toBe(0);
|
|
}
|
|
{
|
|
// --8<-- [start:open_table]
|
|
const _tbl = await db.openTable("myTable");
|
|
// --8<-- [end:open_table]
|
|
}
|
|
|
|
{
|
|
// --8<-- [start:table_names]
|
|
const tableNames = await db.tableNames();
|
|
// --8<-- [end:table_names]
|
|
expect(tableNames).toEqual(["empty_table", "myTable"]);
|
|
}
|
|
|
|
const tbl = await db.openTable("myTable");
|
|
{
|
|
// --8<-- [start:add_data]
|
|
const data = [
|
|
{ vector: [1.3, 1.4], item: "fizz", price: 100.0 },
|
|
{ vector: [9.5, 56.2], item: "buzz", price: 200.0 },
|
|
];
|
|
await tbl.add(data);
|
|
// --8<-- [end:add_data]
|
|
}
|
|
|
|
// --8<-- [start:add_columns]
|
|
await tbl.addColumns([
|
|
{ name: "double_price", valueSql: "cast((price * 2) as Float)" },
|
|
]);
|
|
// --8<-- [end:add_columns]
|
|
// --8<-- [start:alter_columns]
|
|
await tbl.alterColumns([
|
|
{
|
|
path: "double_price",
|
|
rename: "dbl_price",
|
|
dataType: "float",
|
|
nullable: true,
|
|
},
|
|
]);
|
|
// --8<-- [end:alter_columns]
|
|
// --8<-- [start:alter_columns_vector]
|
|
await tbl.alterColumns([
|
|
{
|
|
path: "vector",
|
|
dataType: new arrow.FixedSizeList(
|
|
2,
|
|
new arrow.Field("item", new arrow.Float16(), false),
|
|
),
|
|
},
|
|
]);
|
|
// --8<-- [end:alter_columns_vector]
|
|
// --8<-- [start:drop_columns]
|
|
await tbl.dropColumns(["dbl_price"]);
|
|
// --8<-- [end:drop_columns]
|
|
|
|
{
|
|
// --8<-- [start:vector_search]
|
|
const res = await tbl.search([100, 100]).limit(2).toArray();
|
|
// --8<-- [end:vector_search]
|
|
expect(res.length).toBe(2);
|
|
}
|
|
{
|
|
const data = Array.from({ length: 1000 })
|
|
.fill(null)
|
|
.map(() => ({
|
|
vector: [Math.random(), Math.random()],
|
|
item: "autogen",
|
|
price: Math.round(Math.random() * 100),
|
|
}));
|
|
|
|
await tbl.add(data);
|
|
}
|
|
|
|
// --8<-- [start:create_index]
|
|
await tbl.createIndex("vector");
|
|
// --8<-- [end:create_index]
|
|
|
|
// --8<-- [start:delete_rows]
|
|
await tbl.delete('item = "fizz"');
|
|
// --8<-- [end:delete_rows]
|
|
|
|
// --8<-- [start:drop_table]
|
|
await db.dropTable("myTable");
|
|
// --8<-- [end:drop_table]
|
|
await db.dropTable("empty_table");
|
|
|
|
{
|
|
// --8<-- [start:create_f16_table]
|
|
const db = await lancedb.connect(databaseDir);
|
|
const dim = 16;
|
|
const total = 10;
|
|
const f16Schema = new Schema([
|
|
new Field("id", new Int32()),
|
|
new Field(
|
|
"vector",
|
|
new FixedSizeList(dim, new Field("item", new Float16(), true)),
|
|
false,
|
|
),
|
|
]);
|
|
const data = lancedb.makeArrowTable(
|
|
Array.from(Array(total), (_, i) => ({
|
|
id: i,
|
|
vector: Array.from(Array(dim), Math.random),
|
|
})),
|
|
{ schema: f16Schema },
|
|
);
|
|
const _table = await db.createTable("f16_tbl", data);
|
|
// --8<-- [end:create_f16_table]
|
|
await db.dropTable("f16_tbl");
|
|
}
|
|
});
|
|
});
|