使用

索引命令行接口集成于hetu-cli中, 在安装目录的bin目录下运行。

创建

索引创建方法如下:

  1. CREATE INDEX [ IF NOT EXISTS ] index_name
  2. USING [ BITMAP | BLOOM | BTREE | MINMAX ]
  3. ON tbl_name (col_name)
  4. WITH ( 'level' = ['STRIPE', 'PARTITION'], "autoload" = true, "bloom.fpp" = '0.001', "bloom.mmapEnabled" = false, [, …] )
  5. WHERE predicate;
  • WHERE 用于选择部分分区创建索引
  • WITH 用于设置索引属性。参见各个索引的文档来查看支持的配置
  • "level"='STRIPE' 如缺省,默认创建级别是STRIPE
  • "autoload" 覆盖 config.properties 中的默认值 hetu.heuristicindex.filter.cache.autoload-default。 索引创建或更新后,是否自动加载到缓存中。 如果为 false,将根据需要加载索引。这意味着,前几个查询可能不会使用索引,因为它正在加载到缓存中。 将此设置为 true 可能会导致高内存使用率,但会提供最佳结果。

如果表是分区的,可以用一个等于表达式来指定一个创建的分区,或使用IN来指定多个。

  1. CREATE INDEX index_name USING bloom ON hive.schema.table (column1);
  2. CREATE INDEX index_name USING bloom ON hive.schema.table (column1) WITH ("bloom.fpp"="0.01") WHERE p=part1;
  3. CREATE INDEX index_name USING bloom ON hive.schema.table (column1) WHERE p in (part1, part2, part3);

注意: 如果表使用多重分区(例如被colA和colB)两列分区,则索引创建仅支持使用第一级分区值。

SHOW

显示所有索引或根据名字显示特定索引的信息。 信息包括索引名、用户、表名、索引列、索引类型、索引状态等。

  1. SHOW INDEX;
  2. SHOW INDEX index_name;

UPDATE

如果源表已被修改,则更新现有索引。你可以用SHOW INDEX index_name检查索引的状态。

  1. UPDATE INDEX index_name;

DROP

根据名字删除一条索引:

  1. DROP INDEX index_name
  2. WHERE predicate;
  • WHERE 表达式用于只删除索引的几个分区。但是,如果在创建时是全表创建的索引,则只删除部分的索引将不可用(只能整条删除)。
  1. DROP INDEX index_name where p=part1;

删除的索引不会立即被从服务器的缓存中清除,直到下一次刷新缓存。刷新时间与设置的缓存加载延迟有关,通常在几秒钟左右。 如果删除源表,索引将自动删除。

资源使用说明

磁盘使用

启发式索引使用本地临时文件夹存储创建的索引,然后打包上传至hdfs。因此,它需要临时文件夹(例如,linux上的/tmp)挂载的磁盘分区在本地有足够的可用空间。如果挂载的磁盘分区可用空间不足,用户可以在worker节点的jvm.config中通过-Djava.io.tmpdir来指定使用的临时路径:

  1. -Djava.io.tmpdir=/path/to/another/dir