当前位置: 首页 > news >正文

大数据ClickHouse进阶(九):ClickHouse的From和Sample子句

文章目录

ClickHouse的From和Sample子句

一、From子句

二、​​​​​​​Sample子句


ClickHouse的From和Sample子句

一、From子句

From子句表示从何处读取数据,支持2种形式,由于From比较简单,这里不再举例,2种使用方式如下:

SELECT clo1 FROM tbl;
SELECT rst FROM (SELECT sum(col1) as rst FROM tbl) 

from 关键字可以省略,此时会从虚拟表中取数,ClickHouse中没有dual虚拟表,它的虚拟表是system.one,例如,以下两种查询等价:

SELECT 1;
SELECT 1 FROM system.one;

另外,FROM 子句后还可以跟上final修饰符,可以配合COllapsingMergeTree和VersionedCollapsingMergeTree等表引擎进行查询操作,强制在查询过程中合并,由于Final修饰符会降低查询性能,所以尽量避免使用Final修饰符。

二、​​​​​​​Sample子句

Sample子句可以实现数据采样功能,使查询仅返回采样数据而非全部数据,从而减少查询负载。Sample采样机制是幂等机制,也就是说在数据不发生变化,使用相同的采样规则总是能够返回相同的数据。

sample子句只能用于MergeTree系列表引擎,并且要求在Create Table时声明sample by 抽样表达式。

例如,创建表 tbl 声明sample by抽样表达式:

CREATE TABLE tbl(
id UInt32,
name String,
age UInt32,
birthday DATE
)ENGINE = MERGETREE()
PARTITION BY toYYYYMM(birthday)
ORDER BY (id,intHash32(age))
SAMPLE BY intHash32(age)

以上创建sample by 采样表时注意:

  • Sample by 所声明的表达式必须同时包含在主键的声明内。
  • Sample Key 必须是Int类型,虽然在建表不报错,但是数据查询时报错。

另外,建表时没有声明Sample by,在使用sample 采样时会报错。

Sample目前支持三种语法,前面导入的datasets.hits_v1创建时指定了SAMPLE BY ,建表语句如下: 

CREATE TABLE datasets.hits_v1(
    `WatchID` UInt64,
    `JavaEnable` UInt8,
    `Title` String,
  ... ...
	)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)

下面就以表hits_v1为例,来讲解sample三种用法。

  • Sample factor

Sample factor表示按因子系数采样,factor表示采样因子,取值0-1之间的小数,表示采样总体数据的比例。如果factor 设置为0或者1,则表示不采样。使用如下:

#按10%的因子采样数据
SELECT CounterID FROM datasets.hits_v1 SAMPLE 0.1;
839889 rows in set. Elapsed: 0.114 sec. Processed 7.36 million rows, 88.30 MB (64.46 million rows/s., 773.46 MB/s.)
  • Sample rows

Sample rows表示按照样本数量采样,其中rows表示大概采样多少行数据,是个近似值,取值必须大于1,如果rows行数大于表总数,效果等同于rows=1,即不采样。使用如下:

node1 :) SELECT count() FROM datasets.hits_v1 SAMPLE 10000;
┌─count()─┐
│    9251 │
└─────────┘
  • SAMPLE factor OFFSET n

SAMPLE factor OFFSET n 表示按因子系数和偏移量采样,其中factor表示采样因子,即采样总数据的百分比,n表示偏移多少数据后才开始采样,它们两个取值都是0~1之间的小数。使用如下:

#偏移量0.5并按0.4的系数采样
node1 :) SELECT CounterID FROM datasets.hits_v1 SAMPLE 0.4 OFFSET 0.5;
3589194 rows in set.

 

偏移量0.5并按0.4的系数采样的采样为:从数据的二分之一处开始,按总数量的0.4采样数据。如果Sample比例采样出现了溢出,则数据会被自动截断,例如:

node1 :) SELECT CounterID FROM datasets.hits_v1 SAMPLE 0.4 OFFSET 0.9;
892694 rows in set.

 


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关文章:

  • vue3 | HighCharts实战自定义封装之径向条形图
  • Web前端系列技术之Web APIs基础(从基础开始)③
  • 线段树基本操作——建树+单点修改+区间查询
  • python/php/java/nodejs通讯录管理系统vue+elementui
  • 【老生谈算法】matlab实现蒙特卡罗定积分源码——蒙特卡罗定积分
  • 卷积神经网络 - 从全连接层到卷积
  • selenium爬虫如何绕过反爬,看这一篇文章就足够了
  • c语言进阶:冒泡排序函数初步实现到逐步优化
  • 5年测试经验要个20K不过分吧,谁料面试官三个问题把我打发走了···
  • 内网渗透之Msf-Socks代理实战(CFS三层靶场渗透过程及思路)
  • 命令执行漏洞——远程命令执行
  • M0007 四则运算
  • 【机器学习】李宏毅——生成式对抗网络GAN
  • osi七层模型
  • 【Vue五分钟】五分钟了解webpack的高级概念
  • [deviceone开发]-do_Webview的基本示例
  • 2019.2.20 c++ 知识梳理
  • CODING 缺陷管理功能正式开始公测
  • django开发-定时任务的使用
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java IO学习笔记一
  • javascript数组去重/查找/插入/删除
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java教程_软件开发基础
  • python学习笔记-类对象的信息
  • SegmentFault 2015 Top Rank
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 精彩代码 vue.js
  • 如何进阶一名有竞争力的程序员?
  • 三栏布局总结
  • 新书推荐|Windows黑客编程技术详解
  • 运行时添加log4j2的appender
  • ​2020 年大前端技术趋势解读
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #AngularJS#$sce.trustAsResourceUrl
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (poj1.3.2)1791(构造法模拟)
  • (二十四)Flask之flask-session组件
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (一)基于IDEA的JAVA基础1
  • (转)visual stdio 书签功能介绍
  • **PHP分步表单提交思路(分页表单提交)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net 4.0并行库实用性演练
  • .netcore如何运行环境安装到Linux服务器
  • /bin/bash^M: bad interpreter: No such file or directory
  • @软考考生,这份软考高分攻略你须知道
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Docker]十.Docker Swarm讲解
  • [English]英语积累本
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)