CarbonData索引管理(一)

举报
荔子 发表于 2020/08/28 17:01:22 2020/08/28
【摘要】 概述索引管理
  • 概述

  • 索引管理

  • 自动刷新

  • 手动刷新

  • 索引相关的命令

         Explain

         Show Index

概述

索引可以使用下面的DDL创建:

CREATE INDEX [IF NOT EXISTS] index_name
ON TABLE [db_name.]table_name (column_name, ...)
AS carbondata/bloomfilter/lucene
[WITH DEFERRED REFRESH]
[PROPERTIES ('key'='value')]

索引可以使用下面的DDL刷新:

REFRESH INDEX index_name ON [TABLE] [db_name.]table_name

当前,CarbonData实现了3种索引:

索引管理

CarbonData有两种索引管理语义

1.自动刷新

2.手动刷新

自动刷新

 当用户未使用WITH DEFERRED REFRESH 语法在主表上创建一个索引时,索引将由系统自动管理。每一次加载数据到主表时,系统将自动立即触发一个加载索引操作。这两个加载(主表和索引)以事物的方式执行,这意味着它们要么一起成功,要么一起失败。

         加载到索引的数据是增量的,且基于Segment概念,避免了一次昂贵的全部刷新。

         如果用户在主表上执行下列命令,系统将返回失败,即拒绝以下的操作:

  1. 数据管理命令:UPDATE/DELETE/DELETE SEGMENT

  2. Schema管理命令:ALTER TABLE DROP COLUMNALTER TABLE CHANGE DATATYPEALTER TABLE RENAME。注意,添加一个新列是支持的,另外,对于删除列和改变数据类型命令,CarbonData将会检查是否这种操作将会影响索引表,如果不影响,这种操作被允许执行,否则,操作将抛出异常而被拒绝。

  3. 分区管理命令:ALTER TABLE ADD/DROP PARTITION

  如果用户确实想在主表上执行以上操作命令,那么可以先删除索引、执行以上操作,然后再次重新创建索引。

  如果用户删除主表,索引也会立即被删除。

  我们建议你使用这些管理索引的命令。

手动刷新

    当用户使用WITH DEFERRED REFRESH语法在主表上创建了索引,它(索引)将被创建为disabled状态,并且查询操作将不会使用这个索引直到用户使用了REFRESH INDEX命令去构造索引。对每一个REFRESH INDEX命令,系统将触发一个对索引的全部刷新。一旦刷新操作完成,系统会将索引的状态改为enabled,因此它可以被用于查询重写。

     对于每一次新数据加载、更新、删除,相关的索引将被置为disabled,这意味着索引变成enabled之前,后续的查询将不会受益于索引。

    如果主表被用户删除,相关的索引也会立即被删除。

注意:

1.  如果你在一个外部表上创建索引,你需要手动管理索引。

2.  目前,CarbonData支持的所有索引类型默认会自动刷新,这意味着索引被创建或者主表加载数据后,索引的内容会立即被刷新。手动刷新不会这样。

索引相关的命令

Explain

    用户如何知道是否一个索引被用于查询中?

    用户可以设置enable.query.statistics=true并使用Explain命令去查看,它将打印出类似于下面的结果:

== CarbonData Profiler == 
Table Scan on default.main 
+- total: 1 blocks, 1 blocklets 
+- filter: 
+- pruned by CG Index    
    - name: index1    
    - provider: lucene    
    - skipped: 0 blocks, 0 blocklets

Show Index

当用户使用SHOW INDEXES命令后,系统将读取CarbonData表的所有索引并将所有信息输出在屏幕上。当前的信息包括:

    索引名Name

    索引提供者Provider(like lucene)

    索引列 Indexed Columns

    索引属性 Properties

    索引状态 Status ENABLED/DISABLED

    索引同步信息 Sync Info (展示上一次主表与索引表同步时的Segment Id和索引内容加载/更新的时间)


【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。