大数据-135 - ClickHouse 集群 - 数据类型 实际测试

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(正在更新···)

章节内容

上节我们完成了如下的内容:

  • 单机安装
  • 单机测试
  • 集群安装
  • 集群启动

上节情况

上节已经完成了ClickHouse 的安装和启动。

测试连接

shell 复制代码
clickhouse-client -m --host h121.wzk.icu --port 9000 --user default --password clickhouse@wzk.icu

如果可以从 122 连接到 121 说明你的服务已经搭建好了。

你可以测试以下,是否三台节点之间都是互通的,确保服务和服务之间一切正常,方便我们后续的学习研究。

检验集群

任意连接一个节点,我们进行测试

h121

shell 复制代码
clickhouse-client -m --host h121.wzk.icu --port 9000 --user default --password clickhouse@wzk.icu
shell 复制代码
SELECT * FROM system.clusters WHERE cluster = 'perftest_3shards_1replicas';

h122

shell 复制代码
clickhouse-client -m --host h122.wzk.icu --port 9001 --user default --password clickhouse@wzk.icu

h123

shell 复制代码
clickhouse-client -m --host h123.wzk.icu --port 9001 --user default --password clickhouse@wzk.icu

数据类型

简单介绍

支持DML,为了提高性能,较传统数据库而言,ClickHouse提供了复合数据类型。ClickHouse的Update和Delete就是由Alter变种实现的。

启动测试

我这里采用了 h121 机器的服务,当然如果你使用别的机器的服务也可以。

shell 复制代码
clickhouse-client -m --host h121.wzk.icu --port 9000 --user default --password clickhouse@wzk.icu

整型

固定长度的整型,包括有符号整型,和无符号整型。

shell 复制代码
SELECT 255;
SELECT -128;

执行的结果截图如下图:

浮点型

建议尽可能以整数形式存储数据,例如,将固定精度的数字转换为整数值,如时间用毫秒为单位表示,因为浮点型计算行为可能引起四舍五入的误差。

shell 复制代码
SELECT 1-0.9;
SELECT 1/0;
SELECT 0/0;

执行的结果如下图:

Decimal

如果要求更高精度,可以选择Decimal类型,格式:Decimal(P,S)

  • P:代表精度,决定总位数(正数部分+小数部分),取值0-38
  • S:代表规模,决定小数位数,取值范围是0-P

ClickHouse对Decimal提供三种简写:

  • Decimal32
  • Decimal64
  • Decimal128

相加、减精度取大

shell 复制代码
SELECT toDecimal32(2, 4) + toDecimal32(2, 2);
SELECT toDecimal32(4, 4) + toDecimal32(2, 2);

运行结果的截图如下图所示:

相乘精度取和

shell 复制代码
SELECT toDecimal32(2, 2) * toDecimal32(4, 4)

运行结果的截图如下图所示:

相除精度取被除数

shell 复制代码
SELECT toDecimal32(4, 4) / toDecimal32(2, 2)

运行结果的截图如下图所示:

字符串

String

字符串可以任意长度,它可以包含任意的字符集,包含空字节。

FixedString(N)

固定长度为N的字符串,N必须是严格的正自然数。当服务端读取长度小于N的字符串时候,通过在字符串末尾添加空字节来达到N字节长度。当服务端读取长度小于N的字符串的时候,将返回错误。

shell 复制代码
SELECT toFixedString('abc', 5), LENGTH(toFixedString('abc', 5)) AS LENGTH;

执行结果如下图:

UUID

ClickHouse将UUID这种在传统数据库中充当主键的类型直接做成了数据类型

创建新表

shell 复制代码
CREATE TABLE UUID_TEST(
  `c1` UUID,
  `c2` String
)ENGINE = memory;

执行结果如下图:

插入数据

shell 复制代码
INSERT INTO UUID_TEST SELECT generateUUIDv4(), 't1';
INSERT INTO UUID_TEST(c2) VALUES('t2');

执行结果如下图:

查询结果

shell 复制代码
SELECT * FROM UUID_TEST;

执行结果如下图:

枚举类型

包括 Enum8 和 Enum16 类型,保存 string = integer 的对应关系。

Enum8 用 String = Int8 对描述

Enum16 用 String = Int16 对描述。

创建新表

shell 复制代码
CREATE TABLE t_enum (
  x Enum8('hello' = 1, 'word' = 2)
) ENGINE = TinyLog;

执行结果如下所示:

注意:这个列 x 只能存储定义列出的值,"Hello" 或者 "world",如果插入其他值则会报错。

插入数据

shell 复制代码
INSERT INTO t_enum VALUES ('hello'), ('word'), ('hello');

执行结果如下图:

查询数据

shell 复制代码
SELECT * FROM t_enum;

如果需要看到对应行的数值,则必须将Enum转换为整数类型。

shell 复制代码
SELECT CAST(x, 'Int8') FROM t_enum;

执行结果如下图:

数组

Array(T):由 T 类型元素组成的数组。

T可以是任意类型,包含数组类型,但不推荐使用多维数组,ClickHouse对多维数组的支持有限。

例如,不能再MergeTree表中存储多维数组。

创建数组

shell 复制代码
SELECT array(1, 2.0) AS x, toTypeName(x);
SELECT [1, 2] AS x, toTypeName(x);

执行结果如下图:

如果是声明字段的时候,则需要指明数据类型:

shell 复制代码
CREATE TABLE Array_test (
  `c1` Array(String)
) ENGINE = Memory;

元组

Tuple(T1,T2):元组,每个元素都有单独的类型。

创建元组的示例:

shell 复制代码
SELECT tuple(1, 'a') AS x, toTypeName(x);

执行的结果如下图:

注意:在定义表字段的时候也需要指明数据类型。

Date、DateTime

日期类型、用两个字节存储,表示 1970-01-01 (无符号)到当前的日期值。

布尔型

没有单独的类型来存储布尔值,可以使用 UInt8 类型,取值限制为 0 或 1。

相关推荐
毕设源码-赖学姐8 分钟前
【开题答辩全过程】以 基于Springboot的智慧养老系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
jamesge201010 分钟前
限流之漏桶算法
java·开发语言·算法
jvstar11 分钟前
JAVA面试题和答案
java
冷雨夜中漫步11 分钟前
OpenAPITools使用——FAQ
android·java·缓存
9坐会得自创16 分钟前
使用marked将markdown渲染成HTML的基本操作
java·前端·html
无限大633 分钟前
为什么"虚拟现实"和"增强现实"不同?——从虚拟到混合的视觉革命
架构
阿坤带你走近大数据37 分钟前
大数据行业中,什么是拉链表?具体怎么做?
大数据
Hello.Reader37 分钟前
Flink ML 线性 SVM(Linear SVC)入门输入输出列、训练参数与 Java 示例解读
java·支持向量机·flink
oioihoii38 分钟前
C++数据竞争与无锁编程
java·开发语言·c++
最贪吃的虎38 分钟前
什么是开源?小白如何快速学会开源协作流程并参与项目
java·前端·后端·开源