python-3.x - 如何在 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”文件作为参数传递?
解决方案
您尝试增加的超时是客户端超时。但是,如果您没有在服务器端增加它(无论如何都是坏主意),那么它无论如何也无济于事。
实际上,您正在执行 Cassandra 未针对其进行优化的操作 - 您正在count
对任意字段执行聚合操作 ( ),而不限制分区键 - 这导致 Cassandra 需要筛选所有节点上的所有数据,并过滤掉只需要的条目。这是 Cassandra 使用的反模式 - 例如,此类查询需要通过 Spark 完成。我建议在DataStax Academy上学习一些课程(至少 DS201 和 DS220),以了解 Cassandra 的工作原理以及如何为它建模数据。
推荐阅读
- javascript - 复制对象的选定元素
- android - 如何将 Uber Driver API 集成到我的移动应用程序产品中
- javascript - this.props 没有传递函数
- python - 在 Mac 上的 shell 中导入模块
- python - 使用 python requests 模块登录沃尔玛帐户返回错误
- bluetooth-lowenergy - 适用于 Windows 10 企业版 LTSB(或 LTSC)的 Windows 10 创意者更新
- hibernate - 为什么 Hibernate 提供 @Embeddable 和 @Embedded
- excel - Excel Shell() Args 到/来自 Calc.exe
- oracle - expdp where 子句错误
- css - Chrome DevTools 中禁用了样式化组件样式