2016-08-29 2 views
1

Si j'utilise l'outil cqlsh fourni avec Cassandra 3, il peut me dire si une table a été créée WITH COMPACT STORAGE. Tout ce que j'ai à faire est describe table_name; et il me montre le CQL utilisé pour créer la table.Comment puis-je utiliser CQL dans Cassandra 3 pour déterminer si une table utilise un stockage compact?

La fonctionnalité describe est une fonctionnalité de cqlsh, et non du langage CQL. Je dois déterminer si une table utilise un stockage compact en utilisant simplement CQL. Que dois-je interroger dans le system_schema pour déterminer si une table utilise un stockage compact?

+0

En Cassandra> 3.0 stockage compact est juste un endroit et ne veut rien dire. Ils ont mis à jour le moteur de stockage et maintenant tout est compact. –

+0

C'est incorrect. L'utilisation du stockage compact impose de nombreuses restrictions sur ce qui peut être fait avec la table. –

+0

vérifier http://datastax.com/2015/12/storage-engine-30 et http://issues.apache.org/jira/browse/CASSANDRA-8099. "En fait, une table aura la même disposition interne si elle utilise COMPACT STORAGE ou pas, donc il n'y aura aucun impact sur la taille sur le disque.". Cela ne fait aucune différence à part limiter ce que vous pouvez faire. –

Répondre

1

De la définition de la classe TableMetadataV3 dans le pilote cassandra pour python, la logique pour déterminer le stockage compact est comme suit

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 

L'objet row est un dictionnaire qui est le résultat de la requête "SELECT * FROM system_schema.tables"

Ainsi, pour déterminer si une table utilise un stockage compact, les étapes suivantes sont nécessaires.

  1. Utilisez CQL pour interroger Select flags from system_schema.tables where keyspace_name=? and table_name=?. Remplacez l'espace-clavier et la table par des paramètres
  2. Si les indicateurs sont vides, la table utilise un stockage compact.
  3. Si des drapeaux sont présents avec 'dense' ou 'super' comme membres de l'ensemble, la table utilise un stockage compact.
  4. Si 'composé' ne figure pas dans l'ensemble, la table utilise un stockage compact.
  5. Sinon, la table n'utilise pas de stockage compact.