DataStax Bulk Loader教程(五)

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。

 

本系列所有文章:

 

 
posted @ 2020-10-26 03:40  DataStax  阅读(224)  评论(0编辑  收藏  举报