大数据(5n)ClickHouse常见数据类型

Posted 小基基o_O

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据(5n)ClickHouse常见数据类型相关的知识,希望对你有一定的参考价值。

文章目录

本文版本
ClickHouse client version 21.4.6.55 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 21.4.6 revision 54447.

整数

整数范围别称
Int8-128~127TINYINT
Int16-32768~32767SMALLINT
Int32-2147483648~2147483647INTEGER、INT
Int64-263~263-1BIGINT
Int128-2127~2127-1
Int256-2255~2255-1
非负整数范围
UInt80~255
UInt160~65535
UInt320~4294967295
UInt640~264-1
UInt1280~2128-1
UInt2560~2256-1

浮点数

浮点数别称
Float32FLOAT
Float64DOUBLE

浮点数的计算可能会产生舍入误差

SELECT 1 - 0.9;

┌───────minus(1, 0.9)─┐
│ 0.09999999999999998 │
└─────────────────────┘

浮点数的计算可能会产生无穷大Inf)和非数字NaN

SELECT -0.5 / 0;

┌─divide(-0.5, 0)─┐
│            -inf │
└─────────────────┘
SELECT 0 / 0;

┌─divide(0, 0)─┐
│          nan │
└──────────────┘

十进制小数

P精度(位数)
Decimal329
Decimal6418
Decimal12838
Decimal25676
S范围
Decimal32(S) − 1 × 1 0 ( 9 − S ) -1 \\times 10^(9 - S) 1×10(9S) ~ 1 × 1 0 ( 9 − S ) 1 \\times 10^(9 - S) 1×10(9S)
Decimal64(S) − 1 × 1 0 ( 18 − S ) -1 \\times 10^(18 - S) 1×10(18S) ~ 1 × 1 0 ( 18 − S ) 1 \\times 10^(18 - S) 1×10(18S)
Decimal128(S) − 1 × 1 0 ( 38 − S ) -1 \\times 10^(38 - S) 1×10(38S) ~ 1 × 1 0 ( 38 − S ) 1 \\times 10^(38 - S) 1×10(38S)
Decimal256(S) − 1 × 1 0 ( 76 − S ) -1 \\times 10^(76 - S) 1×10(76S) ~ 1 × 1 0 ( 76 − S ) 1 \\times 10^(76 - S) 1×10(76S)

例如,Decimal32(4)范围:-99999.9999~99999.9999,步长为0.0001

在加减法运算期间保持精度的有符号定点数

SELECT 1 - toDecimal64(0.9,2);

┌─minus(1, toDecimal64(0.9, 2))─┐
│                          0.10 │
└───────────────────────────────┘

对于乘法,可能会发生位数溢出(如下示例,5+5>9)

SELECT toDecimal32(4.2, 5) AS x, x * x;

Scale 10 is out of bounds

对于除法,可能会丢失小数位的精度(截断)

SELECT toDecimal32(2, 4) AS x, x / 3;

┌──────x─┬─divide(toDecimal32(2, 4), 3)─┐
│ 2.00000.6666 │
└────────┴──────────────────────────────┘

乘法或加法可能会导致溢出

SELECT toDecimal32(9.9, 8) AS x, x + 20;

Decimal math overflow

boolean

bool类型以UInt8存储

CREATE TABLE test_bool(`b` Bool)ENGINE=Memory;
SHOW CREATE TABLE test_bool;

┌─statement───────────────────────────────────────────────────┐
│ CREATE TABLE default.test_bool
(
    `b` Int8
)
ENGINE = Memory │
└─────────────────────────────────────────────────────────────┘

字符串

  • String
    任意长度的字符串,长度不限
    字符串可以包含任意一组字节,这些字节被按原样存储和输出,包括空字节
    如果需要存储文本,我们建议使用UTF-8编码
    length函数以字节为单位计算字符串长度,而lengthUTF8函数以Unicode编码点为单位计算字符串长度
SELECT length('大')

┌─length('大')─┐
│            3 │
└──────────────┘
SELECT lengthUTF8('大')

┌─lengthUTF8('大')─┐
│                1 │
└──────────────────┘
  • FixedString
    定长字符串
    FixedString(N)N是正整数
    如果字符串少于N个字节,则用空字节填补尾部
    如果字符串长于N个字节,则报错

日期、时间、时间戳

  • Date
    范围:1970-01-01~2149-06-06
    大小:2bytes
  • Date32
    范围:1900-01-01~2299-12-31
    大小:4bytes
  • DateTime
    DateTime([timezone])
    范围:1970-01-01 00:00:00~2106-02-07 06:28:15
    分辨率:1秒
  • Datetime64
    DateTime64(precision, [timezone])precision常用3(milliseconds)或6(microseconds)
    范围:1900-01-01 00:00:00~2299-12-31 23:59:59.99999999

日期

-- 今天
SELECT today()

-- 昨天
SELECT today() - toIntervalDay(1)

┌─minus(today(), toIntervalDay(1))─┐
│                       2022-09-20 │
└──────────────────────────────────┘
-- 支持 等于字符串的写法
SELECT today() = '2022-09-21'

┌─equals(today(), '2022-09-21')─┐
│                             1 │
└───────────────────────────────┘

时间

-- 现在
SELECT now() AS x, toTypeName(x);

┌───────────────────x─┬─toTypeName(now())─┐
│ 2022-09-21 21:59:02DateTime          │
└─────────────────────┴───────────────────┘
-- 转字符串
SELECT formatDateTime(now(), '%Y-%m-%d %T')

┌─formatDateTime(now(), '%Y-%m-%d %T')─┐
│ 2022-09-21 22:03:16                  │
└──────────────────────────────────────┘

时区

SELECT timeZoneOf(now())

┌─timeZoneOf(now())─┐
│ Asia/Shanghai     │
└───────────────────┘

时间戳

SELECT FROM_UNIXTIME(0);
-- 返回DateTime类型
┌────FROM_UNIXTIME(0)─┐
│ 1970-01-01 08:00:00 │
└─────────────────────┘


SELECT toUnixTimestamp('1970-01-01 08:00:00', 'Asia/Shanghai')
-- 返回UInt32类型
┌─toUnixTimestamp('1970-01-01 08:00:00', 'Asia/Shanghai')─┐
│                                                       0 │
└─────────────────────────────────────────────────────────┘

数组

array(T)

SELECT array(1, 2) AS x, toTypeName(x);

┌─x─────┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8)            │
└───────┴─────────────────────────┘

-- 方括号写法
SELECT [1, 2, NULL] AS x, toTypeName(x);

┌─x──────────┬─toTypeName([1, 2, NULL])─┐
│ [1,2,NULL] │ Array(Nullable(UInt8))   │
└────────────┴──────────────────────────┘

以上是关于大数据(5n)ClickHouse常见数据类型的主要内容,如果未能解决你的问题,请参考以下文章

大数据(5n)ClickHouse常见数据类型

大数据(5n)ClickHouse异于平常SQL的语法

大数据ClickHouse进阶(十八):数据字典类型

大数据ClickHouse进阶(十八):数据字典类型

大数据ClickHouse:数据类型详细介绍

BitMap及其在ClickHouse中的应用