我是靠谱客的博主 真实发夹,最近开发中收集的这篇文章主要介绍Clickhouse -- 基础和入门三1.支持的常见数据类型2.表操作3.列操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

向导

  • 1.支持的常见数据类型
    • 1.Int
    • 2.float: 浮点数
    • 3.布尔值
    • 4.字符串
    • 5.UUID:通用唯一标识符
    • 6.Date:日期
    • 7.Datetime:时间戳
    • 8.Enum:枚举
    • 9.Nullable:可为空/缺失值
    • 10.Array(T):数组
    • 11.Tuple(T1,T2,...):元组
    • 12.Nested(Name1 Type1, Name2 Type2, ...):嵌套
  • 2.表操作
  • 3.列操作

1.支持的常见数据类型

  1. 查看官方文档:https://clickhouse.tech/docs/en/sql-reference/data-types/
  2. 查看系统表:select * from system.data_type_families;
SELECT *
FROM system.data_type_families
┌─name────────────────────────────┬─case_insensitive─┬─alias_to────┐
│ Ring
│
0 │
│
│ Polygon0 │
│
│ IPv6
│
0 │
│
│ IPv4
│
0 │
│
│ IntervalYear
│
0 │
│
│ IntervalQuarter
│
0 │
│
│ IntervalMonth
│
0 │
│
│ IntervalDay
│
0 │
│
│ IntervalHour
│
0 │
│
│ IntervalSecond
│
0 │
│
│ AggregateFunction
│
0 │
│
│ Nothing
│
0 │
│
│ Tuple
│
0 │
│
│ Array
│
0 │
│
│ Nullable
│
0 │
│
│ Int32
│
0 │
│
│ Date1 │
│
│ Enum0 │
│
│ Enum8
│
0 │
│
│ IntervalMinute
│
0 │
│
│ FixedString
│
0 │
│
│ LowCardinality
│
0 │
│
│ String
│
0 │
│
│ DateTime1 │
│
│ UUID
│
0 │
│
│ Decimal64
│
1 │
│
│ Decimal32
│
1 │
│
│ Point0 │
│
│ Float64
│
0 │
│
│ Int16
│
0 │
│
│ DateTime64
│
1 │
│
│ Decimal128
│
1 │
│
│ Int8
│
0 │
│
│ SimpleAggregateFunction
│
0 │
│
│ Nested
│
0 │
│
│ Int64
│
0 │
│
│ Decimal1 │
│
│ IntervalWeek
│
0 │
│
│ UInt64
│
0 │
│
│ Enum16
│
0 │
│
│ UInt32
│
0 │
│
│ UInt16
│
0 │
│
│ Float32
│
0 │
│
│ MultiPolygon0 │
│
│ UInt8
│
0 │
│
│ INET6
│
1 │ IPv6
│
│ INET4
│
1 │ IPv4
│
│ BINARY1 │ FixedString │
│ NATIONAL CHAR VARYING1 │ String
│
│ BINARY VARYING1 │ String
│
│ NCHAR LARGE OBJECT
│
1 │ String
│
│ NATIONAL CHARACTER VARYING1 │ String
│
│ NATIONAL CHARACTER LARGE OBJECT │
1 │ String
│
│ NATIONAL CHARACTER1 │ String
│
│ NATIONAL CHAR1 │ String
│
│ CHARACTER VARYING1 │ String
│
│ CLOB
│
1 │ String
│
│ MEDIUMTEXT1 │ String
│
│ NUMERIC1Decimal
│
│ TINYTEXT1 │ String
│
│ TEXT1 │ String
│
│ TINYBLOB1 │ String
│
│ VARCHAR2
│
1 │ String
│
│ DOUBLE PRECISION1 │ Float64
│
│ CHARACTER LARGE OBJECT
│
1 │ String
│
│ LONGTEXT1 │ String
│
│ NVARCHAR
│
1 │ String
│
│ INT1 UNSIGNED1 │ UInt8
│
│ VARCHAR1 │ String
│
│ INT1 │ Int32
│
│ SINGLE
│
1 │ Float32
│
│ BYTEA
│
1 │ String
│
│ CHAR VARYING1 │ String
│
│ MEDIUMBLOB1 │ String
│
│ NCHAR1 │ String
│
│ CHAR1 │ String
│
│ SMALLINT UNSIGNED1 │ UInt16
│
│ TIMESTAMP1DateTime
│
│ FIXED1Decimal
│
│ LONGBLOB1 │ String
│
│ DEC1Decimal
│
│ TINYINT UNSIGNED1 │ UInt8
│
│ INTEGER UNSIGNED1 │ UInt32
│
│ INT UNSIGNED1 │ UInt32
│
│ BLOB1 │ String
│
│ REAL1 │ Float32
│
│ BOOL1 │ Int8
│
│ SMALLINT1 │ Int16
│
│ INTEGER SIGNED
│
1 │ Int32
│
│ NCHAR VARYING1 │ String
│
│ INT SIGNED
│
1 │ Int32
│
│ BIGINT SIGNED
│
1 │ Int64
│
│ BINARY LARGE OBJECT
│
1 │ String
│
│ SMALLINT SIGNED
│
1 │ Int16
│
│ TINYINT SIGNED
│
1 │ Int8
│
│ INTEGER1 │ Int32
│
│ INT1 SIGNED
│
1 │ Int8
│
│ BIGINT UNSIGNED1 │ UInt64
│
│ FLOAT1 │ Float32
│
│ BOOLEAN1 │ Int8
│
│ DOUBLE1 │ Float64
│
│ INT1
│
1 │ Int8
│
│ CHAR LARGE OBJECT
│
1 │ String
│
│ TINYINT1 │ Int8
│
│ BIGINT1 │ Int64
│
│ CHARACTER1 │ String
│
│ BYTE
│
1 │ Int8
│
└─────────────────────────────────┴──────────────────┴─────────────┘
107 rows in set. Elapsed: 0.003 sec.

