DataStax Bulk Loader系列教程共分为六篇,这是此系列的第五篇。本系列前三篇文章涉及数据加载(load),第四篇文章介绍了数据卸载(unload)。本文将讲述dsbulk的计数(count)模式。
另外,我们也建议您在使用dsbulk时参考dsbulk 文档页面,从而了解所有的相关参数和选项。
Dsbulk 1.1.0 引入了在表格中计数的新功能。当数据加载完成时,人们经常使用计数功能,以确保数据正确加载。他们可能因为在加载中失败了,想查看加载了多少数据。也有可能是因为主键不是所需要的主键,所以不是唯一的插入,而是将原来数据覆盖掉。
范例 23:简易的计数案例
让我们开始从简单的计数开始:
$ dsbulk count -k dsbulkblog -t iris_with_id
或者:
$ dsbulk count -k dsbulkblog -t iris_with_id --stats.modes global
或者:
$ dsbulk count -k dsbulkblog -t iris_with_id -stats global
这些都有相同的输出:
Operation directory: /tmp/logs/COUNT_20190314-171517-238903. total | failed | rows/s | mb/s | kb/row | p50 ms | p99ms | p999ms 150 | 0 | 400 | 0.00 | 0.00 | 18.68 | 18.74 | 18.74 Operation COUNT_20190314-171517-238903 completed successfully in 0 seconds. 150
范例 24:计数时不打印多余信息
我们可以通过以下方法减少冗长的内容,以删除多余无关的信息:
$ dsbulk count -k dsbulkblog -t iris_with_id --log.verbosity 0
只会有以下结果:
150
范例 25:按主机(host)计数
有很多不同方法可以对计数进行分组。第一种是按主机分类,计算行数:
$ dsbulk count -k dsbulkblog -t iris_with_id --log.verbosity 0 --stats.mode hosts
因为我在我本地主机上做了演示,所以只会有一个主机。输出将是:
/127.0.0.1:9042 150 100.00
第一列是主机,第二列是计数结果,第三列是占总列数的百分比。
范例 26:按Token范围计数
有时候在系统中了解每一个token ranges 是很重要的。我们可以用 ranges 模式来完成:
$ dsbulk count -k dsbulkblog -t iris_with_id --log.verbosity 0 --stats.mode ranges
同时,在一个主机上的运行的结果有一些太简易了:
-9223372036854775808 -9223372036854775808 150 100.00
在这里我们可以看到token 范围的起点和终点,(再一次强调,这里情况有些特殊因为只有一个token范围),计数数量还有百分比。
范例 27:计算最大的分区
partitions 选项将根据每个分区行数来计算最大的分区。为了完成这个我们需要创建一个含有集群列的表格。让我们使用以下方法处理Iris的数据集:
$ cqlsh -e "CREATE TABLE dsbulkblog.iris_clustered(id INT, petal_length DOUBLE, petal_width DOUBLE, sepal_length DOUBLE, sepal_width DOUBLE, species TEXT, PRIMARY KEY ((species), id))"
我们可以这样加载 iris.csv 的数据:
$ dsbulk load -url /tmp/dsbulkblog/iris.csv -k dsbulkblog -t iris_clustered
现在我们可以这样计数最大的分区:
$ dsbulk count -k dsbulkblog -t iris_clustered --log.verbosity 0 --stats.mode partitions
以下是这个的输出结果:
'Iris-virginica' 50 33.33 'Iris-versicolor' 50 33.33 'Iris-setosa' 50 33.33
第一列是分区的主键值,第二列是计数列,第三列是占整行的百分比。
范例 28:按token 范围和主机计数
--stats.mode 参数有一系列的模式,例如:
$ dsbulk count -k dsbulkblog -t iris_with_id --log.verbosity 0 --stats.mode ranges,hosts
以下是结果:
Total rows per host: /127.0.0.1:9042 150 100.00 Total rows per token range: -9223372036854775808 -9223372036854775808 150 100.00
范例 29:计数时使用谓词(predicate)
您有时候想过滤或只计数一些记录。我们可以用--schema.query(或 -q)来指定谓词。这种情况下,如果要卸载数据,我们需要首先提供一个全局查询(SELECT *)语句,但dsbulk会计算结果。
例如,如果我们只想给petal_width = 2的数据计数,我们可以使用:
$ dsbulk count -query "SELECT id FROM dsbulkblog.iris_with_id WHERE petal_width = 2 ALLOW FILTERING"
这会产生以下结果:
Operation directory: /tmp/logs/COUNT_20190314-171916-543786. total | failed | rows/s | mb/s | kb/row | p50 ms | p99ms | p999ms 6 | 0 | 18 | 0.00 | 0.00 | 130.81 | 131.07 | 131.07 Operation COUNT_20190314-171916-543786 completed successfully in 0 seconds. 6
我们可以给以下查询操作添加并行性:
$ dsbulk count -query "SELECT id FROM dsbulkblog.iris_with_id WHERE Petal_width = 2 AND Token(id) > :start AND Token(id) <= :end ALLOW FILTERING"
点击这里下载 DataStax Bulk Loader。
本系列所有文章: