IT评测·应用市场-qidao123.com技术社区

标题: clickhouse组件介绍 [打印本页]

作者: 用多少眼泪才能让你相信    时间: 2024-9-4 11:20
标题: clickhouse组件介绍
写在前面

今天学习clickhouse部门的知识。
ClickHouse

OLTP (联机事务处置惩罚系统)

例如 MySQL 等关系型数据库,适用于小数据量时的快速查询和分析。OLTP 主要针对增编削操作,数据经常发生厘革。
OLAP (联机分析处置惩罚系统)

适用于数据长期不变且有大量历史数据的场景,主要进行分析操作,增编削操作较少。
OLAP 特点

数据类型

整数类型

字符串类型

日期类型

示例
  1. -- 建表语句
  2. CREATE TABLE date_test (
  3.     date1 Date,
  4.     date2 Date32,
  5.     date3 DateTime,
  6.     date4 DateTime64
  7. ) ENGINE = TinyLog;
  8. -- 插入语句
  9. INSERT INTO date_test VALUES ('2023-11-21', '2023-11-21', '2023-11-21', '2023-11-21');
  10. INSERT INTO date_test VALUES (1711435333589, 1711435333589, 1711435333589, 1711435333589);
  11. -- 结果:2024-03-26 15:33:38
复制代码
UUID 类型

ClickHouse 提供了一个函数 generateUUIDv4(),生成 UUID,例如 bee32020-a6cb-49a6-a10b-427381b11613
可为空(Nullable)

  1. CREATE TABLE test2 (
  2.     id Int32,
  3.     name Nullable(String)
  4. ) ENGINE = TinyLog;
  5. INSERT INTO test2 VALUES (1001, NULL);
复制代码
数组

示例
  1. CREATE TABLE t1 (
  2.     col1 Array(Int8)
  3. ) ENGINE = TinyLog;
  4. INSERT INTO t1 VALUES (array(11, 12, 13));
复制代码
小数类型

示例
  1. -- Decimal(4,2)
  2. -- Decimal(7,5)
复制代码
表操作

留意事项

建表语句
  1. CREATE TABLE users3 (
  2.     id Int8,
  3.     name FixedString(12),
  4.     gender Nullable(FixedString(3)),
  5.     clazz String
  6. ) ENGINE = TinyLog;
复制代码
插入数据
  1. -- 基本格式
  2. INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
  3. -- 示例
  4. CREATE TABLE IF NOT EXISTS bigdata31.students_test (
  5.     id Int32,
  6.     name String,
  7.     gender FixedString(6),
  8.     clazz String
  9. ) ENGINE = TinyLog;
  10. -- 插入数据
  11. INSERT INTO students_test VALUES
  12. (1001, '陆澳', '男', '特训营24期'),
  13. (1002, '李佳豪', '男', '特训营24期'),
  14. (1003, '郭香香', '女', '特训营24期');
  15. INSERT INTO students_test VALUES
  16. (1004, '王宇杰', '男', '特训营24期'),
  17. (1005, '张怀远', '男', '特训营24期'),
  18. (1006, '史俊超', '男', '特训营24期');
  19. INSERT INTO students_test (name, gender, clazz) VALUES
  20. ('张玮', '男', '特训营24期');
  21. -- 查看表结构
  22. DESC 表名;
复制代码
引擎

数据库引擎

创建数据库并映射远程 MySQL 服务
  1. CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
  2. ENGINE = MySQL('host:port', ['database' | database], 'user', 'password');
  3. -- 示例
  4. CREATE DATABASE IF NOT EXISTS shujia_ck_mysql ENGINE = MySQL('192.168.136.100:3306', 'bigdata31', 'root', '123456');
复制代码
数据表引擎

Log

TinyLog

StripeLog

建表语句
  1. CREATE TABLE stripe_log_table (
  2.     timestamp DateTime,
  3.     message_type String,
  4.     message String
  5. ) ENGINE = StripeLog;
  6. -- 插入数据
  7. INSERT INTO stripe_log_table VALUES
  8. (now(), 'REGULAR', 'The first regular message'),
  9. (now(), 'REGULAR', 'The second regular message'),
  10. (now(), 'WARNING', 'The first warning message');
  11. -- 示例
  12. CREATE TABLE students_stripelog (
  13.     id Int32,
  14.     name String,
  15.     gender FixedString(3),
  16.     clazz String
  17. ) ENGINE = StripeLog;
  18. -- 添加数据
  19. INSERT INTO students_stripelog VALUES
  20. (1001, '陆澳', '男', '特训营24期'),
  21. (1002, '李佳豪', '男', '特训营24期'),
  22. (1003, '郭香香', '女', '特训营24期');
复制代码
MergeTree

建表语句
  1. CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] (
  2.   name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
  3.   name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
  4.   ...
  5.   INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
  6.   ...
  7. ) ENGINE = MergeTree()
  8. [PARTITION BY expr]
  9. [ORDER BY expr]
  10. [PRIMARY KEY expr]
  11. [SAMPLE BY expr]
  12. [TTL expr]
  13. [SETTINGS name=value, ...];
  14. PARTITION BY:用于数据分区,以提高查询效率。
  15. ORDER BY:定义数据的排序方式。
  16. PRIMARY KEY:指定主键索引。
  17. SAMPLE BY:采样数据的列。
  18. TTL:定义数据过期时间。
  19. SETTINGS:表级别的设置。
复制代码
示例
  1. CREATE TABLE IF NOT EXISTS bigdata31.students (
  2.   id Int32,
  3.   name String,
  4.   gender FixedString(6),
  5.   clazz String
  6. ) ENGINE = MergeTree()
  7. PARTITION BY toYYYYMM(date)
  8. ORDER BY id
  9. PRIMARY KEY id;
复制代码
-- 插入数据
  1. INSERT INTO students VALUES
  2.   (1001, '陆澳', '男', '特训营24期'),
  3.   (1002, '李佳豪', '男', '特训营24期');...
复制代码
ClickHouse 表引擎和数据优化

数据表优化

表引擎选择

常用函数

算术函数

比力函数

比力函数始终返回 0 或 1(UInt8),用于比力数值、字符串、日期和日期时间类型。
字符串按字节进行比力,较短的字符串小于较长的字符串。
数据类型转换

将数据从一种类型转换为另一种类型时,需留意大概的数据丢失问题。通常,数据丢失发生在以下环境:
例如,以下示例演示了如何进行类型转换:
  1. -- 从 Float64 转换为 Int32,可能会丢失小数部分
  2. SELECT toInt32(12.34); -- 结果: 12
  3. -- 从 Int32 转换为 String
  4. SELECT toString(123); -- 结果: '123'
  5. -- 从 String 转换为 Date
  6. SELECT toDate('2024-01-01'); -- 结果: 2024-01-01
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4