当前位置:   article > 正文

ClickHouse(六)知识点补漏_clickhoue 怎么查看索引在创建

clickhoue 怎么查看索引在创建

1、二级索引

        目前在ClikHouse的官网上二级索引的功能在v20.1.2.4之前是被标注为实验性,在这个版本之后默认是开启的。

        1、老版本使用二级索引前需要增加设置

        是否允许使用实验性的二级索引(v20.1.2.4开始,这个参数已被删除,默认开启)

set allow_experimental_data_skipping_indices=1;

        2、创建测试表

  1. -- 建表,增加二级索引 a
  2. create table t_order_mt2(
  3. id UInt32,
  4. sku_id String,
  5. total_amount Decimal(16,2),
  6. create_time Datetime,
  7. -- 这里的GRANULARITY是设定二级索引对于一级索引粒度的粒度
  8. INDEX a total_amount TYPE minmax GRANULARITY 5
  9. ) engine = MergeTree
  10. partition by toYYYYMMDD(create_time)
  11. primary key(id)
  12. order by(id,sku_id);
  13. -- 写入数据
  14. insert into t_order_mt2 values
  15. (101,'sku_001',1000.00,'2020-06-01 12:00:00'),
  16. (102,'sku_002',2000.00,'2020-06-01 11:00:00'),
  17. (102,'sku_004',2500.00,'2020-06-01 12:00:00'),
  18. (102,'sku_002',2000.00,'2020-06-01 13:00:00'),
  19. (102,'sku_002',12000.00,'2020-06-01 13:00:00'),
  20. (102,'sku_002',600.00,'2020-06-02 12:00:00');

        3、执行以下命令:

clickhouse-client -port 9977 --send_logs_level=trace<<<'select * rom t_order_mt2 where total_amount>toDecimal32(900.,2)';

         主要是针对数据量大,有大量重复,稀疏索引不明显,加二级索引才有效果。并且可以看到

下面的跳疏索引。

2、导出数据

        Input and Output Formats | ClickHouse Documentation

3、副本(Replicated)与分片(Share)

3.1、副本 

        副本只能同步数据,不能同步表结构,所以我们需要在每台服务器上自己手动建表。建表语句如下:

  1. CREATE TABLE mydb.test_replicated(
  2. `id` UInt32,
  3. `EventTime` Date
  4. )ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/table_name', '{replica}')
  5. PARTITION BY EventTime ORDER BY id

        第一个参数shard:当前本地复制表实例所属的分片服务名称。

        第二个参数replica:当前这张表所属的副本名称,一般用replica1、replica2表示。如果第一个参数相同,当前第二个参数需要不同。用以区分当前副本与其他副本。

        在hadoop1和hadoop2上面分别执行下面的建表语句:

  1. -- 在hadoop1上执行
  2. create table t_order_rep(
  3. id UInt32,
  4. sku_id String,
  5. total_amount Decimal(16,2),
  6. create_time Datetime
  7. )engine = ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep1')
  8. partition by toYYYYMMDD(create_time)
  9. primary key(id)
  10. order by(id,sku_id);
  11. -- 在hadoop2上执行
  12. create table t_order_rep(
  13. id UInt32,
  14. sku_id String,
  15. total_amount Decimal(16,2),
  16. create_time Datetime
  17. )engine = ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep2')
  18. partition by toYYYYMMDD(create_time)
  19. primary key(id)
  20. order by(id,sku_id);

        当建完表之后,可以在zookpper上查看到以下信息,在zookeeper上显示有2个副本。

         执行插入语句:

  1. insert into t_order_rep values
  2. (101,'sku_001',1000.00,'2020-06-01 12:00:00'),
  3. (102,'sku_002',2000.00,'2020-06-01 12:00:00'),
  4. (103,'sku_004',2500.00,'2020-06-01 12:00:00'),
  5. (104,'sku_002',2000.00,'2020-06-01 12:00:00'),
  6. (105,'sku_003',600.00,'2020-06-02 12:00:00');

        当在一台服务器上插入语句时候,会在另外一台服务上查询到。即互为副本。

3.2、分片集群

        副本虽然能够提高数据的可用性,降低丢失风险,但是每台服务器实际上必须容纳全量的数据,对数据的横向扩展没有解决。

        要解决数据水平切分的问题,需要引入分片的概念。通过分片把一份完整的数据进行切分,不同的分片分不到不同的几点上,再通过Distributed表引擎把数据拼接起来一同使用。

        Distributed表引擎本身不存储数据,优点类似MyCat至于MySql,成为一种中间件,通过分布式逻辑表来写入、分发、路由来操作多态节点不同分片的分布式数据。

        注意:ClickHouse的集群是表级别的,实际企业中,大部分做了高可用,但是没有用分片,避免降低查询性能以及操作集群的复杂性。

3.2.1、集群写入流程(3分片2副本共6个节点)

        两种颜色的虚线标记为是否把副本同步打开。生产上主要使用internal_replication=true

3.2.2、集群读取流程(3分片2副本共6个节点)

3.3、实际操作

        1、建本地表语句,由于前面有指定以下配置:

  1. <macros>
  2. <shard>01</shard> <!-- 不用机器放的分片数不一样 -->
  3. <replica>rep_1_1</replica> <!-- 不同机器放的副本数不一样,这里表示分片一的第一个副本 -->
  4. </macros>

        可直接在建表语句中使用:

  1. create table st_order_mt on cluster pertest_3shards_2replicas(
  2. id UInt32,
  3. sku_id String,
  4. total_amount Decimal(16,2),
  5. create_time Datetime
  6. )engine = ReplicatedMergeTree('/clickhouse/tables/{shard}/st_order_mt','{replica}')
  7. partition by toYYYYMMDD(create_time)
  8. primary key(id)
  9. order by(id,sku_id);

        2、建分布式表:

  1. create table st_order_mt_all2 on cluster pertest_3shards_2replicas(
  2. id UInt32,
  3. sku_id String,
  4. total_amount Decimal(16,2),
  5. create_time Datetime
  6. )engine = Distributed(pertest_3shards_2replicas,default,st_order_mt,hiveHash(sku_id));

        参数含义:

        Distributed(集群名称,库名,本地表名,分片键)

        分片键必须是整型数字,所以用hiveHash函数转换,也可以rand() 

4、备份及恢复

        官网:https://clickhouse.tech/docs/en/operations/backup/

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/273244
推荐阅读
相关标签
  

闽ICP备14008679号