Java技术债务Java技术债务

  •  首页
  •  分类
  •  归档
  •  标签
  • 博客日志
  • 资源分享
  •  友链
  •  关于本站
注册
登录

ClickHouse之采样查询(SAMPLE)

ClickHouse,数据库

文章目录

  • SAMPLE概念
  • SAMPLE功能
  • SAMPLE语法
  • groupArraySample

SAMPLE概念

该 SAMPLE 子句允许近似于 SELECT 查询处理。

启用数据采样时,不会对所有数据执行查询,而只对特定部分数据(样本)执行查询。

例如,如果您需要计算所有访问的统计信息,只需对所有访问的1/10分数执行查询,然后将结果乘以10即可。

近似查询处理在以下情况下可能很有用:

  • 当你有严格的时间需求(如<100ms),但你不能通过额外的硬件资源来满足他们的成本。
  • 当您的原始数据不准确时,所以近似不会明显降低质量。
  • 业务需求的目标是近似结果(为了成本效益,或者向高级用户推销确切结果)。

注意:
您只能使用采样中的表 MergeTree 族,并且只有在表创建过程中指定了采样表达式。

SAMPLE功能

  • 数据采样是一种确定性机制。 同样的结果 SELECT .. SAMPLE 查询始终是相同的。
  • 对于不同的表,采样工作始终如一。 对于具有单个采样键的表,具有相同系数的采样总是选择相同的可能数据子集。 例如,用户Id的示例采用来自不同表的所有可能的用户Id的相同子集的行。 这意味着您可以在子查询中使用采样 IN 此外,您可以使用 JOIN 。
  • 采样允许从磁盘读取更少的数据。 请注意,您必须正确指定采样键。

SAMPLE语法

SAMPLE Clause Syntax 产品描述
SAMPLE k 这里 k 是从0到1的数字。查询执行于 k 数据的分数。 例如, SAMPLE 0.1 对10%的数据运行查询。
SAMPLE n 这里 n 是足够大的整数。该查询是在至少一个样本上执行的 n 行(但不超过这个)。 例如, SAMPLE 10000000 在至少10,000,000行上运行查询。
SAMPLE k OFFSET m 这里 k 和 m 是从0到1的数字。查询在以下示例上执行 k 数据的分数。 用于采样的数据由以下偏移 m 分数。

sample K

这里 k 从0到1的数字(支持小数和小数表示法)。 例如, SAMPLE 1/2 或 SAMPLE 0.5.

在一个 SAMPLE k 子句,样品是从 k 数据的分数。

示例如下所示:

SELECT
    Title,
    count() * 10 AS PageViews
FROM hits_distributed
SAMPLE 0.1
WHERE
    CounterID = 34
GROUP BY Title
ORDER BY PageViews DESC LIMIT 1000

在此示例中,对0.1(10%)数据的样本执行查询。 聚合函数的值不会自动修正,因此要获得近似结果,值 count() 手动乘以10。

sample N

这里 n 是足够大的整数。 例如, SAMPLE 10000000.

在这种情况下,查询在至少一个样本上执行 n 行(但不超过这个)。 例如, SAMPLE 10000000 在至少10,000,000行上运行查询。

由于数据读取的最小单位是一个颗粒(其大小由 index_granularity 设置),是有意义的设置一个样品,其大小远大于颗粒。

使用时 SAMPLE n 子句,你不知道处理了哪些数据的相对百分比。 所以你不知道聚合函数应该乘以的系数。 使用 _sample_factor 虚拟列得到近似结果。

该 _sample_factor 列包含动态计算的相对系数。 当您执行以下操作时,将自动创建此列 创建 具有指定采样键的表。 的使用示例 _sample_factor 列如下所示。

让我们考虑表 visits,其中包含有关网站访问的统计信息。

SELECT sum(_sample_factor)
FROM visits
SAMPLE 10000000

sample K offset m

这里 k 和 m 是从0到1的数字。

