static lance.LanceDataset.commit(base_uri: str | Path | LanceDataset, 操作: LanceOperation.BaseOperation | 事务, blobs_op: LanceOperation.BaseOperation | None = None, read_version: int | None = None, commit_lock: CommitLock | None = None, storage_options: dict[str, str] | None = None, enable_v2_manifest_paths: bool | None = None, 分离: bool | None = False, max_retries: int = 20) LanceDataset

创建数据集的新版本

此方法是一个高级方法,允许用户描述对数据文件所做的更改。当使用Lance应用更改时(例如使用LanceDatasetwrite_dataset()),则不需要此方法。

它当前的目的是允许在分布式环境中进行更改,其中没有单一进程完成所有工作。例如,分布式批量更新或分布式批量修改操作。

一旦完成所有更改,可以调用此方法通过更新数据集清单使更改生效。

警告

这是一个高级API,不提供与其他API相同级别的验证。例如,调用者有责任确保片段对模式有效。

Parameters:
base_uri : str, Path, or LanceDataset

数据集的基础URI,或者数据集对象本身。使用数据集对象可能更高效,因为它可以复用文件元数据缓存。

operation : BaseOperation

应用于数据集的操作。这描述了已进行的更改。可用的操作请参见LanceOperation

read_version : int, optional

作为变更基础的数据集版本。 覆盖或恢复操作不需要此版本。

commit_lock : CommitLock, optional

自定义提交锁。仅当您的对象存储不支持原子提交时才需要。详情请参阅用户指南。

storage_options : optional, dict

针对特定存储连接的额外选项。这用于存储连接参数,如凭证、端点等。

enable_v2_manifest_paths : bool, optional

如果为True,且这是一个新数据集,则使用新的V2清单路径。 这些路径能更高效地在对象存储上打开包含多个版本的数据集。如果数据集已存在,此参数将不起作用。要迁移现有数据集,请改用migrate_manifest_paths_v2()方法。默认为False。警告: 启用此选项将使旧版Lance(0.17.0之前版本)无法读取该数据集。

detached : bool, optional

如果为True,则该提交不会成为数据集谱系的一部分。它将永远不会显示为最新数据集,未来唯一查看它的方式是通过指定版本号检出。该版本将是一个随机版本号,仅在分离提交中保持唯一。调用方应将其存储在某处,因为未来将无法通过其他方式获取它。

max_retries : int

提交数据集时执行的最大重试次数。

Returns:

Lance数据集的新版本。

Return type:

LanceDataset

示例

使用LanceOperation.Overwrite操作创建新数据集:

>>> import lance
>>> import pyarrow as pa
>>> tab1 = pa.table({"a": [1, 2], "b": ["a", "b"]})
>>> tab2 = pa.table({"a": [3, 4], "b": ["c", "d"]})
>>> fragment1 = lance.fragment.LanceFragment.create("example", tab1)
>>> fragment2 = lance.fragment.LanceFragment.create("example", tab2)
>>> fragments = [fragment1, fragment2]
>>> operation = lance.LanceOperation.Overwrite(tab1.schema, fragments)
>>> dataset = lance.LanceDataset.commit("example", operation)
>>> dataset.to_table().to_pandas()
   a  b
0  1  a
1  2  b
2  3  c
3  4  d