2013-08-22 16 views
7

Tôi đang cố gắng lấy tên cột nhưng không thể tìm cách chỉ lấy tên cột.trong cassandra-cli làm thế nào để có được tất cả các tên cột trong một bảng và làm thế nào để có được nó bằng cách sử dụng hector trong java?

Trong cli tôi thực hiện lệnh describe table nodes, nó trả lại kết quả:

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); 

Như trình bày trong question này, tôi cố gắng sử dụng lệnh sau đây trong cli:

SELECT column_name FROM system.schema_columnfamilies WHERE keyspace_name = 'ianew' AND columnfamily_name = 'nodes'; 

nhưng nó đã cho các lỗi:

Bad Request: Undefined name column_name in selection clause 
Perhaps you meant to use CQL 2? Try using the -2 option when starting cqlsh. 

Sau đó, tôi đã thử với:

SELECT * FROM system.schema_columnfamilies WHERE keyspace_name = 'ianew' AND columnfamily_name = 'nodes'; 

Nó trả lại tất cả những điều sau đây:

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 

Như trình bày trong post này, tôi đã cố gắng sử dụng hector trong 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()); 
} 

nhưng nó lại không có kết quả.

Tôi muốn đầu ra được cái gì đó như:

TABLE nodes: 
Columns: key text PRIMARY KEY, id text, scores text, topic1 text, topic2 text, topic3 text, topic4 text, topics text 

và kết quả tương tự qua Hector.

phiên bản tôi đang sử dụng:

[cqlsh 2.3.0 | Cassandra 1.2.4 | CQL spec 3.0.0 | Thrift protocol 19.35.0] 

Trả lời

10

Trong cassandra 1.1 đó thực sự sẽ làm việc, tuy nhiên gia đình schema_columnfamilies cột đã được sửa đổi kể từ đó.

Bad Request: Undefined name column_name in selection clause

Trong thông tin 1.2.x Cassandra về cột sống trong một keyspace riêng biệt gọi là schema_columns với giản đồ sau:

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) 
); 

Hãy thử một cái gì đó dọc theo những dòng:

SELECT * FROM system.schema_columns 
WHERE keyspace_name = 'ianew' AND columnfamily_name = 'nodes'; 

Documentation về nội dung của không gian phím hệ thống.

+0

ya .. Tôi cố gắng tất cả những điều có thể. Nó vẫn dẫn đến lỗi .. bằng truy vấn 'SELECT column_aliases FROM system.schema_columnfamilies WHERE keyspace_name = 'ianew' AND columnfamily_name = 'nodes';', Nó trả về kết quả: 'column_aliases ----------- ----- [] ' –

+0

@NDThokare Tôi sẽ chỉnh sửa câu hỏi. Chúng tôi thực sự là sau schema_columns CF thay vì schema_columnfamilies: http://www.datastax.com/dev/blog/the-data-dictionary-in-cassandra-1-2 –

+0

cảm ơn @Lyuben, đúng vậy .. bây giờ tôi có kết quả bằng cách sử dụng 'SELECT column_name FROM system.schema_columnfamilies WHERE keyspace_name = 'ianew' AND columnfamily_name = 'nodes';' –

Các vấn đề liên quan