【发布时间】:2017-02-19 18:25:09
【问题描述】:
在 Cassandra 中将 int 迁移到 bigint 的最简单方法是什么?我想创建一个 bigint 类型的新列,然后运行一个脚本来基本上设置该列的值 = 所有行的 int 列的值,然后删除原始列并重命名新列。但是,我想知道是否有人有更好的选择,因为这种方法不太适合我。
【问题讨论】:
在 Cassandra 中将 int 迁移到 bigint 的最简单方法是什么?我想创建一个 bigint 类型的新列,然后运行一个脚本来基本上设置该列的值 = 所有行的 int 列的值,然后删除原始列并重命名新列。但是,我想知道是否有人有更好的选择,因为这种方法不太适合我。
【问题讨论】:
您可以ALTER 您的表并将您的int 列更改为varint 类型。检查the documentation 关于ALTER TABLE 和data types compatibility 矩阵。
唯一的另一种选择就是您所说的:添加一个新列并逐行填充它。删除第一列可以完全是可选的:如果您在执行插入时不分配值,所有内容都将保持原样,并且新记录不会占用空间。
【讨论】:
您可以使用varint ALTER 将 bigint 存储在 cassandra 中。看例子-
cassandra@cqlsh:demo> CREATE TABLE int_test (id int, name text, primary key(id));
cassandra@cqlsh:demo> SELECT * FROM int_test;
id | name
----+------
(0 rows)
cassandra@cqlsh:demo> INSERT INTO int_test (id, name) VALUES ( 215478936541111, 'abc');
cassandra@cqlsh:demo> SELECT * FROM int_test ;
id | name
---------------------+---------
215478936541111 | abc
(1 rows)
cassandra@cqlsh:demo> ALTER TABLE demo.int_test ALTER id TYPE varint;
cassandra@cqlsh:demo> INSERT INTO int_test (id, name) VALUES ( 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 'abcd');
cassandra@cqlsh:demo> SELECT * FROM int_test ;
id | name
------------------------------------------------------------------------------------------------------------------------------+---------
215478936541111 | abc
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 | abcd
(2 rows)
cassandra@cqlsh:demo>
【讨论】: