我有一个包含数百万条记录的现有表,最初我们有两列作为分区键和集群键,现在我想在表中添加两列作为分区键。
如何?
答案 0 :(得分:4)
如果更改分区键,则需要创建新表并导入现有数据。这部分是由于分区键不等于关系数据库中的主键。分区键由Cassandra进行哈希处理,并且该哈希用于查找磁盘上的分区。如果更改分区键,则更改哈希值,无法再查找分区!
CREATE TABLE KEYSPACE_NAME.AMAR_EXAMPLE (
COLUMN_1 TYPE,
COLUMN_2 TYPE,
COLUMN_3 TYPE,
...
COLUMN_N TYPE
// Here we declare the partition key columns and clustering columns
PRIMARY KEY ((COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4), CLUSTERING_COLUMN)
)
//If you need to change the default clustering order declare that here
WITH CLUSTERING ORDER BY (COLUMN_4 DESC);
您可以使用COPY
将数据导出为CSV,然后通过COPY
将数据导入新表格,或使用SSTABLELOADER
。有很多关于如何使用这些工具的文档和演练。例如,this Datastax blog post讨论了对更新后的SSTABLELOADER
所做的更改。如果创建新表并导入现有数据,则将创建新分区和新哈希。在创建表之后,Cassandra不会让您只是在分区键中添加其他列。
了解您的数据和Cassandra数据建模技术将有助于减少您在更改分区键时可能发现的工作量。查看Datastax提供的自学课程。 DS220: Data Modeling可以提供帮助。