首页 > 解决方案 > 如何在 python 脚本中使用 cqlshrc?

问题描述

我在一个 VM 上的 GCP 和 Python3 上有一个(Apache)Cassandra 节点集群。使用“cqlsh --cqlshrc”可以运行我需要的查询而不会出现任何错误。在 cqlshrc 中有服装时间戳和增加的连接超时。

[复制] 日期时间格式 = %m/%d/%Y %H:%M:%S

[连接] request_timeout = 6000

我在“~/.cassandra/”文件夹中也有“cqlshrc”文件,所以我可以在不将其作为参数传递的情况下使用它。现在使用“cassandra-driver”的 Python 脚本想要与 Cassandra 对话并运行一些查询,但我收到此错误:

回溯(最后一次调用):文件“queries.py”,第 10 行,在 query1() 文件“queries.py”,第 6 行,在 query1 行 = session.execute('SELECT count(*) FROM freeway_loopdata WHERE speed > 100 ALLOW FILTERING') 文件“cassandra/cluster.py”,第 2345 行,在 cassandra.cluster.Session.execute 文件“cassandra/cluster.py”,第 4304 行,在 cassandra.cluster.ResponseFuture.result cassandra.ReadFailure:来自服务器的错误:code=1300 [Replica(s) failed to execute read] message="操作失败 - 收到 0 个响应和 1 个失败" info={'consistency': 'LOCAL_ONE', 'required_responses': 1, 'received_responses' :0,“失败”:1}

这是因为不增加超时。如何将 Python 脚本中的“cqlshrc”文件作为参数传递?

标签: python-3.xcassandra

解决方案


您尝试增加的超时是客户端超时。但是,如果您没有在服务器端增加它(无论如何都是坏主意),那么它无论如何也无济于事。

实际上,您正在执行 Cassandra 未针对其进行优化的操作 - 您正在count对任意字段执行聚合操作 ( ),而不限制分区键 - 这导致 Cassandra 需要筛选所有节点上的所有数据,并过滤掉只需要的条目。这是 Cassandra 使用的反模式 - 例如,此类查询需要通过 Spark 完成。我建议在DataStax Academy上学习一些课程(至少 DS201 和 DS220),以了解 Cassandra 的工作原理以及如何为它建模数据。


推荐阅读