-- 所有数据的十分之一
SAMPLE 1/10

-- 从数据的后半部分取出10%的样本
SAMPLE 1/10 OFFSET 1/2

groupArraySample

构建一个参数值的采样数组。 结果数组的大小限制为 max_size 个元素。参数值被随机选择并添加到数组中。

语法

groupArraySample(max_size[, seed])(x)

参数

  • max_size — 结果数组的最大长度UInt64。
  • seed — 随机数发生器的种子。可选UInt64。默认值: 123456。
  • x — 参数 (列名 或者 表达式)。

返回值

  • 随机选取参数 x (的值)组成的数组。

类型: Array
示例

SAMPLE概念

该 SAMPLE 子句允许近似于 SELECT 查询处理。

启用数据采样时,不会对所有数据执行查询,而只对特定部分数据(样本)执行查询。

例如,如果您需要计算所有访问的统计信息,只需对所有访问的1/10分数执行查询,然后将结果乘以10即可。

近似查询处理在以下情况下可能很有用:

  • 当你有严格的时间需求(如<100ms),但你不能通过额外的硬件资源来满足他们的成本。
  • 当您的原始数据不准确时,所以近似不会明显降低质量。
  • 业务需求的目标是近似结果(为了成本效益,或者向高级用户推销确切结果)。

注意:
您只能使用采样中的表 MergeTree 族,并且只有在表创建过程中指定了采样表达式。

SAMPLE功能

  • 数据采样是一种确定性机制。 同样的结果 SELECT .. SAMPLE 查询始终是相同的。
  • 对于不同的表,采样工作始终如一。 对于具有单个采样键的表,具有相同系数的采样总是选择相同的可能数据子集。 例如,用户Id的示例采用来自不同表的所有可能的用户Id的相同子集的行。 这意味着您可以在子查询中使用采样 IN 此外,您可以使用 JOIN 。
  • 采样允许从磁盘读取更少的数据。 请注意,您必须正确指定采样键。

SAMPLE语法

SAMPLE Clause Syntax 产品描述
SAMPLE k 这里 k 是从0到1的数字。查询执行于 k 数据的分数。 例如, SAMPLE 0.1 对10%的数据运行查询。
SAMPLE n 这里 n 是足够大的整数。该查询是在至少一个样本上执行的 n 行(但不超过这个)。 例如, SAMPLE 10000000 在至少10,000,000行上运行查询。
SAMPLE k OFFSET m 这里 k 和 m 是从0到1的数字。查询在以下示例上执行 k 数据的分数。 用于采样的数据由以下偏移 m 分数。

sample K

这里 k 从0到1的数字(支持小数和小数表示法)。 例如, SAMPLE 1/2 或 SAMPLE 0.5.

在一个 SAMPLE k 子句,样品是从 k 数据的分数。

示例如下所示:

SELECT
    Title,
    count() * 10 AS PageViews
FROM hits_distributed
SAMPLE 0.1
WHERE
    CounterID = 34
GROUP BY Title
ORDER BY PageViews DESC LIMIT 1000

在此示例中,对0.1(10%)数据的样本执行查询。 聚合函数的值不会自动修正,因此要获得近似结果,值 count() 手动乘以10。

sample N

这里 n 是足够大的整数。 例如, SAMPLE 10000000.

在这种情况下,查询在至少一个样本上执行 n 行(但不超过这个)。 例如, SAMPLE 10000000 在至少10,000,000行上运行查询。

由于数据读取的最小单位是一个颗粒(其大小由 index_granularity 设置),是有意义的设置一个样品,其大小远大于颗粒。

使用时 SAMPLE n 子句,你不知道处理了哪些数据的相对百分比。 所以你不知道聚合函数应该乘以的系数。 使用 _sample_factor 虚拟列得到近似结果。

该 _sample_factor 列包含动态计算的相对系数。 当您执行以下操作时,将自动创建此列 创建 具有指定采样键的表。 的使用示例 _sample_factor 列如下所示。

