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

时间:2019-09-06 06:24:16

标签: clickhouse

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

1 个答案:

答案 0 :(得分:0)

ALTER TABLE .. MODIFY COLUMN查询无法执行将列的类型从 int 更改为 Array(int)的操作,因为不允许进行这种类型转换。

因此,您需要执行以下步骤:

  1. 添加类型为 Array(int)
  2. 的新列
LAG
  1. update数组列值
SET
  1. 重要:取决于表中的行数,此操作可能需要很多时间才能执行。要检查更新(突变)的状态或查找失败的原因,请观察 system.mutations -table
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);
*/
  1. 完成变异后,可以删除原始列
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]        │
└────┴───────┴─────────────┘
*/

注释:如果表位于多个服务器上,则为每个查询分配额外的ON CLUSTER子句。