1、数据类型
1.1 整数类型:
ClickHouse中整型数据均为固定长度(可以设置长度参数,但是会被忽略),整型包括有符号整型和无符号整型。
有符号整型:Int8,Int16,Int32,Int64,Int128,Int256
无符号整型:UInt8,UInt16,UInt32,UInt64,UInt128,UInt256
1.2 字符串类型:
1.3 固定字符串:
当数据长度刚好是N时,FixedString类型比较高效,其他情况下效率会降低。
注意:插入数据时,如果字符串长度小于N,则会对字符串尾部用空子节填充;如果长度大于N,会抛出Too large value for FixedString(N)异常。
1.4 标识符类型:
UUID
1.5 日期/时间类型:
Date32
1.6 ip4/6地址
IPv4
IPv6
tips:IPv4是与UInt32类型保持兼容的类型,用于保存IPv4地址的值;而IPv6是与FixedString(16)兼容的类型,用于保存IPv6地址的值。
1.7 浮点数
Float32
Float64
1.8 定点数:
有符号定点数,在运算过程中保持精度。其中参数P表示精度,有效范围[1~38],决定有多少个十进制数字;参数S表示规模,有小范围[0~P],决定小数位的位数。
部分资料中定点数有Decimal32,Decimal64,Decimal128类型,其实是不同P参数的表示:
P取值[10~18],对应Decimal64(S);
P取值[19~38],对应Decimal128(S);
1.9 枚举类型:
Enum8
Enum16
ClickHouse中Enum类型用来保存String=Integer的映射关系,其中Enum8是String=Int8的描述,Enum16是String=Int16的描述。
1.10 数组类型:
Array(T)
由T类型组成的数组,T可以是任意类型,包含数组类型(但是不推荐,ClickHouse对多维数组的支持有限)。
1.11 键值对:
用来保存k–v键值对类型的数据。其中参数key类型支持String/FixedString/Integer,参数value支持String/FixedString/Array/Integer。
1.12 空类型:
空类型,ClickHouse允许用NULL表示缺省值,如Nullable(Int8)可以保存Int8类型的值,没有值的行会存储为NULL。
CREATE TABLE ALL_COLUMN_TYPE_Table
(
col1_Int8 Int8 COMMENT '字段Int8',
col2_Int16 Int16 COMMENT '字段Int16',
col3_Int32 Int32 COMMENT '字段Int32',
col4_Int64 Int64 COMMENT '字段Int128',
col5_Int128 Int128 COMMENT '字段UInt8',
col6_UInt8 UInt8 COMMENT '字段UInt8',
col7_UInt16 UInt16 COMMENT '字段UInt16',
col8_UInt32 UInt32 COMMENT '字段UInt32',
col9_UInt64 UInt64 COMMENT '字段UInt64',
col10_UInt128 UInt128 COMMENT '字段UInt128',
col11_UUID UUID COMMENT '字段UUID',
col12_Date32 Date32 COMMENT '字段Date32',
col13_DateTime64 DateTime64 COMMENT '字段DateTime64',
col14_Float32 Float32 COMMENT '字段Float32',
col15_Float64 Float64 COMMENT '字段Float64',
col16_String String COMMENT '字段String',
col17_Enum8 Enum8('a'=2,'b'=3) COMMENT '字段Enum8',
col18_Enum16 Enum16('男'=1,'女'=2) COMMENT '字段Enum16',
col19_FixedString FixedString(12) COMMENT '字段FixedString',
col20_Decimal Decimal(16,12) COMMENT '字段Int8',
col21_IPv4 IPv4 COMMENT '字段IPv4',
col22_IPv6 IPv6 COMMENT '字段IPv6',
col23_Map Map(String, Int8) COMMENT '字段Map',
col24_Array Array(IPv4) COMMENT '字段数组'
)
ENGINE = MergeTree
ORDER BY col1_Int8
PARTITION BY col24_Array
Tips:
(2)ClickHouse关键字部分大小写敏感,建议sql全部用大写,避免迷の错误。
(3)Array(T),T支持所有类型。
(4)不同引擎支持的建表参数有区别,如Log家族不支持索引和分区,具体参见4.2引擎说明。
(5)如果CREATE TABLE没有指定Schema,那么会建在default数据库中(If you do not specify the database name, the table will be in the default
database.)。
(6)ClickHouse主键和排序键。官网对主键的说明如下:
primary keys in ClickHouse are not unique for each row in a table
The primary key of a ClickHouse table determines how the data is sorted
when written to disk. Every 8,192 rows or 10MB of data (referred to
as the index granularity) creates an entry in the primary key index file.
This granularity concept creates a sparse index that can easily fit in
memory, and the granules represent a stripe of the smallest amount of
column data that gets processed during SELECT queries.
The primary key can be defined using the PRIMARY KEY parameter. If you
define a table without a PRIMARY KEY specified, then the key becomes the
tuple specified in the ORDER BY clause. If you specify both a PRIMARY KEY
and an ORDER BY, the primary key must be a subset of the sort order.
The primary key is also the sorting key......
主键不唯一;主键用作写入排序;未定义主键会使用排序键排序,如果同时定义了主键和排序键,主键必须是排序键的子集。
2、常用sql语法
这部分资料搬运自官网中文文档,建议直接访问官网:SQL语法 | ClickHouse Docs
2.1 SELECT
2.2 ALTER
表修改,ALTER操作只支持MergeTree家族引擎表。语法结构:
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...
2.3 SHOW
#table
SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMAT format]
#database
SHOW DATABASES [INTO OUTFILE filename] [FORMAT format]
#processlist
SHOW PROCESSLIST [INTO OUTFILE filename] [FORMAT format]
2.4 DESCRIBE
DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
2.5 DROP
#table
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
#dictionary
DROP DICTIONARY [IF EXISTS] [db.]name
#user
DROP USER [IF EXISTS] name [,...] [ON CLUSTER cluster_name]
2.6 CREATE
#table
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr1] [compression_codec] [TTL expr1] [COMMENT 'comment for column'],
name2 [type2] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr2] [compression_codec] [TTL expr2] [COMMENT 'comment for column'],
...
) ENGINE = engine
COMMENT 'comment for table'
#database
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
#view
CREATE [OR REPLACE] VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster_name] AS SELECT ...
2.7 INSERT
INSERT INTO [TABLE] [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
tips:ClickHouse有2类解析器:完整SQL解析器和数据格式解析器,除了INSERT查询,其他情况下使用完整SQL解析器。可以通过设置input_format_values_interpret_expressions参数,当其值为1时,ClickHouse优先使用数据格式解析器(快速流式解析器),如果失败,ClickHouse会在尝试使用完整SQL解析器。
3、建表参数
3.1 分区
MergeTree家族可以使用分区键。设置分区的表会通过指定的规则划分为逻辑数据库,为减少操作,分区是分开存储的,访问数据时候ClickHouse尽量使用分区的最小子集。
PARTITION BY (toMonday(StartDate), EventType)
SELECT
partition,
name,
active
FROM system.parts
WHERE table = 'ALL_COLUMN_TYPE_Table'
3.2 排序
通过ORDER BY关键字定义排序。
排序键支持多个字段集合,如:
#list,需要括号
ORDER BY (col1_Int8,col4_Int64)
#单个字段
ORDER BY col1_Int8
Tips:部分资料中表示排序键是必填字段,这种论述是错误。正确论述应该是——排序键和主键必须指定至少一个!
You must provide an ORDER BY or PRIMARY KEY expression in the table definition.
CREATE TABLE ALL_COLUMN_TYPE_Table9
(
col1_Int8 Int8 COMMENT '字段Int8',
col2_Int16 Int16 COMMENT '字段Int16',
col3_Int32 Int32 COMMENT '字段Int32',
col4_Int64 Int64 COMMENT '字段Int128',
col5_Int128 Int128 COMMENT '字段UInt8',
col6_UInt8 UInt8 COMMENT '字段UInt8',
col7_UInt16 UInt16 COMMENT '字段UInt16',
col8_UInt32 UInt32 COMMENT '字段UInt32',
col9_UInt64 UInt64 COMMENT '字段UInt64',
col10_UInt128 UInt128 COMMENT '字段UInt128',
col11_UUID UUID COMMENT '字段UUID',
col12_Date32 Date32 COMMENT '字段Date32',
col13_DateTime64 DateTime64 COMMENT '字段DateTime64',
col14_Float32 Float32 COMMENT '字段Float32',
col15_Float64 Float64 COMMENT '字段Float64',
col16_String String COMMENT '字段String',
col17_Enum8 Enum8('a'=2,'b'=3) COMMENT '字段Enum8',
col18_Enum16 Enum16('男'=1,'女'=2) COMMENT '字段Enum16',
col19_FixedString FixedString(12) COMMENT '字段FixedString',
col20_Decimal Decimal(16,12) COMMENT '字段Int8',
col21_IPv4 IPv4 COMMENT '字段IPv4',
col22_IPv6 IPv6 COMMENT '字段IPv6',
col23_Map Map(String, Int8) COMMENT '字段Map',
col24_Array Array(IPv4) COMMENT '字段数组'
)
ENGINE = MergeTree
PRIMARY KEY col3_Int32
3.3 主键
主键支持字段集合,如下:
#list
PRIMARY KEY (col1_Int8,col3_Int32,col5_Int128)
#单个字段
PRIMARY KEY col1_Int8
4、引擎
4.1 数据库引擎:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializeMySQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]
引擎 |
说明 |
MaterializedMySQL |
|
MySQL |
|
Lazy |
|
Atomic |
|
SQLite |
|
PostgreSQL |
4.2 表引擎:
主要有两类,一类是MergeTree家族,一类是Log家族。
引擎家族 |
引擎 |
说明 |
MergeTree |
||
GraphiteMergeTree |
用来对Graphite数据进行瘦身(使用CK保存Graphite数据比较合适) |
|
AggregatingMergeTree |
||
CollapsingMergeTree |
||
MergeTree |
||
ReplacingMergeTree |
||
SummingMergeTree |
||
Log |
Log |
|
TinyLog |
Tips:Log家族引擎不支持索引,建表不支持ORDER BY/PRIMAEY/PARTITION BY
Engine Log doesn't support
PARTITION_BY, PRIMARY_KEY, ORDER_BY or SAMPLE_BY clauses.
原文地址:https://blog.csdn.net/OASsai/article/details/134666314
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_9110.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!