【问题标题】:Cassanda cql issue : "Batch too large","code":8704Cassandra cql 问题:\"Batch too large\",\"code\":8704
【发布时间】:2022-08-08 23:29:46
【问题描述】:

我在选择查询中收到以下错误。

{\"error\":{\"name\":\"ResponseError\",\"info\":\"表示来自服务器的错误消息\",\"message\":\"Batch too large\ ",\"代码\":8704,\"协调器\":\"10.29.96.106:9042\"}}

  • 选择查询是什么样的?批处理中有多少个 SELECT?
  • select * from user_request_by_country_by_processworkflow WHERE created_on <= \'2022-01-08T16:19:07+05:30\' 允许过滤;
  • 如果结果大于 1000,则显示此错误

标签: node.js cassandra windows-dev-center datastax-devcenter


【解决方案1】:

啊,我明白了;您正在使用开发中心。

如果结果大于 1000,则显示此错误

是的,这是开发中心阻止您运行可能会损害集群的查询。像这样:

select * from user_request_by_country_by_processworkflow
WHERE created_on <= '2022-01-08T16:19:07+05:30' ALLOW FILTERING;

ALLOW FILTERING 是一种强制 Cassandra 在一个查询中读取多个分区的方法,即使它旨在警告您不要这样做。如果您确实需要运行这样的查询,那么您将需要使用专为支持该查询而设计的 PRIMARY KEY 构建一个表。

在这种情况下,我建议通过将分区保持在合理大小内的任何时间组件来“存储”表数据。例如,如果一天保持每个分区的行数低于 50k,则主键定义将如下所示:

PRIMARY KEY (day,created_on)
WITH CLUSTERING ORDER BY (created_on DESC);

然后,一个可以工作并被允许的查询将如下所示:

SELECT * FROM user_request_by_country_by_processworkflow
WHERE day=20220108
  AND created_on <= '2022-01-08T16:19:07+05:30';

总之:

  • 不要运行多分区查询。
  • 不要使用ALLOW FILTERING
  • 构建表以匹配查询。
  • 请使用时间桶来防止分区无限增长。

【讨论】:

  • 这里的问题是我无法更改它,因为它是现有的表并且使用了很多地方。那么你有任何解决方法吗,或者是否可以使用限制选项和允许过滤器作为解决方法
  • @Sumant 您可以尝试使用 Spark。 Cassandra 之上的分布式查询层是运行此类基于 OLAP 的查询的一种方式。
猜你喜欢
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
相关资源
最近更新 更多