---
title: 约束与限制
description: "使用场景限制"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0604.html
sourcePath: /source/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0604.html
indexId: d98814e239ac264246461df859c342af346135b9f922caa20d0b84f4cd1f516978
---
# 约束与限制

使用场景限制

- 索引表不支持容灾。
- 索引数据不支持滚动升级。
- 禁止直接对索引表和索引元数据表执行DISABLE、DROP、MODIFY和TRUNCATE操作。
- 索引DDL操作支持修改索引状态、删除索引、创建索引；不支持修改索引定义，如需修改，请先删除后重新创建。
- 需要保证HBase各个节点系统时间同步。
- 在数据写入过程中不保证数据表和索引表数据实时同步，但是返回客户端写入成功后数据表和索引表数据可见。

索引创建约束

- 索引名需要符合正则要求，不支持其他字符。正则要求支持的字符为：[a-zA-Z_0-9-.]。
- 数据表必须存在，要创建的索引表名不能被占用。
- 索引表不支持多版本。不支持在多版本（VERSION>1）的数据表上创建索引，且索引表的版本VERSION=1。
- 不建议为单个数据表创建过多索引，索引数量过多会造成存储成本较高，写入耗时大。因此建议单个数据表的索引个数不超过5个。如果需创建超过5个索引，请新增配置参数“hbase.gsi.max.index.count.per.table”，设置值大于“5”，并重启HBase使配置生效。

- 索引名长度不能超过18个字符。不建议使用过长的索引名。

- 不支持为索引表创建索引。不支持嵌套创建多个索引，索引表仅用于加速查询，不承担数据表功能。
- 不支持创建可以被已有索引覆盖的索引。
  新建索引时，如果之前已存在的索引能够完全覆盖新建的索引（即创建的索引是已有索引的前序子集），则无法创建此索引，重复功能的索引会造成存储浪费。例如，以下操作将无法创建索引2，但是可以创建索引3。

  创建数据表：create 't1','cf1'

  创建索引1：hbase com.huawei.boostkit.hindex.mapreduce.GlobalTableIndexer -Dtablename.to.index='t1' -Dindexspecs.to.add='idx1=>cf1:[q1],[q2]'

  创建索引2：hbase com.huawei.boostkit.hindex.mapreduce.GlobalTableIndexer -Dtablename.to.index='t1' -Dindexspecs.to.add='idx2=>cf1:[q1]'

  创建索引3：hbase com.huawei.boostkit.hindex.mapreduce.GlobalTableIndexer -Dtablename.to.index='t1' -Dindexspecs.to.add='idx3=>cf1:[q2]'

- 不支持在不同数据表上创建同名索引。
- 创建索引时，需要保持RegionServer节点稳定，不能下线节点。
- 数据表有关联索引表正在创建时（处于BUILDING状态），写入数据表请求会失败，应避免在创建索引时写入数据。

索引数据写入约束

- 索引数据生成仅支持Put/Delete接口，使用其他方式（Increment、Append、Bulkload等）写入数据表时不会生成对应索引
- 索引列数据定义为String类型时，要避免写入\x00和\x01两个特殊字符（特殊不可见字符）。
- 向主表中写入覆盖列或索引列数据时，不支持指定时间戳。
- 索引表数据时间戳不继承主表时间戳。

索引查询约束

- 使用索引加速查询时索引的状态必须为ACTIVE。
- 使用索引表加速查询数据表时，仅支持使用SingleColumnValueFilter的scan查询操作，且指定的过滤列需要包括索引列。
- 一次查询最多能命中一个索引，不支持多索引联合查询。

- 查询结果若命中二级索引，结果的排序与直接命中主表不一致。
- 命中二级索引时，SingleColumnValueFilter过滤器有以下限制：过滤任意列时，latestVersionOnly属性默认为true，且不可更改；过滤索引列时，filterIfMissing属性默认为true，且不可更改。
- 使用索引表加速查询数据表时，支持scan操作设置caching、limit、cacheblocks属性；若设置reversed、raw、startRow和stopRow属性，则不会使用索引表加速查询；其他属性设置不生效。
