ClickHouse常见的引擎和使用

这篇具有很好参考价值的文章主要介绍了ClickHouse常见的引擎和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.日志引擎

日志引擎特点
1.数据存储在磁盘上
2.写入时将数据追加在文件末尾
3.不支持突变操作
4.不支持索引
5.非原子地写入数据
6.引擎不支持 ALTER UPDATE 和 ALTER DELETE 操作

建表语法示例

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = StripeLog

1.1StripeLog

建表语法示例:
CREATE TABLE stripe_log_table
(
    create_date DateTime,
    message_type String,
    message String
)
ENGINE = StripeLog;

插入数据:
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message');
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message');

1.2Log

建表语法示例:

CREATE TABLE log_table
(
    create_date DateTime,
    message_type String,
    message String
)
ENGINE = Log;

1.3TinyLog

建表语法示例:

CREATE TABLE tiny_log_table
(
    create_date DateTime,
    message_type String,
    message String
)
ENGINE = TinyLog;

2.合并引擎

2.1MergeTree(重要引擎)

1.存储的数据按主键排序
2.可以使用分区
3.支持数据副本
4.支持数据采样

2.1.1建表语法

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
    ...
    INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
    INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]

参数详解

ENGINE:引擎名和参数
ENGINE = MergeTree(). MergeTree 引擎没有参数。

ORDER BY:排序键
可以是一组列的元组或任意的表达式。 例如: ORDER BY (CounterID, EventDate) 。
如果没有使用 PRIMARY KEY 显式指定的主键,ClickHouse 会使用排序键作为主键。
如果不需要排序,可以使用 ORDER BY tuple(). 

PARTITION BY:分区键 ,可选项
        大多数情况下,不需要分使用区键。即使需要使用,也不需要使用比月更细粒度的分区键。分区不会加快查询(这与 ORDER BY 表达式不同)。
        永远也别使用过细粒度的分区键。不要使用客户端指定分区标识符或分区字段名称来对数据进行分区(而是将分区字段标识或名称作为 ORDER BY 表达式的第一列来指定分区)。

        要按月分区,可以使用表达式 toYYYYMM(date_column) ,这里的 date_column 是一个 Date 类型的列。分区名的格式会是 "YYYYMM" 。

PRIMARY KEY:如果要 选择与排序键不同的主键,在这里指定,可选项
        默认情况下主键跟排序键(由 ORDER BY 子句指定)相同。 因此,大部分情况下不需要再专门指定一个 PRIMARY KEY 子句。

SAMPLE BY:用于抽样的表达式,可选项
        如果要用抽样表达式,主键中必须包含这个表达式。例如: SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID)) 。

TTL: 指定行存储的持续时间并定义数据片段在硬盘和卷上的移动逻辑的规则列表,可选项
        表达式中必须存在至少一个 Date 或 DateTime 类型的列,比如:
TTL date + INTERVAl 1 DAY

        规则的类型 DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'指定了当满足条件(到达指定时间)时所要执行的动作:移除过期的行,还是将数据片段(如果数据片段中的所有行都满足表达式的话)移动到指定的磁盘(TO DISK 'xxx') 或 卷(TO VOLUME 'xxx')。默认的规则是移除(DELETE)。可以在列表中指定多个规则,但最多只能有一个DELETE的规则。

SETTINGS — 控制 MergeTree 行为的额外参数,可选项:

index_granularity :索引粒度。索引中相邻的『标记』间的数据行数。默认值8192 。参考数据存储。
index_granularity_bytes:索引粒度,以字节为单位,默认值: 10Mb。如果想要仅按数据行数限制索引粒度, 请设置为0(不建议)。
min_index_granularity_bytes:允许的最小数据粒度,默认值:1024b。该选项用于防止误操作,添加了一个非常低索引粒度的表。参考数据存储
enable_mixed_granularity_parts:是否启用通过 index_granularity_bytes 控制索引粒度的大小。在19.11版本之前, 只有 index_granularity 配置能够用于限制索引粒度的大小。当从具有很大的行(几十上百兆字节)的表中查询数据时候,index_granularity_bytes 配置能够提升ClickHouse的性能。如果您的表里有很大的行,可以开启这项配置来提升SELECT 查询的性能。
use_minimalistic_part_header_in_zookeeper:ZooKeeper中数据片段存储方式 。如果use_minimalistic_part_header_in_zookeeper=1 ,ZooKeeper 会存储更少的数据。
min_merge_bytes_to_use_direct_io:使用直接 I/O 来操作磁盘的合并操作时要求的最小数据量。合并数据片段时,ClickHouse 会计算要被合并的所有数据的总存储空间。如果大小超过了 min_merge_bytes_to_use_direct_io 设置的字节数,则 ClickHouse 将使用直接 I/O 接口(O_DIRECT 选项)对磁盘读写。如果设置 min_merge_bytes_to_use_direct_io = 0 ,则会禁用直接 I/O。默认值:10 * 1024 * 1024 * 1024 字节。
merge_with_ttl_timeout: TTL合并频率的最小间隔时间,单位:秒。默认值: 86400 (1 天)。
write_final_mark:是否启用在数据片段尾部写入最终索引标记。默认值: 1(不要关闭)。
merge_max_block_size: 在块中进行合并操作时的最大行数限制。默认值:8192
storage_policy:存储策略。 参见 使用具有多个块的设备进行数据存储.
min_bytes_for_wide_part,min_rows_for_wide_part 在数据片段中可以使用Wide格式进行存储的最小字节数/行数。您可以不设置、只设置一个,或全都设置。参考:数据存储
max_parts_in_total:所有分区中最大块的数量(意义不明)
max_compress_block_size:在数据压缩写入表前,未压缩数据块的最大大小。您可以在全局设置中设置该值(参见max_compress_block_size)。建表时指定该值会覆盖全局设置。
min_compress_block_size:在数据压缩写入表前,未压缩数据块的最小大小。您可以在全局设置中设置该值(参见min_compress_block_size)。建表时指定该值会覆盖全局设置。
max_partitions_to_read:一次查询中可访问的分区最大数。您可以在全局设置中设置该值(参见max_partitions_to_read)。