1.Int

Int Ranges (有符号的整型)

  1. Int8 - [-128 : 127]
  2. Int16 - [-32768 : 32767]
  3. Int32 - [-2147483648 : 2147483647]
  4. Int64 - [-9223372036854775808 : 9223372036854775807]

Uint Ranges (无符号的整型)

  1. UInt8 - [0 : 255]
  2. UInt16 - [0 : 65535]
  3. UInt32 - [0 : 4294967295]
  4. UInt64 - [0 : 18446744073709551615]

2.float: 浮点数

  1. Float32 - float
  2. Float64 - double
建议尽可能以整数形式存储数据。
对浮点数进行计算可能引起四舍五入的误差。
浮点计算结果可能是诸如正无穷大(inf)、负无穷大(-inf)和"非数字"(nan)。
SELECT 1 - 0.9 # 0.09999999999999998
SELECT 0.5 / 0 # inf
SELECT -0.5 / 0 # -inf
SELECT 0 / 0 # nan
  1. Decimal(P,S): 有符号的定点数
    (Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S))
    有符号的定点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入)。
    P - 精度。有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。
    S - 规模。有效范围:[0:P],决定数字的小数部分中包含的小数位数。
    对于不同的 P 参数值 Decimal 表示,以下例子都是同义的:
    -P从[1:9]-对于Decimal32(S)
    -P从[10:18]-对于Decimal64(小号)
    -P从[19:38]-对于Decimal128(S)
    十进制值范围
    Decimal32(S) - ( -1 * 10^(9 - S),110^(9-S) )
    Decimal64(S) - ( -1 * 10^(18 - S),1
    10^(18-S) )
    Decimal128(S) - ( -1 * 10^(38 - S),1*10^(38-S) )
    例如,Decimal32(4) 可以表示 -99999.9999 至 99999.9999 的数值,步长为0.0001。

3.布尔值

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

4.字符串

  1. String:变长字符串,字符串可以任意长度的。它可以包含任意的字节集,包含空字节。
  2. FixedString(N):变长字符串,固定长度 N 的字符串。N 必须是严格的正自然数。
    当数据的长度恰好为N个字节时,FixedString类型是高效的。 在其他情况下,这可能会降低效率。

5.UUID:通用唯一标识符

