如何在clickhouse中将列的类型从数字更改为数组

xyhw6mcr  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(1288)

我在表中有一个数据类型为的列 Int32 . 是否可以将列转换为数组数据类型 Array(Int32) . 如果没有其他方法,请告诉我。

wribegjk

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子句。

相关问题