2.1.2创建表示例

CREATE TABLE index_test
(
    i_id UInt64,
    root_id UInt64,
    parent_id UInt64,
    path String,
    index_id UInt64,
    task_id UInt64,
    cluster_id UInt64,
    host_id UInt64,
    scence_inst_id UInt64,
    code String,
    update_date DateTime,
    v1 String
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(update_date)
PRIMARY KEY (i_id)
ORDER BY (i_id,index_id,update_date)
SETTINGS index_granularity = 8192;

注意:主键必须是 order by 字段的前缀字段,和索引生成依据有关

2.1.3二级索引创建

CREATE TABLE index_test
(
    i_id UInt64,
    root_id UInt64,
    parent_id UInt64,
    path String,
    index_id UInt64,
    task_id UInt64,
    cluster_id UInt64,
    host_id UInt64,
    scence_inst_id UInt64,
    code String,
    update_date DateTime,
    v1 String,
    INDEX idx_update_date update_date TYPE minmax GRANULARITY 3,
    INDEX idx_index_id index_id TYPE minmax GRANULARITY 3    

)
ENGINE = MergeTree()

PARTITION BY toYYYYMMDD(update_date)
PRIMARY KEY (i_id)
ORDER BY (i_id,index_id,update_date)
SETTINGS index_granularity = 8192;

二级索引的种类:minmax,set,ngrambf_v1,tokenbf_v1,不再展开叙述

2.1.4数据TTL设置

2.1.4.1列级别TTL

列级设置TTl示例:
CREATE TABLE index_test
(
    i_id UInt64,
    root_id UInt64,
    parent_id UInt64,
    path String,
    index_id UInt64,
    task_id UInt64,
    cluster_id UInt64,
    host_id UInt64,
    scence_inst_id UInt64,
    code String,
    update_date DateTime,
    v1 String TTL update_date + INTERVAL 1 DAY,
    INDEX idx_update_date update_date TYPE minmax GRANULARITY 3,
    INDEX idx_index_id index_id TYPE minmax GRANULARITY 3    
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(update_date)
PRIMARY KEY (i_id)
ORDER BY (i_id,index_id,update_date)
SETTINGS index_granularity = 8192;

或者用函数设置:  v1 String TTL update_date + toIntervalDay(1)

添加或者修改表字段的TTL设置:
ALTER TABLE index_test MODIFY COLUMN v1 String TTL update_date + toIntervalDay(10);

2.1.4.2表级别TTL

表级设置TTL示例:
CREATE TABLE index_test
(
    i_id UInt64,
    root_id UInt64,
    parent_id UInt64,
    path String,
    index_id UInt64,
    task_id UInt64,
    cluster_id UInt64,
    host_id UInt64,
    scence_inst_id UInt64,
    code String,
    update_date DateTime,
    v1 String,
    INDEX idx_update_date update_date TYPE minmax GRANULARITY 3,
    INDEX idx_index_id index_id TYPE minmax GRANULARITY 3    
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(update_date)
PRIMARY KEY (i_id)
ORDER BY (i_id,index_id,update_date)
TTL update_date + toIntervalDay(15)
SETTINGS index_granularity = 8192;

添加或者修改表级别的TTL设置:
ALTER TABLE index_test MODIFY TTL update_date + toIntervalMonth(1);

2.1.4.3手动合并TTL表数据

由于主设置的TTL不会马上进行失效,需要手动合并可以使用如下语句:

OPTIMIZE TABLE index_test FINAL;

2.2Memory(内存引擎)

内存引擎查询速度快速,断电丢失数据,一般适用临时表或者高性能测试用

2.2.1创建临时表使用示例

CREATE  TABLE temp_autorun_t_index
ENGINE=Memory
AS 
SELECT path,code,v1 FROM autorun_t_index limit 10;
文章来源地址https://www.toymoban.com/news/detail-643976.html

到了这里,关于ClickHouse常见的引擎和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ClickHouse10-ClickHouse中Kafka表引擎

    Kafka表引擎也是一种常见的表引擎,在很多大数据量的场景下,会从源通过Kafka将数据输送到ClickHouse,Kafka作为输送的方式,ClickHouse作为存储引擎与查询引擎,大数据量的数据可以得到快速的、高压缩的存储。 Kafka大家肯定不陌生: 它可以用于发布和订阅数据流,是常见的队

    2024年04月25日
    浏览(34)
  • ClickHouse(16)ClickHouse日志引擎Log详细解析

    这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。 这系列的引擎有: StripeLog Log TinyLog 引擎: 数据存储在磁盘上。 写入时将数据追加在文件末尾。 不支持突变操作,也就是更新。 不支持索引。 非原子地写入数据。 Log 和 StripeLog 引擎支持: 并发

    2024年02月05日
    浏览(31)
  • ClickHouse(24)ClickHouse集成mongodb表引擎详细解析

    目录 MongoDB 创建一张表 用法示例 资料分享 系列文章 clickhouse系列文章 MongoDB 引擎是只读表引擎,允许从远程 MongoDB 集合中读取数据( SELECT 查询)。引擎只支持非嵌套的数据类型。不支持 INSERT 查询。 引擎参数 host:port — MongoDB 服务器地址. database — 数据库名称. collection — 集合

    2024年02月19日
    浏览(31)
  • ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

    目录 JDBC 建表 用法示例 JDBC表函数 资料分享 系列文章 clickhouse系列文章 允许CH通过JDBC连接到外部数据库。 要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。 该引擎支持Nullable数据类型。 引擎参数 datasource_uri — 外部DBMS的URI或名字. URI格式: jdbc:driver_name:

    2024年02月05日
    浏览(31)
  • ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析

    目录 PostgreSQL 创建一张表 实施细节 用法示例 资料分享 系列文章 clickhouse系列文章 PostgreSQL 引擎允许 ClickHouse 对存储在远程 PostgreSQL 服务器上的数据执行 SELECT 和 INSERT 查询. 表结构可以与 PostgreSQL 源表结构不同: 列名应与 PostgreSQL 源表中的列名相同,但您可以按任何顺序使用

    2024年02月03日
    浏览(32)
  • ClickHouse(18)ClickHouse集成ODBC表引擎详细解析

    目录 创建表 用法示例 资料分享 系列文章 clickhouse系列文章 ODBC集成表引擎使得ClickHouse可以通过ODBC方式连接到外部数据库. 为了安全地实现 ODBC 连接,ClickHouse 使用了一个独立程序 clickhouse-odbc-bridge . 如果ODBC驱动程序是直接从 clickhouse-server 中加载的,那么驱动问题可能会导致

    2024年02月04日
    浏览(31)
  • ClickHouse(21)ClickHouse集成Kafka表引擎详细解析

    目录 Kafka表集成引擎 配置 Kerberos 支持 虚拟列 资料分享 系列文章 clickhouse系列文章 此引擎与Apache Kafka结合使用。 Kafka 特性: 发布或者订阅数据流。 容错存储机制。 处理流数据。 老版Kafka集成表引擎参数格式: 新版Kafka集成表引擎参数格式: 必要参数: kafka_broker_list – 以

    2024年02月02日
    浏览(31)
  • ClickHouse(23)ClickHouse集成Mysql表引擎详细解析

    MySQL引擎可以对存在远程MySQL服务器上的数据执行 SELECT 查询。 调用格式: 调用参数 host:port — MySQL 服务器地址。 database — 数据库的名称。 table — 表名称。 user — 数据库用户。 password — 用户密码。 replace_query — 将 INSERT INTO 查询是否替换为 REPLACE INTO 的标志。如果 replace

    2024年02月19日
    浏览(26)
  • ClickHouse(19)ClickHouse集成Hive表引擎详细解析

    目录 Hive集成表引擎 创建表 使用示例 如何使用HDFS文件系统的本地缓存 查询 ORC 输入格式的Hive 表 在 Hive 中建表 在 ClickHouse 中建表 查询 Parquest 输入格式的Hive 表 在 Hive 中建表 在 ClickHouse 中建表 查询文本输入格式的Hive表 在Hive 中建表 在 ClickHouse 中建表 资料分享 系列文章

    2024年02月04日
    浏览(35)
  • ClickHouse(十三):Clickhouse MergeTree系列表引擎 - ReplicingMergeTree

      进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情! 👍点赞:赞同优秀创作

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包