【问题标题】:Cassandra Altering the tableCassandra 改变桌子
【发布时间】:2018-10-06 12:37:19
【问题描述】:

我在 Cassandra 中有一张表,说员工(id、电子邮件、角色、姓名、密码)只有 id 作为我的主键。

我想……

1.添加另一列 (manager_id),其中包含默认值

我知道我可以在表中添加一列,但我无法通过 CQL 为该列提供默认值。我也不能稍后更新 manager_id 的值,因为我需要知道 id(分区键和值是随机生成的我不知道的唯一值)来更新行。有什么办法可以实现吗?

2。将此表重命名为 all_employee。

我也知道不允许在 cassandra 中重命名表。所以我试图将表(员工)的数据复制到 csv 并从 csv 复制到新表(all_employee)并删除旧表(员工)。我正在通过一个带有 cql 查询的自动化脚本来执行此操作,并且脚本可以正常工作,但是如果再次执行它会失败(我不能限制),因为一旦删除表员工就不会在那里。本质上,我在 COPY 查询中寻找 cql 不支持的“如果存在”子句。有没有其他方法可以达到结果?

请注意,表中的数据量非常小,因此性能不是问题。

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    对于#1

    我不认为 cassandra 支持默认列。您需要从您的应用程序中执行此操作。每次插入一行时写入一些默认值。

    对于#2

    您可以在尝试从中复制之前检查该表是否存在。

    SELECT your_table_name FROM system_schema.tables WHERE keyspace_name='your_keyspace_name';
    

    【讨论】:

    • 嗯,我现在的设置,我无法从我的应用程序中控制它。对于#2,我在设置脚本中有所有这些查询,那么如何确保 COPY 查询使用查询返回的结果来检查表的存在?
    • 您不能在脚本中使用 if 条件来依赖上述查询的结果,然后只进行复制?
    • 没有。它是一个包含所有查询的脚本。如果我必须这样做,我将不得不重构(大量工作)并让我的设置知道我想提供给应用程序外部的脚本(不是我想要的东西)中有什么。
    猜你喜欢
    • 2010-11-26
    • 2017-02-07
    • 2019-07-09
    • 2015-11-09
    • 2023-04-03
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多