1

我需要删除 Cassandra 中的所有行,但TRUNCATE tbl_name由于尚不支持 TRUNCATE api,因此无法使用 Amazon Keyspace 执行。

现在我脑海中浮现的几个想法有点棘手:

解决方案 A

  • 选择所有行
  • 循环所有行并将其删除(一个接一个或一批)

解决方案 B

  • DROP TABLE
  • CREATE TABLE 与旧表的结构

你有什么想法让这个过程保持简单吗?

提前 Tnx

4

2 回答 2

2

如果不需要数据。选项 B - 删除表并重新创建。您可以使用自定义表属性传入创建表语句的容量。

CREATE TABLE my_keyspace.my_table (
     id text,
     division text,
     project text,
     role text,
     manager_id text,
     PRIMARY KEY (id,division))
      WITH CUSTOM_PROPERTIES=
              {'capacity_mode':
                     {'throughput_mode'       : 'PROVISIONED', 
                      'read_capacity_units'   : 10, 
                      'write_capacity_units'  : 20},
               'point_in_time_recovery': {'status': 'enabled'}}
            AND TAGS={'pii' :'true', 
                      'prod':'true'
                     };

选项 C。如果您需要数据,您还可以利用按需容量模式,即按请求付费模式。没有要求,您只需支付存储费用。您可以每天更改一次模式。

ALTER TABLE my_keyspace.my_table
WITH CUSTOM_PROPERTIES=
              {'capacity_mode': {'throughput_mode': 'PAY_PER_REQUEST'}} 
于 2020-09-30T14:03:18.730 回答
1

在没有 TRUNCATE 的情况下,解决方案 B 应该没问题。在 Cassandra 的旧版本(2.1 之前的版本)中,重新创建具有相同名称的表是一个问题。请参阅文章Datastax 常见问题解答博客。但从那时起,问题已通过CASSANDRA-5202解决。

如果不再需要表中的数据,最好删除表并重新创建它。此外,如果表包含大量数据,这将是一项非常繁琐的任务。

于 2020-09-30T12:33:22.157 回答