我如何在 Cassandra 3 中使用 CQL 来确定 table 是否使用压缩存储?

How can I use CQL in Cassandra 3 to determine if a table uses compact storage?

如果我使用 Cassandra 3 附带的 cqlsh 工具,它可以告诉我是否创建了 table WITH COMPACT STORAGE。我所要做的就是 describe table_name; 它向我展示了用于创建 table.

的 CQL

describe 功能是 cqlsh 的特性,而不是 CQL 语言的特性。我需要确定 table 是否使用仅使用 CQL 的紧凑型存储。我需要在 system_schema 中查询什么来确定 table 是否正在使用压缩存储?

根据TableMetadataV3class在cassandra驱动中的定义python,判断紧凑存储的逻辑如下

 flags = row.get('flags', set())
            if flags:
                compact_static = False
                table_meta.is_compact_storage = 'dense' in flags or 'super' in flags or 'compound' not in flags
                is_dense = 'dense' in flags
            else:
                compact_static = True
                table_meta.is_compact_storage = True
                is_dense = False

row对象是一个字典,它是查询"SELECT * FROM system_schema.tables"

的结果

因此,要确定 table 是否使用压缩存储,需要执行以下步骤。

  1. 使用 CQL 查询 Select flags from system_schema.tables where keyspace_name=? and table_name=?。将键空间和 table 替换为参数
  2. 如果 flags 为空,则 table 使用压缩存储。
  3. 如果标志以 'dense' 或 'super' 作为集合的成员存在,则 table 使用压缩存储。
  4. 如果 'compound' 不在集合中,则 table 使用压缩存储。
  5. 否则 table 不使用压缩存储。