|NO.Z.00038|——————————|BigDataEnd|——|Hadoop&OLAP_ClickHouse.V10|——|ClickHouse.v10|ClickHouse语法|Sample子句|

一、SAMPLE 子句
### --- SAMPLE子句

~~~     该 SAMPLE 子句允许近似于 SELECT 查询处理。
~~~     启用数据采样时,不会对所有数据执行查询,而只对特定部分数据(样本)执行查询。
~~~     例如,如果您需要计算所有访问的统计信息,只需对所有访问的1/10分数执行查询,
~~~     然后将结果乘以10即可。
### --- 近似查询处理在以下情况下可能很有用:

~~~     当你有严格的时间需求(如<100ms),但你不能通过额外的硬件资源来满足他们的成本。
~~~     当您的原始数据不准确时,所以近似不会明显降低质量。
~~~     业务需求的目标是近似结果(为了成本效益,或者向高级用户推销确切结果)。
~~~     # 注
~~~     您只能使用采样中的表 MergeTree 族,
~~~     并且只有在表创建过程中指定了采样表达式(请参阅 MergeTree引擎).
### --- 下面列出了数据采样的功能:

~~~     数据采样是一种确定性机制。 同样的结果 SELECT .. SAMPLE 查询始终是相同的。
~~~     对于不同的表,采样工作始终如一。 
~~~     对于具有单个采样键的表,具有相同系数的采样总是选择相同的可能数据子集。 
~~~     例如,用户Id的示例采用来自不同表的所有可能的用户Id的相同子集的行。 
~~~     这意味着您可以在子查询中使用采样 IN 此外,您可以使用 JOIN 。
~~~     采样允许从磁盘读取更少的数据。 请注意,您必须正确指定采样键。 
~~~     有关详细信息,请参阅 创建MergeTree表.
### --- 为 SAMPLE 子句支持以下语法:

~~~     查询执行于 k SAMPLE 0.1Read moreSAMPLE n n n SAMPLE 
~~~     10000000Read moreSAMPLE k OFFSETm k m k mRead more
~~~     # SAMPLE K
~~~     这里 k 从0到1的数字(支持小数和小数表示法)。 例如, SAMPLE 1/2 或 SAMPLE 0.5.
~~~     注意:为了得到最终的统计结果,需要将sample查询结果乘系数
~~~     在一个 SAMPLE k 子句,样品是从 k 数据的分数。 
SAMPLE Clause Syntax 产品描述
SAMPLE k 这里 k 是从0到1的数字。
二、SAMPLE 子句示例如下所示:
### --- SAMPLE子句示例

~~~     # SAMPLE子句示例
hadoop01 :) select count(CounterID) from hits_v1 sample 0.1;
┌─count(CounterID)─┐
│ 839889           │
└──────────────────┘

hadoop01 :) select count(CounterID) from hits_v1;
┌─count(CounterID)─┐
│ 8873898          │
└──────────────────┘
~~~     # 利用虚拟字段_sample_factor来获取采样系数

hadoop01 :) select CounterID,_sample_factor from hits_v1 sample 0.1 limit 2;

┌─CounterID─┬─_sample_factor─┐
│ 5710             │
└───────────┴────────────────┘
┌─CounterID─┬─_sample_factor─┐
│ 5710             │
└───────────┴────────────────┘

hadoop01 :) select CounterID,_sample_factor from hits_v1 limit 2;
┌─CounterID─┬─_sample_factor─┐
│ 571              │
│ 571              │
└───────────┴────────────────┘

hadoop01 :) select CounterID,_sample_factor from hits_v1 sample 0.2 limit 2;
┌─CounterID─┬─_sample_factor─┐
│ 575              │
└───────────┴────────────────┘
┌─CounterID─┬─_sample_factor─┐
│ 575              │
└───────────┴────────────────┘
hadoop01 :) 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
### --- SAMPLEN

~~~     这里 n 是足够大的整数。 例如, SAMPLE 10000000.
~~~     在这种情况下,查询在至少一个样本上执行 n 行(但不超过这个)。 
~~~     例如, SAMPLE 10000000 在至少10,000,000行上运行查询。
~~~     由于数据读取的最小单位是一个颗粒(其大小由 index_granularity 设置),
~~~     是有意义的设置一个样品,其大小远大于颗粒。
~~~     使用时 SAMPLE n 子句,你不知道处理了哪些数据的相对百分比。 
~~~     所以你不知道聚合函数应该乘以的系数。 使用_sample_factor 虚拟列得到近似结果。
~~~     该 _sample_factor 列包含动态计算的相对系数。 
~~~     当您执行以下操作时,将自动创建此列 创建 具有指定采样键的表。 
~~~     的使用示例 _sample_factor 列如下所示。
~~~     # 使用示例 _sample_factor 列如下所示

hadoop01 :) select count() from hits_v1 sample 10000;

┌─count()─┐
│ 9251    │
└─────────┘
hadoop01 :) select CounterID,_sample_factor from hits_v1 sample 10000 limit 1;

┌─CounterID─┬─_sample_factor─┐
│ 1294886.3744       │
└───────────┴────────────────┘
~~~     # 让我们考虑表 visits,其中包含有关网站访问的统计信息。 第一个示例演示如何计算页面浏览量:

hadoop01 :)  select sum(PageViews) from visits_v1;

┌─sum(PageViews)─┐
│ 6738137        │
└────────────────┘
hadoop01 :) select sum(PageViews * _sample_factor) from visits_v1 sample 10000000;

┌─sum(multiply(PageViews, _sample_factor))─┐
│ 6738137                                  │
└──────────────────────────────────────────┘
### --- 下一个示例演示如何计算访问总数:

hadoop01 :) select sum(_sample_factor) from visits_v1 sample 10000000;

┌─sum(_sample_factor)─┐
│ 1676861             │
└─────────────────────┘
### --- 下面的示例显示了如何计算平均会话持续时间。 请注意,您不需要使用相对系数来计算平均值。

hadoop01 :) select avg(Duration) from visits_v1 sample 10000000;

┌──────avg(Duration)─┐
│ 359.92117176080785 │
└────────────────────┘
三、SAMPLE K OFFSET M;这里 k 和 m 是从0到1的数字。 示例如下所示。
~~~     # 示例1

SAMPLE 1/10
~~~     # 在此示例中,示例是所有数据的十分之一:

[++------------]
~~~     # 示例2:这里,从数据的后半部分1/2取出10%的样本。如果10%超出自动截断

SAMPLE 1/10 OFFSET 1/2

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示