You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Lance Namespace codebase is at [lance-format/lance-namespace](https://github.com/lance-format/lance-namespace).
4
-
This codebase contains code of the Lance Namespace specification
5
-
as well as generated clients and servers using OpenAPI generator.
4
+
This codebase contains:
6
5
7
-
This project should only be used to make spec changes to Lance Namespace,
6
+
- The Lance Namespace specification
7
+
- The core `LanceNamespace` interface and generic connect functionality for all languages except Rust
8
+
(for Rust, these are located in the [lance-format/lance](https://github.com/lance-format/lance) repo)
9
+
- Generated clients and servers using OpenAPI generator
10
+
11
+
This project should only be used to make spec and interface changes to Lance Namespace,
8
12
or to add new clients and servers to be generated based on community demand.
9
13
In general, we welcome more generated components to be added as long as
10
14
the contributor is willing to set up all the automations for generation and publication.
@@ -15,17 +19,94 @@ For contributing changes to implementations other than the directory and REST na
15
19
or for adding new namespace implementations,
16
20
please go to the [lance-namespace-impls](https://github.com/lance-format/lance-namespace-impls) repo.
17
21
22
+
## Project Dependency
23
+
24
+
This project contains the core Lance Namespace specification, interface and generated modules across all languages.
25
+
The dependency structure varies by language due to different build and distribution models.
26
+
27
+
### Rust
28
+
29
+
For Rust, the interface module `lance-namespace` and implementations (`lance-namespace-impls` for REST and directory namespaces)
30
+
are located in the core [lance-format/lance](https://github.com/lance-format/lance) repository.
31
+
This is because Rust uses source code builds, and separating modules across repositories makes dependency management complicated.
32
+
33
+
The dependency chain is: `lance-namespace` → `lance` → `lance-namespace-impls`
34
+
35
+
### Other Languages (e.g. Python, Java)
36
+
37
+
For Python, Java, and other languages, the core `LanceNamespace` interface and generic connect functionality
38
+
are maintained in **this repository** (e.g., `lance-namespace` for Python, `lance-namespace-core` for Java).
39
+
The core [lance-format/lance](https://github.com/lance-format/lance) repository then imports these modules.
40
+
41
+
The reason for this import direction is that `lance-namespace-impls` (REST and directory namespace implementations)
42
+
are used in the Lance Python and Java bindings, and are exposed back through the corresponding language interfaces.
43
+
These language interfaces can also be imported dynamically without the need to have a dependency of the Lance core library bindings in those languages.
44
+
45
+
### Other Implementations
46
+
47
+
For namespace implementations other than directory and REST namespaces,
48
+
those are stored in the [lance-format/lance-namespace-impls](https://github.com/lance-format/lance-namespace-impls) repository,
Copy file name to clipboardExpand all lines: docs/src/dir/catalog-spec.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
-
# Lance Directory Namespace
1
+
# Lance Directory Namespace Spec
2
2
3
3
**Lance directory namespace** is a Lance namespace implementation that stores tables in a directory structure
4
-
on any local or remote storage system. It supports two modes:
4
+
on any local or remote storage system. It has gone through 2 major spec versions:
5
5
6
6
-**V1 (Directory Listing)**: A lightweight, simple 1-level namespace that discovers tables by scanning the directory.
7
7
-**V2 (Manifest)**: A more advanced implementation backed by a manifest table (a Lance table) that supports nested namespaces and better performance at scale.
`manifest_enabled` and `dir_listing_enabled` are used to control using V1 or V2 scheme.
143
+
`manifest_enabled` and `dir_listing_enabled` are used to control using V1 or V2 spec.
144
144
By default we enable both V1 and V2, this means:
145
145
146
146
1. When checking if a table exists in root namespace, it first checks if the table exists in the manifest, then checks if the `<table_name>.lance` exists.
147
147
2. When listing tables in root namespace, it merges tables from both manifest and directory listing, deduplicating by location and table names, manifest tables taking precedence.
148
148
3. When creating tables in root namespaces, it registers them in the manifest and uses V1 `<table_name>.lance` naming for root namespace tables.
149
149
4. If a table in root namespace is renamed, it will start to follow the V2 path definition.
150
-
5. For operations in child namespaces, only V2 scheme is used.
150
+
5. For operations in child namespaces, only V2 spec is used.
151
151
152
152
### Migration from V1 to V2
153
153
154
154
A migration should add all the V1 table directory paths to the manifest.
155
-
Once the user is certain there is no table following v1 scheme,
155
+
Once the user is certain there is no table following v1 spec,
156
156
`dir_listing_enabled` can be set to `false` to disable the compatibility mode.
0 commit comments