Python Cassandra cql: 插入时间戳和blob
我正在写一些Python代码,目的是收集一段时间内的数据。我需要把这些数据存储在Cassandra数据库里。今天我花了一整天的时间,但就是找不到合适的方法。
CREATE TABLE timearchive
(name_yymmddhh text, name text, ip text, time_current timestamp, data blob,
PRIMARY KEY (name_yymmddhh, time_current));
我可以创建表格,但在插入各种数据(当前时间的时间戳和数据块)时遇到了麻烦。我无法正确格式化这些数据。我打算按小时分行(在我的使用场景中,数据量应该没问题),每列存放每条数据(每分钟2-3条)。
这是我用来插入数据的代码。如果我把时间戳和数据块的格式改成整数或文本,它是可以工作的。
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中生成Cassandra的时间戳:timenow?
这个链接对我没有帮助(对我来说太复杂了):Cassandra 1.2 使用Python和cql库插入/更新blob列类型
2) 我的数据是一个字典。它将是一个包含多个字典和其他数据的大字典。
(我找到了一些讨论,但没有一个能解决我的问题。似乎大约6个月前有一些更新,但没有简单的例子:https://github.com/datastax/python-driver/pull/39)
我该如何放置:
my_dict = {'one': 1, 'two': 2, 'three': 3}
...
my_blob = ???
1 个回答
-1
解决了。需要使用最新的Datastax驱动程序来处理大对象(blob),并且要使用上面提到的INSERT方法(不要把它转换成字符串),还要正确使用pickle和bytearray。