这里的clickhouse采样的话,主要意思就是我们可以不用查询出来某张表的所有数据,只需要抽样查看某一部分数据是否正确就可以了,有点类似于:
select * from table limit random()
在clickhouse里面,有现成的抽样函数可以使用,即Sample函数。但是如果要选择抽样的话,那么在创建表的时候需要指定抽样函数的字段列,语法是:
CREATE TABLE XXXX( .... ) ENGINE = MergeTree() ORDER BY (${列}) SAMPLE BY intHash32(${列})
这里创建表的时候指定的抽样列字段必须要是表里面的。一般我们都要指定hash,也就是:
SAMPLE BY intHash32(${列})
并且这里的列处理需要指定到排序列里面。
下面我们列举个例子:
1)创建抽样表
#创建抽样表 CREATE TABLE users( id UInt64, name String, age UInt8 ) ENGINE = MergeTree() ORDER BY (id,intHash32(id)) SAMPLE BY intHash32(id);
2)插入数据
#插入数据 insert into users values(1,'张三',10); insert into users values(2,'李四',11); insert into users values(3,'王五',12); insert into users values(4,'赵六',13); insert into users values(5,'田七',14); insert into users values(6,'王八',15); insert into users values(7,'赵九',16);
3)使用Sample查询数据
这里查询数据的方式有3种,分别是:
1、按照比例进行抽查() 2、按照指定条数进行抽查 3、按照比例与偏移量进行抽查
下面我们来演示下:
1、按照比例进行抽查,例如抽查users表百分之40的数据
select * from users SAMPLE 0.4;
2、按照指定条数进行抽查,例如抽查users表3条数据
select * from users SAMPLE 3;
这里抽样如果是大于1的话,是取近视值,数据量少看不到效果,数据量大就看到效果了。
3、从50%的比例开始抽样,抽样查40%的数据
select * from users SAMPLE 0.4 OFFSET 0.5;
以上就是clickhouse抽样数据的案例。
备注:
1、clickhouse中抽样表的引擎必须要是mergetree系列的。 2、抽样表必须设置simple by,不然无法进行抽样。 3、抽样的字段表达式需要在排序字段列表中 4、抽样的数字不能是0或者1,如果是0或者1的话代表不抽样。 5、抽样的数字只能是0到1之间和大于1的数据。
还没有评论,来说两句吧...