网站首页 > 博客文章 正文
Clickhouse是什么?
注意:严格却分大小写
是俄罗斯的yandex于2016年开源的列式存储数据库(DBMS),主要用于在线分析初六查询(OLAP),能够使用sql查询实时生成分析数据报告
列式和行式的存储区别?
?行式存储
?列式存储
–
–
数据类型:
?整型:
–固定长度的整型,包括有符号整型或无符号整型
–整型范围(-2n-~2n-1-1)
?Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-9223372036854775808 : 9223372036854775807] 无符号整型范围(0~2n-1):UInt8 - [0 : 255] UInt16 - [0 : 65535] UInt32 - [0 : 4294967295] UInt64 - [0 : 18446744073709551615]
?浮点型
–Float32--float
–Float64--double
–建议以整数行式存储,浮点型计算有可能引起误差
–:) select 1-0.9
┌───────minus(1, 0.9)─┐
│ 0.09999999999999998 │
└─────────────────────┘
clickhouse支持的类别的浮点数
?inf-正负穷
?:) select 1/0
┌─divide(1, 0)─┐
│ inf │
└──────────────┘
–-inf-负无穷
?:) select -1/0
┌─divide(1, 0)─┐
│ -inf │
└──────────────┘
–NaN-非数子
?:) select 0/0
┌─divide(0, 0)─┐
│ nan │
└──────────────┘
?布尔型
–没有单独的类型存储布尔型,可以用Uint8类型,取值限制为0or1.
?字符串
–string
?字符串可以任意长度,包含任意的字节集,含空字节
–FixedString(N)
?固定长度n的字符串
?n必须是严格的正自热数
?当服务端读取长度小于n的字符串时候,通过字符串末尾添加空字节来达到 N 字节长度。
?当服务端读取长度大于 N 的字符串时候,将返回错误消息。
–建议使用String,FicedString使用不方便
?枚举类型
–包括 Enum8 和 Enum16 类型。
–Enum 保存 'string'= integer 的对应关系。
–Enum8 用 'String'= Int8 对描述。
–Enum16 用 'String'= Int16 对描述。
–例子:
?创建一个带有一个枚举Enum8('hello')=1,'word'=2)类型的列:
–CREATE TABLE t_enum
(
x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog
–x列只可以存储类型定义的列出的值:hello'或'world'。如果尝试保存任何其他值,ClickHouse 抛出异常。
?:) INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
INSERT INTO t_enum VALUES
Ok.
3 rows in set. Elapsed: 0.002 sec.
:) insert into t_enum values('a')
INSERT INTO t_enum VALUES
Exception on client:
Code: 49. DB::Exception: Unknown element 'a' for type Enum8('hello' = 1, 'world' = 2)
–从表中查询数据时,ClickHouse 从 Enum 中输出字符串值。
?SELECT * FROM t_enum
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘
–如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型。
?SELECT CAST(x, 'Int8') FROM t_enum
//使用cast看x的类型是什么,因为没有布尔值,之前设置的时候Enum8(可以设置任何 'string'= integer 的对应关系)
┌─CAST(x, 'Int8')─┐
│ 1 │
│ 2 │
│ 1 │
└─────────────────┘
?数组
–Array(T):由 T 类型元素组成的数组。T 可以是任意类型,包含数组类型。但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。例如,不能在 MergeTree 表中存储多维数组。可以使用array函数来创建数组:
?array(T)//值为单一,不能混的类型
也可以包含中括号
[]
?
–创建数组案例
?:) SELECT array(1, 2) AS x, toTypeName(x)
SELECT
[1, 2] AS x,
toTypeName(x)//创建一个数组名为x,值为1,2
┌─x─────┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8) │
└───────┴─────────────────────────┘
1 rows in set. Elapsed: 0.002 sec.
:) SELECT [1, 2] AS x, toTypeName(x)
SELECT
[1, 2] AS x,
toTypeName(x)
┌─x─────┬─toTypeName([1, 2])─┐
│ [1,2] │ Array(UInt8) │
└───────┴────────────────────┘
1 rows in set. Elapsed: 0.002 sec.
?元组
–Tuple(T1, T2, ...):元组,其中每个元素都有单独的类型。
–例子:
?:) SELECT tuple(1,'a') AS x, toTypeName(x)
SELECT
(1, 'a') AS x,
toTypeName(x)
//元组是可以类型混的
┌─x───────┬─toTypeName(tuple(1, 'a'))─┐
│ (1,'a') │ Tuple(UInt8, String) │
└─────────┴───────────────────────────┘
1 rows in set. Elapsed: 0.021 sec.
?Date
–ri日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。
–https://clickhouse.yandex/docs/zh/data_types/------官网
引擎:
表格引擎:
?数据的存储方式和位置,写入位置和读取位置
?如何支持哪些查询
?并发数据访问
?如果存在使用索引
?是否可以执行多线程请求。
?数据复制参数
引擎种类
?TinyLog
–最简单的引擎
–用于将数据存储在磁盘上
–不支持索引
–没有并发控控制(同时:读/写,读写)
–每列都存储在单独的压缩文件中
–小表多时候的可以用
–把数据放到表里,以后的增删改不做操作,只查询
?若同时从表中读取和写入数据,则读取操作将抛异常
?若同时写入多个查询中的表,则数据将被破坏
–这种表引擎的典型用法是 write-once:首先只写入一次数据,然后根据需要多次读取。此引擎适用于相对较小的表(建议最多1,000,000行)。如果有许多小表,则使用此表引擎是适合的,因为它比需要打开的文件更少。当拥有大量小表时,可能会导致性能低下。不支持索引。
–例子:
?:)create table t (a UInt16, b String) ENGINE=TinyLog;
:)insert into t (a, b) values (1, 'abc');
–此时我们保存数据的目录/var/lib/clickhouse/data/default/t可以看到如下
?[root@hadoop102 t]# ls
a.bin b.bin sizes.json
–a.bin金额和b.bin时压缩过的对应的列的数据,sizes.json中记录了每个*.bin文件的大小
?[root@hadoop102 t]# cat sizes.json
{"yandex":{"a%2Ebin":{"size":"28"},"b%2Ebin":{"size":"30"}}}
?Memory
–内存引擎,数据以未压缩的原始行式直接存储在内存中服务器重启数据就没了
–读写操作不会相会阻塞
–不支持索引
–简单查询非常高的性能表现(超10G/s)
–用它的地方不多,除了测试
–适用场景:要求高性能,数据流不大的情况下
?Merge
–merge引擎本身不存储数据,但是可用于同时从任意多个其他表中读取数据
–涉及到参数,合并在那里
–读时自动并行,不支持写入
–读取,那些被真正读取到数据的表的索引会被使用
–merge引擎的参数:一个数据库名+一个用于匹配表名的正则表达式
–例子:
?:)create table t1 (id UInt16, name String) ENGINE=TinyLog;
:)create table t2 (id UInt16, name String) ENGINE=TinyLog;
:)create table t3 (id UInt16, name String) ENGINE=TinyLog;
:)insert into t1(id, name) values (1, 'first');
:)insert into t2(id, name) values (2, 'second');
:)insert into t3(id, name) values (3, 'i am in t3');
:)create table t (id UInt16, name String) ENGINE=Merge(currentDatabase(), '^t');
//currentDatabase是当前数据库,所有以t开头的
:) select * from t;
┌─id─┬─name─┐
│ 2 │ second │
└────┴──────┘
┌─id─┬─name──┐
│ 1 │ first │
└────┴───────┘
┌─id─┬─name───────┐
│ 3 │ i am in t3 │
└────┴────────────┘
?mergeTree(重点)
–是MergeTree系列中引擎最强大的表引擎
–该mergeTree系列的引擎是将大量数据插入表中,数据快速的逐个部分写入表中,应用规则在后台合并(按照分区和主键)部分合并
–这种方法比插入期间连续重写存储中的数据效率更高
–特点:
?存储按主键排序的数据
?若指定了分区键,就可以使用分区
–支持某些分区操作比对相同数据,相同结果的常规操作更有效
–自动切断在查询中指定了分区键的分区数据,提高查询性能
?数据支持复制
–ReplicatedMergeTree表提供数据复制
?数据采样支持
–如有必要,可以在表中设置数据采样方法
–格式:
?CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
[PARTITION BY expr] //只能按照日期分区
[ORDER BY expr] //可以一个或多个字段排序
[PRIMARY KEY expr] //默认和order by的排序一样的主键,若指定主键,就和order by排序的不同
[SAMPLE BY expr] //可以不写,若是写,主键必须包含这些表达式
[SETTINGS name=value, ...] //设置额外性能
–engine:
?引擎名和参数,engine=mergeTree().MergeTree引擎没有参数
–partition by---分区键
?只能按月分区:toyyyymm(date_column)
?旧版本:只能写到201907/08,无法写日期
?新版本:可以写到日,调用自己的函数
–order by ---表的排序键
?可以是一组列的元祖或任意的表达式
?order by(CounterID,EventDate)
–primary key -------主键,可以和排序键不同
?默认情况下和order by相同
?大部分情况下不需要指定设置primary key
–sample by--------用于抽样
?用到抽样,主键必须包含
?sample by intHash32(userID) order by (CounterID,EventDate,intHash32(UserID))
–settings---影响mergeTree性能的额外参数
?index_granularity---索引粒度,就是索引中相邻[标记]间的数据行数
–默认是:8192
–就是支持索引,每个索引有多少行
?indexgranularitybytes----索引粒度,以字节为单位
–默认值:10Mb
–若仅按数据行数限制索引粒度,设置为0(不建议)
?enablemixedgranularityparts-----启用或禁用通过indexgranularity_bytes控制索引粒度的大小
–通过这个配置可以提升select查询性能
?useminimalisticpartheaderin_zookeeper-----数据片段头在Zookeeper中的存储方式
–useminimalisticpartheaderin_zookeeper=1,zookeeper会存储更少的数据
–控制在zookeeper的存储的方式
–设置1就支持元数据了
?minmergebytestousedirectio---使用直接I/O来操作磁盘的合并操作要求的最小数据量
–默认10G
–合并数据片段,clickHouse计算要被合并的所有数据的总存储空间
–设置minmergebytestousedirectio的字节数,clickHouse将使用直接I/O接口对磁盘读写
–设置Minmergebytestousedirectio=0就会禁用直接I/O,默认值:1010241024*1024字节
–超过这个参数,linux会直接调取直接I/O
–Lunix的I/O方式;
?直接I/O
–没有缓存,直接放到磁盘,数据量小,反而没有缓存I/o块
–数据量特别大,可以适用
?缓存I/O(默认)
–涉及到缓存,数据——>缓存--》磁盘,数据还是很快
?mergewithttl_timeout:------TTL合并频率的最小间隔时间,默认值:86400(1天)
?writefinalmark---启用或禁用在数据片尾写入最终索引标记,默认值:1(不建议更改)
?storage_policy-----存储策略
?optimzize table mt_table;------有可能会刷新出现问题
?举例:
–
ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity=8192
?*.bin时按列保存数据的文件
?*。mrk保存块偏移量
?primary.idx保存主键索引
?进入路径:cd /var/lib/clickhouse
?
?
–checksums.txt----对应的列,类型
?
?
–count.txt---文件总数--1
?
?
–date.bin/id.bin/name.bin----都是路径
–date.mrk------每列数据的偏移量
–minman_date----存入最小/大的时间
–partition.dat-----分区信息
–partmary.idx------主键
?ReplacingMergeTree
–这个引擎是在 MergeTree 的基础上,添加了“处理重复数据”的功能
–该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项
–数据的去重只会在合并的过程中出现。合并会在未知的时间在后台进行,所以你无法预先作出计划。
–有一些数据可能仍未被处理。
?因此,ReplacingMergeTree 适用于在后台清除重复的数据以节省空间,
?但是它不保证没有重复的数据出现。
–格式:
?ENGINE=ReplacingMergeTree([ver]) ver:版本列,类型为Uint*,Date或DateTime
[PARIRION BY expr] 合并的式,ReplacingMergetree从所有具有相同主键的行中选择一行留下,若ver列未指定,选择最后一条,ver制定了选择ver值最大的版本
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value,....]
–比MergeTree只多了一个ver,这个ver指代版本列,他和时间一起配置,区分哪条数据是最新的。
–例子;
?create table rmt_table (date Date, id UInt8, name String,point UInt8)//pont就是ver
ENGINE= ReplacingMergeTree(pont) //选择point版本列,由这个决定谁留
partition by date
order by (id,name)
插入一些数据:
insert into rmt_table values ('2019-07-10', 1, 'a', 20);
insert into rmt_table values ('2019-07-10', 1, 'a', 30);
insert into rmt_table values ('2019-07-11', 1, 'a', 20);
insert into rmt_table values ('2019-07-11', 1, 'a', 30);
insert into rmt_table values ('2019-07-11', 1, 'a', 10);
等待一段时间或optimize table rmt_table手动触发merge,后查询
:) select * from rmt_table;
┌───────date─┬─id─┬─name─┬─point─┐
│ 2019-07-11 │ 1 │ a │ 30 │
└────────────┴────┴──────┴───────┘
?SummingMergeTree
–继承自 MergeTree
–区别在于,当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值
–如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度,对于不可加的列,会取一个最先出现的值。
–不可加的列
?会取最先出现的列
–格式
?ENGINE [=] SummingMergeTree( [columns])
[PARIRION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value,....]
–columns包含将要被汇总的列的列名的元组
–例子:
?create table smt_table (date Date, name String, a UInt16, b UInt16) ENGINE=SummingMergeTree(sum)
partiton by date
order by (date,name)//主键式相同时间相同的名字
插入数据:
insert into smt_table (date, name, a, b) values ('2019-07-10', 'a', 1, 2);
insert into smt_table (date, name, a, b) values ('2019-07-10', 'b', 2, 1);
insert into smt_table (date, name, a, b) values ('2019-07-11', 'b', 3, 8);
insert into smt_table (date, name, a, b) values ('2019-07-11', 'b', 3, 8);
insert into smt_table (date, name, a, b) values ('2019-07-11', 'a', 3, 1);
insert into smt_table (date, name, a, b) values ('2019-07-12', 'c', 1, 3);
等待一段时间或optimize table smt_table手动触发merge,后查询
:) select * from smt_table
┌───────date─┬─name─┬─a─┬─b─┐
│ 2019-07-10 │ a │ 1 │ 2 │
│ 2019-07-10 │ b │ 2 │ 1 │
│ 2019-07-11 │ a │ 3 │ 1 │
│ 2019-07-11 │ b │ 6 │ 8 │
│ 2019-07-12 │ c │ 1 │ 3 │
└────────────┴──────┴───┴───┘
–发现2019-07-11,b的a列合并相加了,b列取了8(因为b列为8的数据最先插入)。
–按时间,在按最少的数据,相加的
?Distributed
–分布式引擎,本身不存储数据, 但可以在多个服务器上进行分布式查询。
–和merge的不同是,其他集群的数据,merge是其他的表
–读是自动并行的。读取时,远程服务器表的索引(如果有的话)会被使用。
–格式:
?Distributed(cluster_name, database, table [, sharding_key])
–参数
?clustername - 服务器配置文件中的集群名(在vim /etc/metrika.xml)在/etc/metrika.xml中配置的 database – 数据库名 table – 表名 shardingkey – 数据分片键---在/etc/metrika.xml中配置的---一般不用
–插入的时候可以按照分片键,插入
?例子;
–
–
数据库引擎
?Mysql
?将远程的Mysql服务器中的表映射到ClickHouse中
?允许到表进行insert和select
?ClickHouse和Mysql之间进行数据交换
?此引擎会对查询的结果转换到mysql语法并发送到mysql服务器中
?支持操作show tables和show CREATE TABLE'
?不支持操作
–RENAME
–CREATE TABLE
–ALTER
?举例:create database
–CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
–引擎参数
?host:port — 链接的MySQL地址。
?database — 链接的MySQL数据库。
?user — 链接的MySQL用户。
?password — 链接的MySQL用户密码
?可支持的参数
–
–
–快速使用案例
?mysql中创建表
–mysql> USE test;
Database changed
mysql> CREATE TABLE `mysql_table` (
-> `int_id` INT NOT NULL AUTO_INCREMENT,
-> `float` FLOAT NOT NULL,
-> PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)
mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)
mysql> select * from mysql_table;
+--------+-------+
| int_id | value |
+--------+-------+
| 1 | 2 |
+--------+-------+
1 row in set (0,00 sec)
?在ClickHouse创建mysql类型的数据库,与mysql服务器交换
?CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SHOW DATABASES
┌─name─────┐
│ default │
│ mysql_db │
│ system │
└──────────┘
SHOW TABLES FROM mysql_db
┌─name─────────┐
│ mysql_table │
└──────────────┘
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│ 1 │ 2 │
└────────┴───────┘
INSERT INTO mysql_db.mysql_table VALUES (3,4)
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│ 1 │ 2 │
│ 3 │ 4 │
└────────┴───────┘
–数据库引擎
?可以使用自己的数据库引擎,可以配置可配置的表引擎,和所有支持的sql语法
?数据库引擎:MySQL
Sql语法
?create
–create database
–用于创建指定名称的数据库。语法如下:
CREATE DATABASE [IF NOT EXISTS] db_name
?若查询中存在if not exists,则当数据库已经存在时,该查询不会返回任何错误
?:) create database test;
Ok.
0 rows in set. Elapsed: 0.018 sec.
?CREATE TABLE
–CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = engine
–DEFAULT expr – 默认值,用法与SQL类似。MATERIALIZED expr – 物化表达式,被该表达式指定的列不能被INSERT,因为它总是被计算出来的。对于INSERT而言,不需要考虑这些列。另外,在SELECT查询中如果包含星号,此列不会被查询。ALIAS expr – 别名
–3种方式创建;
?直接
–:) create table t1(id UInt16,name String) engine=TinyLog
?创建一个与其他表具有相同结构的表
–CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
–对其指定不同的表引擎声明。如果没有表引擎声明,则创建的表将与db2.name2使用相同的表引擎。
?:) create table t2 as t1 engine=Memory
:) desc t2
DESCRIBE TABLE t2
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ id │ UInt16 │ │ │
│ name │ String │ │ │
└──────┴────────┴──────────────┴────────────────────┘
?使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。
–CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
- 例子;
- ```
先在t2中插入几条数据
:) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')
:) create table t3 engine=TinyLog as select * from t1
:) select * from t3
┌─id─┬─name─────┐
│ 1 │ zhangsan │
│ 2 │ lisi │
│ 3 │ wangwu │
└────┴──────────┘
```
?insert into
–主要用于向表中添加数据,基本格式如下
?INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
–实例
?:) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')
–使用select来写入数据
?INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
–实例;
?:) insert into t2 select * from t3
:) select * from t2
┌─id─┬─name─────┐
│ 1 │ zhangsan │
│ 2 │ lisi │
│ 3 │ wangwu │
└────┴──────────┘
–ClickHouse不支持的修改数据的查询:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。
?ALTER
?ALTER只支持MergeTree系列,Merge和Distributed引擎的表,基本语法:
–ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
?参数解析:ADD COLUMN – 向表中添加新列 DROP COLUMN – 在表中删除列 MODIFY COLUMN – 更改列的类型
?例子:
–create table mt_table (date Date, id UInt8, name String) ENGINE=MergeTree(date, (id, name), 8192);
–插入一些值
?insert into mt_table values ('2019-05-01', 1, 'zhangsan');
insert into mt_table values ('2019-06-01', 2, 'lisi');
insert into mt_table values ('2019-05-03', 3, 'wangwu');
–末尾添加一个新列age
?:)alter table mt_table add column age UInt8
:)desc mt_table
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date │ │ │
│ id │ UInt8 │ │ │
│ name │ String │ │ │
│ age │ UInt8 │ │ │
└──────┴────────┴──────────────┴────────────────────┘
:) select * from mt_table
┌───────date─┬─id─┬─name─┬─age─┐
│ 2019-06-01 │ 2 │ lisi │ 0 │
└────────────┴────┴──────┴─────┘
┌───────date─┬─id─┬─name─────┬─age─┐
│ 2019-05-01 │ 1 │ zhangsan │ 0 │
│ 2019-05-03 │ 3 │ wangwu │ 0 │
└────────────┴────┴──────────┴─────┘
–更改age列的类型
?:)alter table mt_table modify column age UInt16
:)desc mt_table
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date │ │ │
│ id │ UInt8 │ │ │
│ name │ String │ │ │
│ age │ UInt16 │ │ │
└──────┴────────┴──────────────┴────────────────────┘
–删除刚才创建的age列
?:)alter table mt_table drop column age
:)desc mt_table
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date │ │ │
│ id │ UInt8 │ │ │
│ name │ String │ │ │
└──────┴────────┴──────────────┴────────────────────┘
?DESCRIBE TABLE
–查看表结构
?:)desc mt_table
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date │ │ │
│ id │ UInt8 │ │ │
│ name │ String │ │ │
└──────┴────────┴──────────────┴────────────────────┘
?CHECK TABLE
–检查表中的数据是否损坏,他会返回两种结果:0 – 数据已损坏 1 – 数据完整 该命令只支持Log,TinyLog和StripeLog引擎。
?物化视图
–whit xxx视图名 as select 所需结果集from 表 xxx视图名 as(这就是多个物化视图)格式
–也是列
–不能select *出来
–不能insert的进去
HDFS的CSV文件
?csv也逗号分割的数据
?
?
–表在hdfs上
?hdfs导出到clickhouse的
–
–
–表在clickhouse上
猜你喜欢
- 2024-10-17 Uber如何使用ClickHouse建立日志分析平台?
- 2024-10-17 ClickHouse内核分析-MergeTree的存储结构和查询加速
- 2024-10-17 clickhouse ----入门(clickhouse-server)
- 2024-10-17 ClickHouse 查询优化(clickhouse join优化)
- 2024-10-17 使用Canal实现ClickHouse实时同步MySQL数据
- 2024-10-17 性能提高15倍!只是把MySQL换成了ClickHouse
- 2024-10-17 大数据ClickHouse进阶(十八):数据字典类型
- 2024-10-17 Clickhouse单机部署(clickhouse django)
- 2024-10-17 Clickhouse系列-第二节-基本原理(clickhouse ui)
- 2024-10-17 clickhouse 索引(clickhouse索引失效)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)