MySQL ClickHouse不同于SQL的语法介绍

 更新时间:2022年11月02日 08:45:34   作者:小基基o_O  
CloudCanal 近期实现了 MySQL(RDS) 到 ClickHouse 实时同步的能力,功能包含全量数据迁移、增量数据迁移、结构迁移能力,以及附带的监控、告警、HA等能力

下面只展示和MySQL或HIVE区别较大的语法

例如ClickHouse建库语法和MySQL几乎1卵样的不予展示

ClickHouse的JOIN逻辑

# 创建左表
CREATE TABLE default.temp_left(
    `a` String COMMENT '匹配键'
)ENGINE = MergeTree
ORDER BY (a);
INSERT INTO default.temp_left
SELECT 'A1' AS a UNION ALL
SELECT 'A1' AS a UNION ALL
SELECT 'A2' AS a UNION ALL
SELECT 'A3' AS a;
# 创建右表
CREATE TABLE default.temp_right(
    `a` String COMMENT '匹配键',
    `b` Nullable(UInt32),
    `c` UInt32
)ENGINE = MergeTree
ORDER BY (a);
INSERT INTO default.temp_right
SELECT 'A2' AS a,9 AS b,8 AS c UNION ALL
SELECT 'A3' AS a,9 AS b,8 AS c UNION ALL
SELECT 'A4' AS a,9 AS b,8 AS c;
# 左联
SELECT *
FROM default.temp_left le
LEFT JOIN default.temp_right ri ON le.a=ri.a

左联测试结果

在右表中,b允许空,ac冇允许空 左联后,联不上的a是空字符串,联不上的bNULL,联不上的c是0

INSERT SELECT

INSERT INTO t2
WITH a AS (SELECT * FROM t1)
SELECT * FROM a;

和HIVE、MySQL等不一样,ClickHouse的INSERT写在WITH之前

临时表

  • 当回话结束时,临时表将随会话一起消失
  • 临时表仅能用Memory表引擎
  • 无法为临时表指定数据库,它是在数据库之外创建的
  • 当查询没有指定库,且临时表与另一个表名相同 时,会优先使用临时表
CREATE TEMPORARY TABLE temp_t(`a` String,`b` Int32);
INSERT INTO temp_t VALUES ('AB',3),('CC',4);
SELECT * FROM temp_t;
# 结束会话后,临时表不存在

窗口函数

CREATE TEMPORARY TABLE sales(
name  String  COMMENT '产品',
city  String  COMMENT '城市',
sale  Int32   COMMENT '销量');
INSERT INTO sales VALUES
('椰子','佛山',99),('雪梨','佛山',77),('苹果','佛山',88),
('椰子','广州',80),('雪梨','广州',80),('苹果','广州',70);

SELECT city
      ,groupArray(name) OVER (PARTITION BY city)
FROM sales;

SELECT
    city,
    name,
    sale,
    rank() OVER(PARTITION BY city ORDER BY sale DESC)
FROM sales;

单引号和双引号

多数情况使用单引号

SELECT "abc";
# 报错
SELECT 'abc';
# 正常查询,返回字符串
CREATE TABLE default.temp_t(
  `a` String COMMENT "匹配键"
)ENGINE=Log;
# 字段注释使用双引号报错
CREATE TABLE default.temp_t(
  `a` String COMMENT '匹配键'
)ENGINE=Log;
# 正常建表

到此这篇关于MySQL ClickHouse不同于SQL的语法介绍的文章就介绍到这了,更多相关MySQL ClickHouse内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Mysql-connector-java驱动版本问题总结

    关于Mysql-connector-java驱动版本问题总结

    这篇文章主要介绍了Mysql-connector-java驱动版本问题,本文给大家介绍的很详细,通过原因说明问题小结个人建议给大家展示的很好,需要的朋友可以参考下
    2021-06-06
  • MySQL下载安装及完美卸载的详细过程

    MySQL下载安装及完美卸载的详细过程

    MySQL的安装卸载问题一直是一个头疼的问题,所以想着以一篇文章来搞定这个问题,这篇文章主要给大家介绍了关于MySQL下载安装及完美卸载的相关资料,需要的朋友可以参考下
    2022-08-08
  • MySQL判断空值的三种方法

    MySQL判断空值的三种方法

    在创建表时,可以指定的列是否可以不包含值,如果在一个列不包含值,则其称其为空值NULL,NULL一个特殊值,代表缺失的值或者不适用的情况,表示未知数据,本文给大家介绍了MySQL判断空值的三种方法,需要的朋友可以参考下
    2024-03-03
  • Mysql CONVERT函数的具体使用

    Mysql CONVERT函数的具体使用

    本文主要介绍了Mysql CONVERT函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Mysql数据库之索引优化

    Mysql数据库之索引优化

    MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。本文给大家介绍mysql数据库之索引优化,感兴趣的朋友一起学习吧
    2016-03-03
  • Mysql中分布式锁的具体实现

    Mysql中分布式锁的具体实现

    分布式锁开发中经常使用,本文主要介绍了Mysql中分布式锁的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 通过两种方式增加从库——不停止mysql服务

    通过两种方式增加从库——不停止mysql服务

    现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作
    2015-11-11
  • Mysql中NTILE()函数的具体使用

    Mysql中NTILE()函数的具体使用

    NTILE()函数用于将分区中的有序数据分为n个等级,本文主要介绍了Mysql中NTILE()函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • mysql 导出select语句结果到excel文件遇到问题及解决方法

    mysql 导出select语句结果到excel文件遇到问题及解决方法

    这篇文章主要介绍了mysql 导出select语句结果到excel文件遇到问题及解决方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • MySQL中join语句怎么优化

    MySQL中join语句怎么优化

    本文主要介绍了MySQL中join语句怎么优化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论