概述
向导
- 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.支持的常见数据类型
- 查看官方文档:https://clickhouse.tech/docs/en/sql-reference/data-types/
- 查看系统表:select * from system.data_type_families;
SELECT *
FROM system.data_type_families
┌─name────────────────────────────┬─case_insensitive─┬─alias_to────┐
│ Ring
│
0 │
│
│ Polygon
│
0 │
│
│ 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 │
│
│ Date
│
1 │
│
│ Enum
│
0 │
│
│ Enum8
│
0 │
│
│ IntervalMinute
│
0 │
│
│ FixedString
│
0 │
│
│ LowCardinality
│
0 │
│
│ String
│
0 │
│
│ DateTime
│
1 │
│
│ UUID
│
0 │
│
│ Decimal64
│
1 │
│
│ Decimal32
│
1 │
│
│ Point
│
0 │
│
│ Float64
│
0 │
│
│ Int16
│
0 │
│
│ DateTime64
│
1 │
│
│ Decimal128
│
1 │
│
│ Int8
│
0 │
│
│ SimpleAggregateFunction
│
0 │
│
│ Nested
│
0 │
│
│ Int64
│
0 │
│
│ Decimal
│
1 │
│
│ IntervalWeek
│
0 │
│
│ UInt64
│
0 │
│
│ Enum16
│
0 │
│
│ UInt32
│
0 │
│
│ UInt16
│
0 │
│
│ Float32
│
0 │
│
│ MultiPolygon
│
0 │
│
│ UInt8
│
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
│
│ CLOB
│
1 │ String
│
│ MEDIUMTEXT
│
1 │ String
│
│ NUMERIC
│
1 │ Decimal
│
│ TINYTEXT
│
1 │ String
│
│ TEXT
│
1 │ String
│
│ TINYBLOB
│
1 │ String
│
│ VARCHAR2
│
1 │ String
│
│ DOUBLE PRECISION
│
1 │ Float64
│
│ CHARACTER LARGE OBJECT
│
1 │ String
│
│ LONGTEXT
│
1 │ String
│
│ NVARCHAR
│
1 │ String
│
│ INT1 UNSIGNED
│
1 │ UInt8
│
│ VARCHAR
│
1 │ String
│
│ INT
│
1 │ Int32
│
│ SINGLE
│
1 │ Float32
│
│ BYTEA
│
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
│
│ LONGBLOB
│
1 │ String
│
│ DEC
│
1 │ Decimal
│
│ TINYINT UNSIGNED
│
1 │ UInt8
│
│ INTEGER UNSIGNED
│
1 │ UInt32
│
│ INT UNSIGNED
│
1 │ UInt32
│
│ BLOB
│
1 │ String
│
│ REAL
│
1 │ Float32
│
│ BOOL
│
1 │ Int8
│
│ SMALLINT
│
1 │ Int16
│
│ INTEGER SIGNED
│
1 │ Int32
│
│ NCHAR VARYING
│
1 │ String
│
│ INT SIGNED
│
1 │ Int32
│
│ BIGINT SIGNED
│
1 │ Int64
│
│ BINARY LARGE OBJECT
│
1 │ String
│
│ SMALLINT SIGNED
│
1 │ Int16
│
│ TINYINT SIGNED
│
1 │ Int8
│
│ INTEGER
│
1 │ Int32
│
│ INT1 SIGNED
│
1 │ Int8
│
│ BIGINT UNSIGNED
│
1 │ UInt64
│
│ FLOAT
│
1 │ Float32
│
│ 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
│
└─────────────────────────────────┴──────────────────┴─────────────┘
107 rows in set. Elapsed: 0.003 sec.
1.Int
Int Ranges (有符号的整型)
- Int8 - [-128 : 127]
- Int16 - [-32768 : 32767]
- Int32 - [-2147483648 : 2147483647]
- Int64 - [-9223372036854775808 : 9223372036854775807]
Uint Ranges (无符号的整型)
- UInt8 - [0 : 255]
- UInt16 - [0 : 65535]
- UInt32 - [0 : 4294967295]
- UInt64 - [0 : 18446744073709551615]
2.float: 浮点数
- Float32 - float
- 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
- 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),110^(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.字符串
- String:变长字符串,字符串可以任意长度的。它可以包含任意的字节集,包含空字节。
- 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.列操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复