使用Python驱动程序为Cassandra创建表和索引

时间:2013-10-24 21:23:04

标签: python cassandra cql3

我正在尝试使用新的datastax python驱动程序从python脚本自动创建一些表和索引。但是,似乎某些语句被跳过或无序执行。我甚至尝试在每个命令之后放置10秒钟的睡眠事件,希望它能够正常工作,但事实并非如此。

通常只创建第二个和第三个索引。有时,在创建索引之前不会创建表,并且它们会出错。

import logging
from cassandra.cluster import Cluster
from time import sleep


log = logging.getLogger()
log.setLevel('DEBUG')
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s"))
log.addHandler(handler)

cluster = Cluster(['128.32.xxx.xxx','128.32.xxx.xxx','128.32.xxx.xxx'])
session = cluster.connect()

session.execute("""use test;""")
#session.execute("""drop table test.devices;""")
log.info('dropped table devices.')

session.execute("""CREATE TABLE devices (
                         device_uuid uuid,
                         external_identifier text,
                         geohash text,
                         latitude float,
                         longitude float,
                         measures set<text>,
                         name text,
                         parent_device_id uuid,
                         tags map<text, text>,
                         PRIMARY KEY (device_uuid)
                       ) WITH
                         compression={'sstable_compression': 'SnappyCompressor'} USING CONSISTENCY ALL;""")

session.execute("""CREATE INDEX external_id_ind ON devices (external_identifier) USING CONSISTENCY ALL;""")

session.execute("""CREATE INDEX name_ind ON devices (name) USING CONSISTENCY ALL;""")

session.execute("""CREATE INDEX geohash_ind ON devices (geohash) USING CONSISTENCY ALL;""")

session.execute("""CREATE INDEX parent_device_id_ind ON devices (parent_device_id) USING CONSISTENCY ALL;""")

1 个答案:

答案 0 :(得分:0)

我相信您正在使用cql3-beta语法(USING Consistency)编写语句,该语法不适用于python驱动程序。 python驱动程序仅适用于Cassandra 1.2+(CQL3)。

主要区别在于,一致性现在是客户端设置的状态,而不是查询本身的指令。使用python驱动程序一致性设置如此

session.execute(SimpleStatement("SELECT * FROM...", consistency_level=ConsistencyLevel.QUORUM))"