我正在尝试使用新的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;""")
答案 0 :(得分:0)
我相信您正在使用cql3-beta语法(USING Consistency)编写语句,该语法不适用于python驱动程序。 python驱动程序仅适用于Cassandra 1.2+(CQL3)。
主要区别在于,一致性现在是客户端设置的状态,而不是查询本身的指令。使用python驱动程序一致性设置如此
session.execute(SimpleStatement("SELECT * FROM...", consistency_level=ConsistencyLevel.QUORUM))"