服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL ClickHouse不同于SQL的语法介绍

MySQL ClickHouse不同于SQL的语法介绍

2022-11-30 16:11小基基o_O Mysql

CloudCanal 近期实现了 MySQL(RDS) 到 ClickHouse 实时同步的能力,功能包含全量数据迁移、增量数据迁移、结构迁移能力,以及附带的监控、告警、HA等能力

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

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

ClickHouse的JOIN逻辑

MySQL ClickHouse不同于SQL的语法介绍

# 创建左表
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

左联测试结果

MySQL ClickHouse不同于SQL的语法介绍

在右表中,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);

MySQL ClickHouse不同于SQL的语法介绍

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

MySQL ClickHouse不同于SQL的语法介绍

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

MySQL ClickHouse不同于SQL的语法介绍

单引号和双引号

多数情况使用单引号

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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/Yellow_python/article/details/126999224

延伸 · 阅读

精彩推荐