让我们考虑表 visits,其中包含有关网站访问的统计信息。

SELECT sum(_sample_factor)
FROM visits
SAMPLE 10000000

sample K offset m

这里 k 和 m 是从0到1的数字。

-- 所有数据的十分之一
SAMPLE 1/10

-- 从数据的后半部分取出10%的样本
SAMPLE 1/10 OFFSET 1/2

groupArraySample

构建一个参数值的采样数组。 结果数组的大小限制为 max_size 个元素。参数值被随机选择并添加到数组中。

语法

groupArraySample(max_size[, seed])(x)

参数

  • max_size — 结果数组的最大长度UInt64。
  • seed — 随机数发生器的种子。可选UInt64。默认值: 123456。
  • x — 参数 (列名 或者 表达式)。

返回值

  • 随机选取参数 x (的值)组成的数组。

类型: Array
示例

完
  • 本文作者:Java技术债务
  • 原文链接: https://cuizb.top/myblog/article/1681185519
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。
阅读全文
Java技术债务

Java技术债务

Java技术债务
Java技术债务
热门文章
  1. ClickHouse使用过程中的一些查询优化(六)2003
  2. MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据764
  3. MySQL主从同步原理458
  4. 线程池的理解以及使用414
  5. Spring Cloud Gateway整合nacos实战(三)409
分类
  • Java
    30篇
  • 设计模式
    27篇
  • 数据库
    20篇
  • Spring
    18篇
  • MySQL
    13篇
  • ClickHouse
    11篇
  • Kubernetes
    10篇
  • Redis
    9篇
  • Docker
    8篇
  • SpringBoot
    7篇
  • JVM
    6篇
  • Linux
    5篇
  • Spring Cloud
    5篇
  • 多线程
    5篇
  • Netty
    4篇
  • Kafka
    4篇
  • 面经
    4篇
  • Nginx
    3篇
  • JUC
    3篇
  • 随笔
    2篇
  • 分布式
    1篇
  • MyBatis
    1篇
  • 报错合集
    1篇
  • 生活记录
    1篇
  • 源码
    1篇
  • 性能优化
    1篇

最新评论

  • MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据2022-05-06
    Java技术债务:@capture 一起探讨学习,服务器被黑很正常,及时做好备份以及做好防护
  • MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据2022-04-13
    capture:我的刚上线两天,网站里就两篇文章也被攻击了,纳闷
  • Java常用集合List、Map、Set介绍以及一些面试问题2022-01-18
    Java技术债务:HashSet和TreeSet 相同点:数据不能重复 不同点: 1、底层存储结构不同; HashSet底层使用HashMap哈希表存储 TreeSet底层使用TreeMap树结构存储 2、唯一性方式不同 HashSet底层使用hashcode()和equal()方法判断 TreeSet底层使用Comparable接口的compareTo判断的 3、HashSet无序,TreeSet有序
  • undefined2021-12-14
    Java技术债务:如果不指定线程池,CompletableFuture会默认使用ForkJoin线程池,如果同一时间出现大量请求的话,会出现线程等待问题,建议使用自定义线程池。。。
  • undefined2021-12-02
    you:很好,对于小白相当不错了,谢谢
  • CSDN
  • 博客园
  • 程序猿DD
  • 纯洁的微笑
  • spring4all
  • 廖雪峰的官方网站
  • 猿天地
  • 泥瓦匠BYSocket
  • crossoverJie
  • 张先森个人博客
  • 越加网

© 2021-2022 Java技术债务 - Java技术债务 版权所有
总访问量 0 次 您是本文第 0 位童鞋
豫ICP备2021034516号
Java技术债务 豫公网安备 51011402000164号

微信公众号

Java技术债务
Java技术债务

专注于Spring,SpringBoot等后端技术探索

以及MySql数据库开发和Netty等后端流行框架学习

日志
分类
标签
RSS

有不足之处也希望各位前辈指出