通用唯一标识符(UUID)是用于标识记录的16字节数字。
如果在插入新记录时未指定UUID列值,则UUID值将填充为零:00000000-0000-0000-0000-000000000000
要生成UUID值,ClickHouse提供generateUUIDv4()函数。

select generateUUIDv4() # 29fc209d-eba3-4adf-b7cb-d4600036d10a

UUID数据类型不支持算术运算(例如,abs)或聚合函数(例如sum和avg)。
UUID数据类型仅支持String数据类型也支持的函数(例如,min,max和count)。

6.Date:日期

日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。
允许存储从 Unix 纪元开始到编译阶段定义的上限阈值常量(目前上限是2106年,但最终完全支持的年份为2105)。最小值输出为1970-01-01。

日期中没有存储时区信息。

7.Datetime:时间戳

时间戳类型。用四个字节(无符号的)存储 Unix 时间戳。允许存储与日期类型相同的范围内的值。最小值为 1970-01-01 00:00:00。时间戳类型值精确到秒(没有闰秒)。

时区:
使用启动客户端或服务器时的系统时区,时间戳是从文本(分解为组件)转换为二进制并返回。在文本格式中,有关夏令时的信息会丢失。

默认情况下,客户端连接到服务的时候会使用服务端时区。您可以通过启用客户端命令行选项 --use_client_time_zone 来设置使用客户端时间。

因此,在处理文本日期时(例如,在保存文本转储时),请记住在夏令时更改期间可能存在歧义,如果时区发生更改,则可能存在匹配数据的问题。

8.Enum:枚举

枚举类型(Enum8, Enum16)
Enum 保存 ‘string’= integer 的对应关系。
在 ClickHouse 中,尽管用户使用的是字符串常量,但所有含有 Enum 数据类型的操作都是按照包含整数的值来执行。这在性能方面比使用 String 数据类型更有效。
Enum8 用 ‘String’= Int8 对描述。
Enum16 用 ‘String’= Int16 对描述。

