ClickHouse:数据类型

概述

ClickHouse的数据类型主要如下:
在这里插入图片描述

Decimal

原生方式:Decimal(P,S)
简写方式:Decimal32(S)、Decimal64(S)、Decimal128(S)
P=总位数(取值1~38);S=小数位数。

当两个精度不同的定点数进行四则运算的时候,它们的结果精度按以下规则:

  1. 低精度 +/- 高精度 = 高精度
  2. 精度a * 精度b = 精度(a+b)
  3. 精度a ÷ 精度b = 精度a (前提a>b>0)

FixedString

声明:FixedString(N),其中N表示字符长度。
FixedString使用null字节填充末尾字符(占2位)

Array

定义类型:array(T) 或 [T],其中T是数组的数据类型。

# 建表:需要指明数组的数据类型
CREATE TABLE array_test (
    a Array(String)
) ENGINE = Memory
# 新增
insert into array_test values(['a','b','c'])
# 查看
SELECT *
FROM array_test
┌─a─────────────┐
│ ['a','b','c'] │
└───────────────┘

在同一个数组内可以包含多种数据类型,前提是各类型必须兼容。

Tuple

元组由1~n个元素组成,每个元素之间允许设置不同的数据类型,且彼此之间不要求兼容。

# 建表:需指定元组数据类型
CREATE TABLE tuple_test (
    a Tuple(Int8,String,Int8)
) ENGINE = Memory
# 新增数据
insert into tuple_test values((1,'lena',10))
# 查询
SELECT *
FROM tuple_test
┌─a─────────────┐
│ (1,'lena',10) │
└───────────────┘

Nested

嵌套类型,对于某一个字段可以嵌套其他任意多个类型,但每个字段的嵌套层级只支持一层。

# 建表
CREATE TABLE nested_test (
    id Int8,
    class Nested(
        id Int8,
        name String
    )
) ENGINE = Memory
# 新增 
insert into nested_test values(1,1,'计算机')
Exception on client:	# 异常:期望嵌套类型写入的是Array数组
Code: 53. DB::Exception: Type mismatch in IN or VALUES section. Expected: Array(Int8). Got: UInt64: While executing ValuesBlockInputFormat: data for INSERT was parsed from query. (TYPE_MISMATCH)
# 新增
insert into nested_test values(1,[1,2],['计算机','信管'])
# 查询
SELECT *
FROM nested_test
┌─id─┬─class.id─┬─class.name────────┐
│  1[1,2]['计算机','信管'] │
└────┴──────────┴───────────────────┘

嵌套类型本质是一种多维数组的结构。

猜你喜欢

转载自blog.csdn.net/lena7/article/details/124965650