geneva-style replacement
python
file_id = str(uuid.uuid4())
data_file_path = dataset_uri / "data" / f"{file_id}.lance"
data_file_name = f"{file_id}.lance"
session = lance.LanceBlobSession(str(data_file_path))
images = session.open_writer("image")
packed = images.new_packed()
packed.write_blob(image_0)
packed.write_blob(image_1)
images.extend(packed.finish())
images.extend(images.load_packed(
existing_blob_id,
offsets=[0, 4096],
sizes=[4096, 8192],
))
image_array = images.finish()
physical_schema = pa.schema([id_field, images.field])
batch = pa.record_batch([id_array, image_array],
schema=physical_schema)
with LanceFileWriter(str(data_file_path),
schema=physical_schema,
version="2.2") as writer:
writer.write_batch(batch)
data_file = lance.fragment.DataFile.create(dataset, data_file_name)
operation = lance.LanceOperation.DataReplacement([
lance.LanceOperation.DataReplacementGroup(fragment_id, data_file)
])
dataset = lance.LanceDataset.commit(dataset, operation,
read_version=dataset.version)
session
LanceBlobSession(data_file_path) derives data_dir, data_file_key, and the sidecar path namespace.
scope
new_packed
Create a Lance-owned packed sidecar and return a PackedBlobWriter. finish() returns prepared values in write order.
new file
new_dedicated
Create one dedicated sidecar. Bytes may be appended in multiple writes; finish() returns one prepared value.
new file
load_packed
Load an existing packed sidecar under the current data file key, validate offset/size ranges, and return values.
existing
load_dedicated
Load an existing dedicated sidecar and use the object size as the descriptor size.
existing