2012-07-09 57 views

回答

8

最好的辦法,如果你正在使用Cassandra的1.1:

SELECT column_name FROM system.schema_columnfamilies WHERE keyspace_name = X AND columnfamily_name = Y 

參見http://www.datastax.com/dev/blog/schema-in-cassandra-1-1

+0

這裏有一些很好的hector示例這看起來是最方便的解決方案。我現在使用的是Cassandra 1.0.9,所以我不能嘗試這個。 – user1511772 2012-07-10 08:01:32

+1

對於Cassandra 1.2(顯然,我使用的是2.0.4),您需要查詢[schema_columns](http://www.datastax.com/documentation/cql/cql_using/use_query_system_c.html?pagename=docs&version=1.2&file = cql_cli/using/query_system_tables) 'SELECT column_name FROM system.schema_columns WHERE keyspace_name =? AND columnfamily_name =?' – 2014-01-29 20:45:28

+0

在Cassandra 2中不起作用。*。任何鏈接到網站? – shankbond 2015-04-06 03:46:02

1

這個答案有幾個部分。

首先,要回答您的具體問題,您應該使用sliceQuery來獲取連續的所有列。傳遞一個空字節緩衝區的開始和結束值,有效地請求所有列:

ByteBuffer empty = ByteBufferUtil.EMPTY_BYTE_BUFFER;  
sliceQuery.setRange(empty,empty,false,100); 

其次,你需要做一個關於數據模型被存儲在列族假設。

如果數據模型是靜態的(每個對象一個行,每個屬性一個列),那麼返回的列名應該是要顯示的列名。但是,如果數據以動態方式存儲(每列一個對象,具有相同主鍵的所有對象都存儲在同一行中) - 例如時間序列 - 則需要了解列名字(可能是複合的)需要被解釋。動態方法的另一個非常常見的用法是在通過CQL定義時,列族持續存在的方式。

我應該補充說,沒有辦法告訴一個列族如何被用來存儲對象。有可以查詢的模式,但它只能告訴你數據如何在持久化時被格式化,而不是數據(和屬性名稱)如何被序列化和反序列化。

+0

對不起,但在此之前,我得到的所有列在一排,我需要獲得該行,並且需要知道行鍵才能做到這一點。在我的情況下,我只知道列家族的名稱,而不瞭解其中的行。所以我想要做的是掃描所有行並收集行標識符,或者至少掃描特定列的所有值。 P.S.我來自一個關係世界,Cassandra給了我很大的困難。 – user1511772 2012-07-09 12:55:09

+0

所以你的問題真的是關於如何使用赫克託普遍? – 2012-07-09 13:32:18

+0

http://hector-client.github.com/hector/build/html/content/getting_started.html#read – pd40 2012-07-10 00:17:23

0

試試這個:

select columnfamily_name from system.schema_columnfamilies where keyspace_name=‘mykeyspace';