2016-03-23 74 views
1

我連接到一個Cassandra數據庫,並試圖找出列系列中的條目具有什麼屬性。我無法使用cqlsh命令行實用程序。創建連接後,我有:描述卡桑德拉ColumnFamily

myCF = ColumnFamily(myConncetion, "user") 
for u in myCF.get_range(): 
    u_item = u[1] 
    name = u_item.get('FIRST_NAME') 
    print name 

這將打印所有用戶的名稱。我想知道u_item擁有的除「FIRST_NAME」以外的其他屬性。是否有可以描述其屬性的內置函數?提前致謝。

回答

1

你正在運行哪個版本的Cassandra?如果你想去透過表編程,你可以嘗試從系統表查詢的模式:

如果你在卡桑德拉> = 3.x的+:

SELECT column_name FROM system_schema.columns 
    WHERE keyspace_name='yourkeyspacename' AND table_name='yourtablename'; 

如果你在卡桑德拉< = 2.2.x;

SELECT column_name FROM system.schema_columns 
    WHERE keyspace_name='yourkeyspacename' AND columnfamily_name ='yourtablename'; 

我怎麼能執行這個由python腳本Select語句?

如果我對Cassandra的運行2.2.5,我可以把上面的代碼,使之成爲一個Python腳本(cassConnect.py)這樣的工作:

from cassandra.cluster import Cluster 
from cassandra.auth import PlainTextAuthProvider 

import sys 

hostname=sys.argv[1] 
username=sys.argv[2] 
password=sys.argv[3] 
keyspace=sys.argv[4] 
table=sys.argv[5] 

nodes = [] 
nodes.append(hostname) 

auth_provider = PlainTextAuthProvider(username=username, password=password) 
cluster = Cluster(nodes,auth_provider=auth_provider) 
session = cluster.connect(keyspace) 

pStatement = session.prepare(""" 
    SELECT column_name FROM system.schema_columns WHERE keyspace_name=? AND columnfamily_name=?; 
""") 

rows = session.execute(pStatement,[keyspace,table]) 
for row in rows: 
    print row[0] 

$ python cassConnect.py 127.0.0.1 aploetz bacon stackoverflow user 
email 
first 
last 
username 
+0

我怎麼能執行此Select語句從一個python腳本?正如我所提到的,我不能使用@TheScendant編輯所做的cqlsh命令行工具 – TheScendant

+0

。 – Aaron

+0

謝謝你,這是我需要的! – TheScendant