lance.LanceDataset.alter_columns(*修改: Iterable[AlterColumn])

修改列名、数据类型和可空性。

重命名的列可以保留其上的任何索引。如果某列具有IVF_PQ索引,即使该列被转换为其他类型,索引仍可保留。但目前其他类型的索引尚不支持类型转换。

列类型可以进行向上转型(例如从int32转为int64)或向下转型(例如从int64转为int32)。但若存在无法用新类型表示的值时,向下转型会失败。通常来说,列可以转型为相同的大类类型:整型转整型、浮点型转浮点型、字符串转字符串。不过字符串、二进制和列表列可以在其大小变体之间进行转型。例如:字符串转大字符串、二进制转大二进制、列表转大列表。

重命名的列可以保留其上的任何索引。但是,如果将该列转换为不同类型,其索引将被删除。

Parameters:
alterations : Iterable[Dict[str, Any]]

一个字典序列,每个字典包含以下键:

  • ”path”: str

    要修改的列路径。对于顶级列,这是列名。 对于嵌套列,这是点分隔的路径,例如"a.b.c"。

  • ”name”: str, optional

    列的新名称。如果未指定,则列名保持不变。

  • ”nullable”: bool, optional

    列是否可为空。如果未指定,则列的可空性不变。 只能将非空列改为可空列。目前不能将可空列改为非空列。

  • ”data_type”: pyarrow.DataType, optional

    要将列转换到的新数据类型。如果未指定,则列的数据类型保持不变。

示例

>>> import lance
>>> import pyarrow as pa
>>> schema = pa.schema([pa.field('a', pa.int64()),
...                     pa.field('b', pa.string(), nullable=False)])
>>> table = pa.table({"a": [1, 2, 3], "b": ["a", "b", "c"]})
>>> dataset = lance.write_dataset(table, "example")
>>> dataset.alter_columns({"path": "a", "name": "x"},
...                       {"path": "b", "nullable": True})
>>> dataset.to_table().to_pandas()
   x  b
0  1  a
1  2  b
2  3  c
>>> dataset.alter_columns({"path": "x", "data_type": pa.int32()})
>>> dataset.schema
x: int32
b: string