clickHouse(数据查询)

数据查询(很多语法神似于mysql,但又有所不同)

 

(1)拒绝select* (跟mysql一样)
(2)对SQL大小写很敏感 
(3)花名册(几乎包括所有的查询语法,但不包括分布式的)
(4)支持WITH子句(mysql8.0也支持)
①可以定义变量(WITH 10 AS start)
②调用函数
③定义子查询
④可以在子查询中重复使用(嵌套)
(5)支持FROM(跟mysql差不多)
①数据表取数
②子查询取数
③表函数取数
(6)SAMPLE子句
①可以实现数据采样,只返回需要的数据,而不是全部,有效减少负载
②可以保证幂等,数据量巨大时,如果要求时效性高于准确性可以考虑使用
③SAMPLE factor 按因子系数采样 0.1 || 1/10
④SAMPLE rows表示按样本数量采样 	
⑤SAMPLE factor OFFSET n表示按因子系数和偏移量采样
(7)ARRAY JOIN子句
①允许在数据表的内部,与数组或嵌套类型的字段进行JOIN操作,从而将一行数组展开为多行。
②一个select中只能存在一个array join(子查询除外),目前支持inner和left
③INNER ARRAY JOIN
④LEFT ARRAY JOIN
(8)JOIN子句(和mysql比较相似)
①可以对左右两张表的数据进行连接,可以设置连接类型和连接精度(ALL ANF ASOF)
②连接精度
1)ALL 左表的一行数据,只要右表能匹配上的就都返回
2)ANY 左表的一行数据,只返回右表能匹配上的数据中的第一行
3)ASOF 模糊连接,它允许在连接键之后追加定义一个模糊连接的匹配条件asof_column,连接键不可以是asof_column
③连接类型
1)INNER
a.内连接,以左表为基础遍历,只返回左右二表交集
2)OUTER(外连接)
a.LEFT:以左表为主,左表数据全部返回,右表数据返回符合的,并以默认值补齐
b.RIGNT:右表的数据总是能够全部返回,而左表不能连接的数据则使用默认值补全
c.FULL/OUTER:返回两个表的并集
3)CROSS:笛卡尔积,不需要声明JOIN KEY
④多表连接
1)支持自动将其转换成指定的连接查询
2)需要将allow_experimental_cross_to_join_conversion参数设置为1(默认为1,该参数在新版本中已经取消)
3)转换为CROSS JOIN:如果查询语句中不包含WHERE条件,则会转为CROSS JOIN。
4)转换为INNER JOIN:如果查询语句中包含WHERE条件,则会转为INNER JOIN。
⑤注意事项
1)左右表 左大右小
2)目前不支持缓存
3)如果是在大量维度属性补全的查询场景中,则建议使用字典代替JOIN查询
(9)WHERE与PREWHERE子句
①WHERE:负责实现数据过滤,为主键字段时可通过索引提速(前提是支持主键)
②PREWHERE:作用于WHERE一致,是他的一种优化
1)首先只会读取PREWHERE指定的列字段数据,用于数据过滤的条件判断。
2)待数据过滤之后再读取SELECT声明的列字段以补全其余属性。
3)所以在一些场合下,PREWHERE相比WHERE而言,处理的数据量更少,性能更高。
③不会被优化的场景
1)使用常量表达式
2)使用了默认值为ALIAS类型的字段:
3)包含了arrayJoin、globalIn、globalNotIn或者indexHint的查询
4)SELECT查询的列字段与WHERE谓词相同
5)使用主键字段
(10)GROUP BY子句
①聚合查询,group by 后面的字段被称为聚合键或者KEY
②如果SELECT后只声明了聚合函数,则可以省略GROUP BY关键字
③如若声明了列字段,则只能使用聚合键包含的字段,否则会报错
④某些场合下,可以借助any、max和min等聚合函数访问聚合键之外的列字段
⑤当聚合查询时出现Null会被分组到null
⑥WITH ROLLUP
1)ROLLUP能够按照聚合键从右向左上卷数据,基于聚合函数依次生成分组小计和总计。
2)如果设聚合键的个数为n,则最终会生成小计的个数为n+1。
⑦WITH CUBE
1)CUBE会像立方体模型一样,基于聚合键之间所有的组合生成小计信息。
2)如果设聚合键的个数为n,则最终小计组合的个数为2的n次方。
⑧WITH TOTALS
1)使用TOTALS修饰符后,会基于聚合函数对所有数据进行总计
(11)HAVING子句
①HAVING子句需要与GROUP BY同时出现,不能单独使用。它能够在聚合计算之后实现二次过滤数据。
②在聚合之后增加了Filter过滤动作。
(12)ORDER BY子句
①ORDER BY子句通过声明排序键来指定查询数据返回时的顺序。
②MergeTree引擎中绝对的主力,主要靠他声明关键字段
③NULLS LAST:NULL值排在最后
④NULLS FIRST:NULL值排在最前面
(13)LIMIT BY子句
①LIMIT BY和LIMIT所有不同,它运行于ORDER BY之后和LIMIT之前,能够按照指定分组,最多返回前n行数据(如果数据少于n行,则按实际数量返回),常用于TOP N的查询场景。
(14)LIMIT子句:于返回指定的前n行数据,常用于分页场景,
(15)SELECT子句:SELECT子句决定了一次查询语句最终返回哪些列字段或表达式
(16)DISTINCT子句:去重
(17)UNION ALL子句:能够联合左右两边的两组子查询,将结果一并返回。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值