有什么最好的方法可以得到Cassandra表的总行数吗?问候你,Mani
3vpjnl9f1#
sc.cassandraTable()
select count(*)
yacmzcpb2#
您可以简单地使用Count(*)从表中获取行号。例如,语法:
SELECT Count(*) FROM tablename;
预期输出是这样的
count ------- 4 (1 rows)
lhcgjxsq3#
背景Cassandra有一个内置的CQL函数COUNT(),用于计算查询返回的行数。如果执行一个无界查询(没有过滤器或WHERE子句),它将检索表中所有可以计算的分区,例如:
COUNT()
WHERE
SELECT COUNT(*) FROM table_name;
但是,不建议这样做,因为它需要进行全表扫描,这将查询每个节点,开销非常大,而且会影响集群的性能。它可能适用于非常小的集群(例如,1到3个节点)和非常小的数据集(例如,几千个分区),但在实践中它可能会超时并且不返回结果。
在数据库中计算记录有不同的技术,但最简单的方法是使用DataStax Bulk Loader (DSBulk)。它是开源的,所以可以免费使用。它最初是为批量加载数据到Cassandra集群和从Cassandra集群导出数据而设计的,作为cqlsh COPY命令的可伸缩解决方案。DSBulk有一个count命令,它提供了与CQL COUNT()函数相同的功能,但它进行了优化,将表扫描分解为小范围查询,因此不会遇到与强力计数相同的问题。DSBulk使用起来非常简单,只需要几分钟就可以安装好。首先,你需要从DataStax下载中下载二进制文件,然后解压压缩包。详细信息,请参见DSBulk Installation Instructions。一旦你安装了它,你可以用一个命令来计算一个表中的分区:
COPY
count
$ cd path/to/dsbulk_installation $ bin/dsbulk count -h <node_ip> -k ks_name -t table_name
以下是一些参考资料和示例,可帮助您快速入门:
3条答案
按热度按时间3vpjnl9f1#
sc.cassandraTable()
,您就可以计算select count(*)
进行计数,因为您可能会很快遇到超时。yacmzcpb2#
您可以简单地使用Count(*)从表中获取行号。
例如,
语法:
预期输出是这样的
lhcgjxsq3#
背景
Cassandra有一个内置的CQL函数
COUNT()
,用于计算查询返回的行数。如果执行一个无界查询(没有过滤器或WHERE
子句),它将检索表中所有可以计算的分区,例如:陷阱
但是,不建议这样做,因为它需要进行全表扫描,这将查询每个节点,开销非常大,而且会影响集群的性能。
它可能适用于非常小的集群(例如,1到3个节点)和非常小的数据集(例如,几千个分区),但在实践中它可能会超时并且不返回结果。
推荐解决方案
在数据库中计算记录有不同的技术,但最简单的方法是使用DataStax Bulk Loader (DSBulk)。它是开源的,所以可以免费使用。它最初是为批量加载数据到Cassandra集群和从Cassandra集群导出数据而设计的,作为cqlsh
COPY
命令的可伸缩解决方案。DSBulk有一个
count
命令,它提供了与CQLCOUNT()
函数相同的功能,但它进行了优化,将表扫描分解为小范围查询,因此不会遇到与强力计数相同的问题。DSBulk使用起来非常简单,只需要几分钟就可以安装好。首先,你需要从DataStax下载中下载二进制文件,然后解压压缩包。详细信息,请参见DSBulk Installation Instructions。
一旦你安装了它,你可以用一个命令来计算一个表中的分区:
以下是一些参考资料和示例,可帮助您快速入门: