我在表中有一个数据类型为的列 Int32 . 是否可以将列转换为数组数据类型 Array(Int32) . 如果没有其他方法,请告诉我。
Int32
Array(Int32)
wribegjk1#
alter table无法将列的类型从int更改为array(int)。。修改列查询,因为不允许这种类型转换。因此,您需要遵循以下步骤:添加类型为array(int)的新列
ALTER TABLE test.test_004 ADD COLUMN `value_array` Array(int); /* Test table preparation: CREATE TABLE test.test_004 ( `id` int, `value` int ) ENGINE = MergeTree(); INSERT INTO test.test_004 VALUES (1, 10), (2, 20), (3, 30), (4, 40); * /
更新数组列值
ALTER TABLE test.test_004 UPDATE value_array = [value] WHERE 1 /* Result ┌─id─┬─value─┬─value_array─┐ │ 1 │ 10 │ [10] │ │ 2 │ 20 │ [20] │ │ 3 │ 30 │ [30] │ │ 4 │ 40 │ [40] │ └────┴───────┴─────────────┘ * /
要点:取决于表中的行数,执行此操作可能需要很多时间。要检查更新(突变)的状态或查找失败的原因,请查看system.mutations-table
SELECT * FROM system.mutations WHERE table = 'test_004'
当变异完成后,原来的列可以被删除
ALTER TABLE test.test_004 DROP COLUMN value
备注:如果表位于多个服务器上,则为每个查询指定extra on cluster子句。
1条答案
按热度按时间wribegjk1#
alter table无法将列的类型从int更改为array(int)。。修改列查询,因为不允许这种类型转换。
因此,您需要遵循以下步骤:
添加类型为array(int)的新列
更新数组列值
要点:取决于表中的行数,执行此操作可能需要很多时间。要检查更新(突变)的状态或查找失败的原因,请查看system.mutations-table
当变异完成后,原来的列可以被删除
备注:如果表位于多个服务器上,则为每个查询指定extra on cluster子句。