descargar - en cassandra-cli cómo obtener todos los nombres de columna en una tabla y cómo obtenerlo usando hector en java?
descargar cassandra para windows (1)
Estoy tratando de obtener los nombres de las columnas, pero no pude obtener solo los nombres de las columnas.
En cli ejecuto el comando describe table nodes
, devolvió el resultado:
CREATE TABLE nodes (
key text PRIMARY KEY,
id text,
scores text,
topic1 text,
topic2 text,
topic3 text,
topic4 text,
topics text
) WITH COMPACT STORAGE AND
bloom_filter_fp_chance=0.010000 AND
caching=''KEYS_ONLY'' AND
comment='''' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
read_repair_chance=0.100000 AND
replicate_on_write=''true'' AND
populate_io_cache_on_flush=''false'' AND
compaction={''class'': ''SizeTieredCompactionStrategy''} AND
compression={''sstable_compression'': ''SnappyCompressor''};
CREATE INDEX idx_nodes_id ON nodes (id);
Como figura en esta pregunta , intento usar el siguiente comando en cli:
SELECT column_name FROM system.schema_columnfamilies WHERE keyspace_name = ''ianew'' AND columnfamily_name = ''nodes'';
pero dio el error:
Bad Request: Undefined name column_name in selection clause
Perhaps you meant to use CQL 2? Try using the -2 option when starting cqlsh.
Entonces probé con:
SELECT * FROM system.schema_columnfamilies WHERE keyspace_name = ''ianew'' AND columnfamily_name = ''nodes'';
Devolvió todas las siguientes cosas:
keyspace_name | columnfamily_name | bloom_filter_fp_chance | caching | column_aliases | comment | compaction_strategy_class | compaction_strategy_options | comparator | compression_parameters | default_read_consistency | default_validator | default_write_consistency | gc_grace_seconds | id | key_alias | key_aliases | key_validator | local_read_repair_chance | max_compaction_threshold | min_compaction_threshold | populate_io_cache_on_flush | read_repair_chance | replicate_on_write | subcomparator | type | value_alias
---------------+-------------------+------------------------+-----------+----------------+---------+-----------------------------------------------------------------+-----------------------------+------------------------------------------+-----------------------------------------------------------------------------+--------------------------+------------------------------------------+---------------------------+------------------+------+-----------+-------------+------------------------------------------+--------------------------+--------------------------+--------------------------+----------------------------+--------------------+--------------------+---------------+----------+-------------
ianew | nodes | null | KEYS_ONLY | [] | | org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy | {} | org.apache.cassandra.db.marshal.UTF8Type | {"sstable_compression":"org.apache.cassandra.io.compress.SnappyCompressor"} | null | org.apache.cassandra.db.marshal.UTF8Type | null | 864000 | null | null | [] | org.apache.cassandra.db.marshal.UTF8Type | 0 | 32 | 4 | False | 0.1 | True | null | Standard | null
Como figura en esta publicación , intenté usar hector en java:
SliceQuery<String, String, String> query = HFactory.createSliceQuery(keyspace, StringSerializer.get(), StringSerializer.get(), StringSerializer.get());
query.setColumnFamily(columnFamilyName);
query.setKey("key");
query.setRange(null, null, false, Integer.MAX_VALUE);
ColumnSliceIterator<String, String, String> iterator = new ColumnSliceIterator<String, String, String>(query, null, "/uFFFF", false);
while (iterator.hasNext()) {
HColumnImpl<String, String> column = (HColumnImpl<String, String>) iterator.next();
System.out.println("Column name = " + column.getName() + "; Column value = " + column.getValue());
colNames.add(column.getName());
}
pero regresó sin resultados.
Quiero que la salida sea algo así como:
TABLE nodes:
Columns: key text PRIMARY KEY, id text, scores text, topic1 text, topic2 text, topic3 text, topic4 text, topics text
y resultado similar a través de Hector.
Versiones que estoy usando:
[cqlsh 2.3.0 | Cassandra 1.2.4 | CQL spec 3.0.0 | Thrift protocol 19.35.0]
En cassandra 1.1 eso sí funcionaría, sin embargo, la familia de columnas schema_columnfamilies
se ha modificado desde entonces.
Solicitud incorrecta: nombre indefinido column_name en la cláusula de selección
En Cassandra 1.2.x la información sobre las columnas vive en un espacio de claves separado llamado schema_columns con el siguiente esquema:
CREATE TABLE schema_columns (
keyspace_name text,
columnfamily_name text,
column_name text,
component_index int,
index_name text,
index_options text,
index_type text,
validator text,
PRIMARY KEY (keyspace_name, columnfamily_name, column_name)
);
Pruebe algo en esta línea:
SELECT * FROM system.schema_columns
WHERE keyspace_name = ''ianew'' AND columnfamily_name = ''nodes'';
Documentación sobre los contenidos del espacio de teclado del sistema.