我如何在 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 是否正在使用压缩存储?
根据TableMetadataV3
class在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 是否使用压缩存储,需要执行以下步骤。
- 使用 CQL 查询
Select flags from system_schema.tables where keyspace_name=? and table_name=?
。将键空间和 table 替换为参数
- 如果 flags 为空,则 table 使用压缩存储。
- 如果标志以 'dense' 或 'super' 作为集合的成员存在,则 table 使用压缩存储。
- 如果 'compound' 不在集合中,则 table 使用压缩存储。
- 否则 table 不使用压缩存储。
如果我使用 Cassandra 3 附带的 cqlsh
工具,它可以告诉我是否创建了 table WITH COMPACT STORAGE
。我所要做的就是 describe table_name;
它向我展示了用于创建 table.
describe
功能是 cqlsh
的特性,而不是 CQL 语言的特性。我需要确定 table 是否使用仅使用 CQL 的紧凑型存储。我需要在 system_schema
中查询什么来确定 table 是否正在使用压缩存储?
根据TableMetadataV3
class在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 是否使用压缩存储,需要执行以下步骤。
- 使用 CQL 查询
Select flags from system_schema.tables where keyspace_name=? and table_name=?
。将键空间和 table 替换为参数 - 如果 flags 为空,则 table 使用压缩存储。
- 如果标志以 'dense' 或 'super' 作为集合的成员存在,则 table 使用压缩存储。
- 如果 'compound' 不在集合中,则 table 使用压缩存储。
- 否则 table 不使用压缩存储。