【问题标题】:How to use cqlshrc in python script?如何在 python 脚本中使用 cqlshrc?
【发布时间】:2020-03-29 21:01:10
【问题描述】:

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

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

[连接] request_timeout = 6000

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

Traceback(最近一次调用最后一次):文件“queries.py”,第 10 行,在 query1() 文件“queries.py”,第 6 行,在 query1 中 rows = 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 [副本无法执行读取] message="操作失败 - 收到 0 个响应和 1 个失败" info={'一致性': 'LOCAL_ONE', 'required_responses': 1, “received_responses”:0,“失败”:1}

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

【问题讨论】:

  • 我已经使用“Session.default_timeout=an integer”和“Session.request_timeout=an integer”来增加超时时间,失败了。
  • 如何声明与数据库的连接?表的结构是什么?在cassandra.yaml 中,您如何声明listen_address 值?使用ALLOW FILTERING 语句是一种反模式。
  • 另外,Python驱动与数据库建立连接的方式与cqlshrc无关。
  • 我建立连接的方式是:from cassandra.cluster import Clustercluster = Cluster(['0.0.0.0'],port=9042)session = cluster.connect('cs588damon',wait_for_all_pools=True)session.request_timeout=60000session.execute('USE cs588damon')
  • 这段代码在我可以查询的同一台虚拟机上。在该 VM 上使用 cqlsh 的相同查询工作正常。

标签: python-3.x cassandra


【解决方案1】:

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

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

【讨论】:

  • 问题是这必须用 Cassandra 和这个关系数据集来完成。跑不了的。我知道在所有这些行中过滤掉几行对于这个系统来说效率不高。但是有没有其他选择可以通过 Cassandra 获得关于这个确切数据集的答案?除了首先在原始表减去空值的基础上创建另一个表,然后使用“速度”列作为主行。
  • 这个错误的发生是因为在一个拥抱数据集的所有行之间进行了过滤。它需要超过 10 秒,并且由于在 10 秒内没有任何响应而失败,这是“连接超时”的默认值。您是说我不能在这种情况下使用 Python,因为没有选项可以更改客户端配置(由 Python 使用)?
猜你喜欢
  • 2014-07-09
  • 2017-06-16
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2022-10-18
相关资源
最近更新 更多