2013-01-06 98 views
3

使用Cassandra 1.2。我創建使用CQL 3以下方式表:用pycassa閱讀Cassandra 1.2表格

CREATE TABLE foo (
    user text PRIMARY KEY, 
    emails set<text> 
); 

現在我想通過pycassa來查詢數據:

import pycassa 
from pycassa.pool import ConnectionPool 
pool = ConnectionPool('ks1', ['localhost:9160']) 
foo = pycassa.ColumnFamily(pool, 'foo') 

這給了我

Traceback (most recent call last): 
    File "test.py", line 5, in <module> 
    foo = pycassa.ColumnFamily(pool, 'foo') 
    File "/home/john/src/pycassa/lib/python2.7/site-packages/pycassa/columnfamily.py", line 284, in __init__ 
    self.load_schema() 
    File "/home/john/src/pycassa/lib/python2.7/site-packages/pycassa/columnfamily.py", line 312, in load_schema 
    raise nfe 
pycassa.cassandra.ttypes.NotFoundException: NotFoundException(_message=None, why='Column family foo not found.') 

這怎麼可能實現的呢?

回答

0

它肯定顯示你的列族(表)沒有被正確定義。運行cqlsh,然後運行describe keyspace ks1;。我的猜測是你不會看到你的CF列出。檢查您的密鑰空間名稱是否正確。與CQL3創建

1

列族不能使用節儉API,它pycassa用途。

您可以read this如果您有更多問題。

5

如果您已經創建使用CQL3你的表,你想通過舊貨基於客戶端來訪問他們。您將不得不指定Compact Storage屬性。 e.g:

CREATE TABLE dummy_file_test 
(
dtPtn   INT, 
pxID   INT, 
startTm  INT, 
endTm   INT, 
patID   BIGINT, 
efile   BLOB, 
PRIMARY KEY((dtPtn, pxID, startTm)) 
)with compact storage; 

這是我必須做的,同時訪問基於CQL3柱家有Pycassa

3

我與卡桑德拉1.2.8和1.9.0 pycassa和CQL3測試。我能夠驗證在CREATE表語句中使用的「WITH COMPACT STORAGE」在CQL3中創建的表確實使表(列族)對pycassa可見。不幸的是,我無法找到如何修改表格以使「WITH COMPACT STORAGE」顯示在DESCRIBE TABLE命令中。 ALTER TABLE WITH語句應該允許您更改該設置,但沒有運氣。

來驗證結果簡單地創建使用使用WITH壓縮存儲CQL3之一,一個沒有它的兩個表,結果是重新producable。

它看起來像要完成既定目標的表都需要被丟棄,然後使用「緊湊存儲」選項作爲CREATE語句的一部分重新創建。如果您不想丟失任何數據,則可能需要重命名現有表格,使用正確的選項創建新的空表格,然後將數據移回到所需的表格中。除非,當然你可以找到正確的表格,如果可能的話,這會更容易。