在Cassandra / Python中的相同键下收集行

时间:2016-09-15 11:38:13

标签: python cassandra

我正在研究Pattern 1,并想知道是否有办法,在python中或以其他方式将具有相同id的所有行“收集”到带有字典的行中。

CREATE TABLE temperature (
                 weatherstation_id text,
                 event_time timestamp,
                 temperature text,
                 PRIMARY KEY (weatherstation_id,event_time)
                 );

插入一些数据

INSERT INTO temperature(weatherstation_id,event_time,temperature)
                 VALUES ('1234ABCD','2013-04-03 07:01:00','72F');
INSERT INTO temperature(weatherstation_id,event_time,temperature)
                 VALUES ('1234ABCD','2013-04-03 07:02:00','73F');
INSERT INTO temperature(weatherstation_id,event_time,temperature)
                 VALUES ('1234ABCD','2013-04-03 07:03:00','73F');
INSERT INTO temperature(weatherstation_id,event_time,temperature)
                 VALUES ('1234ABCD','2013-04-03 07:04:00','74F');

查询数据库。

SELECT weatherstation_id,event_time,temperature
                 FROM temperature
                 WHERE weatherstation_id='1234ABCD';

结果:

 weatherstation_id | event_time               | temperature
-------------------+--------------------------+-------------
          1234ABCD | 2013-04-03 06:01:00+0000 |         72F
          1234ABCD | 2013-04-03 06:02:00+0000 |         73F
          1234ABCD | 2013-04-03 06:03:00+0000 |         73F
          1234ABCD | 2013-04-03 06:04:00+0000 |         74F

哪个有效,但我想知道我是否可以根据weatherstationid将其变为一行。

E.g。

{
 "weatherstationid": "1234ABCD", 
 "2013-04-03 06:01:00+0000": "72F", 
 "2013-04-03 06:02:00+0000": "73F", 
 "2013-04-03 06:03:00+0000": "73F", 
 "2013-04-03 06:04:00+0000": "74F"
}

cassandra驱动程序中是否有一些参数可以指定为通过某个id(weatherstationid)收集并将其他所有内容转换为字典?或者是否需要一些Python魔法才能将每个id(或一组ID)的行列表转换为单行?

1 个答案:

答案 0 :(得分:1)

Alex,你必须做一些后期执行数据处理来获得这种格式。无论您使用什么row_factory,驱动程序都会逐行返回。

驱动程序无法完成您建议的格式的原因之一是内部涉及分页(默认fetch_size为5000)。因此,您生成的结果可能是部分或不完整的。此外,当查询执行完成并且您确定已获取所有必需结果时,可以使用Python轻松完成此操作。