2014-03-31 174 views
1

我正在寫一些將隨時間收集數據的python代碼。我需要將它存儲在Cassandra中。 我花了整整一天的時間,但找不到有效的東西。Python Cassandra cql:插入時間戳和blob

CREATE TABLE timearchive 
    (name_yymmddhh text, name text, ip text, time_current timestamp, data blob, 
    PRIMARY KEY (name_yymmddhh, time_current)); 

我可以創建表格,但我無法插入各種數據(time_current timestamp,data blob)。我無法正確格式化。我打算讓行按小時打破(數據大小在我的用例中應該沒問題),並且每個數據條目的列(2-3/min)。

這是我的代碼插入。如果我將時間戳/ blob的格式更改爲int/text,它將起作用。

query = """INSERT INTO timearchive 
      (name_yymmddhh, name, ip, time_current, data) 
      VALUES (:name_yymmddhh, :name, :ip, :time_current, :data)""" 
values = {'name_yymmddhh':rowkey, 
      'name': dcname, 
      'ip': ip, 
      'time_current': timenow, 
      'data': my_blob} 
cursor.execute(query, values) 

問題:

1)如何使Python中的定製列表時間戳:timenow?
這並沒有幫助(太複雜,我的卡珊德拉級): Cassandra 1.2 inserting/updating a blob column type using Python and the cql library

2)我的數據是一個字典。這將是一個大的詞典和其他數據的詞典。 (我發現的各種討論,但沒有奏效,似乎有一些更新〜6個月前,但沒有簡單的例子:https://github.com/datastax/python-driver/pull/39
如何把:

my_dict = {'one': 1, 'two': 2, 'three': 3} 
... 
my_blob = ??? 
+0

對於第一個問題,在快速瀏覽源代碼之後,看起來您無法在Python中的客戶端上生成timeuuid。但是,您可以用一個直接的CQL函數調用now()來替換':time_current',這會在語句執行時在服務器上生成當前的timeuuid。 –

+0

這是如何通過Python代碼完成的? – user3480774

+0

只需使用'VALUES(:name_yymmddhh,:name,:ip,now(),:data)「」「'而不是'VALUES(:name_yymmddhh,:name,:ip,:time_current,:data)」「」'''你已經,並且當你賦值'values'時刪除設置'time_current'的部分。 –

回答

0

解決。 需要使用blob的最新Datastax驅動程序,以及上述INSERT方法(不是字符串轉換)以及適當的pickle和bytearray。