Clickhou第⼆讲-CK数据类型Clickhou⽀持的数据类型
在 system.data_type_families 表中检查数据类型名称以及是否区分⼤⼩
写。这个表中存储了 ClickHou ⽀持的所有数据类型。
lect * from system.data_type_families limit 10;
┌─name────────────────────────────┬─ca_innsitive─┬─alias_to────┐│ Polygon │ 0 │ │
│ Ring │ 0 │ │
│ MultiPolygon │ 0 │ │
│ IPv6 │ 0 │ │
│ IntervalSecond │ 0 │ │
│ IPv4 │ 0 │ │
│ UInt32 │ 0 │ │
│ IntervalYear │ 0 │ │
│ IntervalQuarter │ 0 │ │
│ IntervalMonth │ 0 │ │
│ Int64 │ 0 │ │
│ IntervalDay │ 0 │ │
│ IntervalHour │ 0 │ │
│ UInt256 │ 0 │ │
孟学农夫人
│ Int16 │ 0 │ │
│ LowCardinality │ 0 │ │
│ AggregateFunction │ 0 │ │
│ Nothing │ 0 │ │
│ Decimal256 │ 1 │ │
│ Tuple │ 0 │ │
│ Array │ 0 │ │
│ Enum16 │ 0 │ │曾海英
│ IntervalMinute │ 0 │ │
│ FixedString │ 0 │ │
String │ 0 │ │
│ DateTime │ 1 │ │
│ UUID │ 0 │ │
│ Decimal64 │ 1 │ │
│ Nullable │ 0 │ │
│ Enum │ 0 │ │
│ Int32 │ 0 │ │
│ UInt8 │ 0 │ │
│ Date │ 1 │ │
│ Decimal32 │ 1 │ │
│ Point │ 0 │ │
│ Float64 │ 0 │ │
│ DateTime64 │ 1 │ │
│ Int128 │ 0 │ │
│ Decimal128 │ 1 │ │
│ Int8 │ 0 │ │结构化
│ SimpleAggregateFunction │ 0 │ │
│ Nested │ 0 │ │
│ Decimal │ 1 │ │
│ Int256 │ 0 │ │
│ IntervalWeek │ 0 │ │
│ UInt64 │ 0 │ │
│ Enum8 │ 0 │ │
│ DateTime32 │ 1 │ │
│ UInt16 │ 0 │ │
│ Float32 │ 0 │ │
│ INET6 │ 1 │ IPv6 │
│ INET4 │ 1 │ IPv4 │
│ BINARY │ 1 │ FixedString │
│ NATIONAL CHAR VARYING │ 1 │ String │
│ BINARY VARYING │ 1 │ String │
│ NCHAR LARGE OBJECT │ 1 │ String │
怎样煎鱼不粘锅│ NATIONAL CHARACTER VARYING │ 1 │ String │
│ NATIONAL CHARACTER LARGE OBJECT │ 1 │ String │
游园不值译文│ NATIONAL CHARACTER │ 1 │ String │
│ NATIONAL CHAR │ 1 │ String │
│ CHARACTER VARYING │ 1 │ String │
│ LONGBLOB │ 1 │ String │
│ MEDIUMTEXT │ 1 │ String │
│ TEXT │ 1 │ String │
│ TINYBLOB │ 1 │ String │
│ VARCHAR2 │ 1 │ String │
│ CHARACTER LARGE OBJECT │ 1 │ String │
│ DOUBLE PRECISION │ 1 │ Float64 │
│ LONGTEXT │ 1 │ String │
│ NVARCHAR │ 1 │ String │
│ INT1 UNSIGNED │ 1 │ UInt8 │
│ VARCHAR │ 1 │ String │
│ CHAR VARYING │ 1 │ String │
│ MEDIUMBLOB │ 1 │ String │
│ NCHAR │ 1 │ String │
│ CHAR │ 1 │ String │
│ SMALLINT UNSIGNED │ 1 │ UInt16 │
│ TIMESTAMP │ 1 │ DateTime │
│ FIXED │ 1 │ Decimal │
│ TINYTEXT │ 1 │ String │
│ NUMERIC │ 1 │ Decimal │
│ DEC │ 1 │ Decimal │
│ TINYINT UNSIGNED │ 1 │ UInt8 │
│ INTEGER UNSIGNED │ 1 │ UInt32 │
│ INT UNSIGNED │ 1 │ UInt32 │
│ CLOB │ 1 │ String │
│ MEDIUMINT UNSIGNED │ 1 │ UInt32 │
│ BOOL │ 1 │ Int8 │
│ SMALLINT │ 1 │ Int16 │
│ INTEGER SIGNED │ 1 │ Int32 │
│ NCHAR VARYING │ 1 │ String │
│ INT SIGNED │ 1 │ Int32 │
│ TINYINT SIGNED │ 1 │ Int8 │
│ BIGINT SIGNED │ 1 │ Int64 │
│ BINARY LARGE OBJECT │ 1 │ String │
│ SMALLINT SIGNED │ 1 │ Int16 │
│ MEDIUMINT │ 1 │ Int32 │
plea的形容词│ INTEGER │ 1 │ Int32 │
│ INT1 SIGNED │ 1 │ Int8 │
│ BIGINT UNSIGNED │ 1 │ UInt64 │
│ BYTEA │ 1 │ String │
│ INT │ 1 │ Int32 │
│ SINGLE │ 1 │ Float32 │
│ FLOAT │ 1 │ Float32 │
│ MEDIUMINT SIGNED │ 1 │ Int32 │
│ BOOLEAN │ 1 │ Int8 │
│ DOUBLE │ 1 │ Float64 │
紫芝的功效与作用│ INT1 │ 1 │ Int8 │
│ CHAR LARGE OBJECT │ 1 │ String │
│ TINYINT │ 1 │ Int8 │
│ BIGINT │ 1 │ Int64 │
│ CHARACTER │ 1 │ String │
│ BYTE │ 1 │ Int8 │
│ BLOB │ 1 │ String │
│ REAL │ 1 │ Float32 │
└─────────────────────────────────┴──────────────────┴─────────────┘CK数据类型和MySQL及Hive的区别
Int说明
ClickHou 中整形分为 Int8、Int16、Int32、Int64 来表⽰整数不同的取值范
围,其末尾数字正好代表占⽤字节的⼤⼩(8 位=1 字节),整形⼜包含有符号整形和⽆符
号整形,他们写法上的区别为⽆符号整形前⾯加“
U”表⽰
Float
建议使⽤整数⽅式来存储数据,因为浮点类型数据计算可能导致四舍五⼊的误差。
浮点类型包含单精度浮点数和双精度浮点数。Float32 从⼩数点后第 8 位起会发⽣数据溢出。
Float64 从⼩数点后第 17 位起会发⽣数据溢出。
Float之间的类型转换
toFloat32(...) ⽤来将字符串转换成 Float32 类型的函数
toFloat64(...) ⽤来将字符串转换成 Float64 类型的函数
Decimal
有符号的定点数,可在加、减和乘法运算过程中保持精度。ClickHou 提供了
Decimal32、Decimal64、Decimal128、Decimal256 ⼏种精度的定点数,⽀持⼏种写法:
Decimal(P,S)
Decimal32(S),数据范围:(-1*10^(9-S),1*10^(9-S))
Decimal64(S),数据范围:(-1*10^(18-S),1*10^(18-S))
Decimal128(S),数据范围:(-1*10^(38-S),1*10^(38-S))
Decimal256(S),数据范围:(-1*10^(76-S),1*10^(76-S))
其中,P 代表精度,决定总位数(整数部分+⼩数部分),取值范围是 1~76。S 代表规模,决定⼩数位数,取值范围是 0~P。
根据 P 值的范围可以有如下对等写法,这⾥以⼩数点后 2 位举例:
另外,Decimal 数据在进⾏四则运算时,精度(总位数)和规模(⼩数点位数)会发
⽣变化,具体规则如下:
精度(总位数)对应规则:
Decimal64(S1) 运算符 Decimal32(S2) -> Decimal64(S)
Decimal128(S1) 运算符 Decimal32(S2) -> Decimal128(S)
Decimal128(S1) 运算符 Decimal64(S2) -> Decimal128(S)
Decimal256(S1) 运算符 Decimal<32|64|128>(S2) -> Decimal256(S)
两个不同精度的数据进⾏四则运算时,结果数据的精度以最⼤精度为准。
规模(⼩数点位数)对应规则:
加法|减法:S=max(S1,S2),即以两个数据中⼩数点位数最多的为准。
乘法:S=S1+S2(注意:S1 精度>=S2 精度),即以两个数据的⼩数位相加为准。
除法:规模以被除数的⼩数位为准。两数相除,被除数的⼩数位数不能⼩于除数的
⼩数位数,也就是触发的规模可以理解为与两个数据中⼩数点位数⼤的为准。举例:
a/b ,a 是被除数,与 a 的规模保持⼀致
例⼦:
toDecimal32(value,S):将字符串 value 转换为 Decimal32 类型,⼩数点后
有 S 位。
toTypeName(字段):获取字段的数据类型函数。
#测试加法,S 取两者最⼤的,P 取两者最⼤的
lect toDecimal64(2,3) as x, toTypeName(x) as xtype, toDecimal32(2,2) as y,toTypeName(y) as ytype, x+y as z, toTypeName(z) as ztype;
#测试减法,S 取两者最⼤的,P 取两者最⼤的。
lect toDecimal64(2,3) as x, toTypeName(x) as xtype, toDecimal32(2,2) as y,toTypeName(y) as ytype, x-y as z, toTypeName(z) as ztype;
农村满60岁老人补贴#测试乘法,S 取两者最⼤的,P 取两者⼩数位之和