CREATE TABLE t_enum
(
x Enum('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog
INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')

这个 x 列只能存储类型定义中列出的值:‘hello’或’world’。如果您尝试保存任何其他值,ClickHouse 抛出异常。

9.Nullable:可为空/缺失值

允许用特殊标记 (NULL) 表示«缺失值»,可以与 TypeName 的正常值存放一起。例如,Nullable(Int8) 类型的列可以存储 Int8 类型值,而没有值的行将存储 NULL。

对于 TypeName,不能使用复合数据类型 阵列 和 元组。复合数据类型可以包含 Nullable 类型值,例如Array(Nullable(Int8))。

Nullable 类型字段不能包含在表索引中。

除非在 ClickHouse 服务器配置中另有说明,否则 NULL 是任何 Nullable 类型的默认值。

要在表的列中存储 Nullable 类型值,ClickHouse 除了使用带有值的普通文件外,还使用带有 NULL 掩码的单独文件。 掩码文件中的条目允许 ClickHouse 区分每个表行的 NULL 和相应数据类型的默认值。 由于附加了新文件,Nullable 列与类似的普通文件相比消耗额外的存储空间。所以使用 Nullable 几乎总是对性能产生负面影响,在设计数据库时请记住这一点!

10.Array(T):数组

由 T 类型元素组成的数组。
T 可以是任意类型,包含数组类型。 但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。
可以使用array()函数和中括号来创建数组

SELECT array(1, 2)
SELECT [1, 2]
如果在元素中存在 NULL或存在 Nullable类型元素,那么数组的元素类型将会变成 Nullable。
如果 ClickHouse 无法确定数据类型,它将产生异常。

11.Tuple(T1,T2,…):元组

元组,其中每个元素都有单独的类型。
SELECT tuple(1,‘a’)

12.Nested(Name1 Type1, Name2 Type2, …):嵌套

嵌套数据结构类似于嵌套表。嵌套数据结构的参数(列名和类型)与 CREATE 查询类似。每个表可以包含任意多行嵌套数据结构。
只支持一级嵌套。嵌套结构的列中,若列的类型是数组类型,那么该列其实和多维数组是相同的,所以目前嵌套层级的支持很局限(MergeTree 引擎中不支持存储这样的列)
大多数情况下,处理嵌套数据结构时,会指定一个单独的列。为了这样实现,列的名称会与点号连接起来。这些列构成了一组匹配类型。在同一条嵌套数据中,所有的列都具有相同的长度。
不能对整个嵌套数据结构执行 SELECT。只能明确列出属于它一部分列。

CREATE TABLE test.visits
(
CounterID UInt32,
StartDate Date,
Sign Int8,
IsNew UInt8,
VisitID UInt64,
UserID UInt64,
...
Goals Nested
(
ID UInt32,
Serial UInt32,
EventTime DateTime,
Price Int64,
OrderID String,
CurrencyID UInt32
),
...
) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign)

2.表操作

Clickhouse对表操作分为四大类:增删查改(INSERT,DROP,SELECT,ALTER)。
增,删,查比较简单,改最复杂。

  • 1 ALTER TABLE
    • 1.1 ALTER UPDATE
    • 1.2 ALTER DELETE
    • 1.3 ALTER COLUMN
      • 1.3.1 ALTER ADD COLUMN
      • 1.3.2 ALTER DROP COLUMN
      • 1.3.3 ALTER MODIFY COLUMN
      • 1.3.4 ALTER COMMENT COLUMN
      • 1.3.5 ALTER CLEAR COLUMN
      • 1.3.6 ALTER RENAME COLUMN
    • 2.1 ALTER INDEX
      • 2.1.1 ALTER ORDER BY
      • 2.1.2 ALTER SAMPLE BY
      • 2.1.3 ALTER ADD INDEX
      • 2.1.4 ALTER DROP INDEX
      • 2.1.5 ALTER MATERIALIZE INDEX
      • 2.1.6 ALTER CLEAR INDEX
    • 3.1 ALTER CONSTRAINT
      • 3.1.1 ALTER ADD CONSTRAINT
      • 3.1.2 ALTER DROP CONSTRAINT
    • 4.1 ALTER TTL
    • 5.1 ALTER MATERIALIZE TTL
    • 6.1 ALTER SETTINGS
    • 7.1 ALTER MOVE PARTITION
    • 8.1 ALTER FETCH PARTITION
    • 9.1 ALTER FREEZE PARTITION
    • 10.1 ALTER VIEW
      • 10.1.1 ALTER VIEW REFRESH
      • 10.1.2 ALTER VIEW MODIFY QUERY

3.列操作

ALTER查询仅支持* MergeTree族表引擎,以及Merge表引擎和Distributed表引擎。
ALTER操作阻塞所有对表的其他操作。

#添加列
ALTER TABLE [db].name [ON CLUSTER cluster] ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [AFTER name_after]
#删除列
ALTER TABLE [db].name [ON CLUSTER cluster] DROP COLUMN [IF EXISTS] name
#重置指定分区中列的所有数据
ALTER TABLE [db].name [ON CLUSTER cluster] CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name
#添加列注解
ALTER TABLE [db].name [ON CLUSTER cluster] COMMENT COLUMN [IF EXISTS] name 'comment'
#修改列类型或者列的默认值
ALTER TABLE [db].name [ON CLUSTER cluster] MODIFY COLUMN [IF EXISTS] name [type] [default_expr]
#添加索引
ALTER TABLE [db].name ADD INDEX name expression TYPE type GRANULARITY value AFTER name [AFTER name2]
#删除索引
ALTER TABLE [db].name DROP INDEX name
#分离分区
ALTER TABLE table_name DETACH PARTITION partition_expr
#删除分区
ALTER TABLE table_name DROP PARTITION partition_expr
#添加被分离的分区
ALTER TABLE table_name ATTACH PARTITION|PART partition_expr
#复制table1中的分区数据到table2
ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1
#重置列值为默认值,默认值为创建表时指定
ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr
#创建指定分区或者所有分区的备份
ALTER TABLE table_name FREEZE [PARTITION partition_expr]
#从其他分片中复制分区数据
ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'path-in-zookeeper'

最后

以上就是真实发夹为你收集整理的Clickhouse -- 基础和入门三1.支持的常见数据类型2.表操作3.列操作的全部内容,希望文章能够帮你解决Clickhouse -- 基础和入门三1.支持的常见数据类型2.表操作3.列操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部