- 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