添加HBase二级索引
功能介绍
您可以使用org.apache.hadoop.hbase.hindex.client.HIndexAdmin中提供的方法来管理HIndexes。 该类提供了将索引添加到现有表的方法:
根据用户是否希望在添加索引操作期间构建索引数据,有两种不同的方法可将索引添加到表中:
- addIndicesWithData()
- addIndices()
代码样例
以下代码片段在com.huawei.bigdata.hbase.examples包的“HIndexExample”类的addIndicesExample方法中:
addIndices(): 将索引添加到没有数据的表中
public void addIndicesExample() {
LOG.info("Entering Adding a Hindex.");
// Create index instance
TableIndices tableIndices = new TableIndices();
HIndexSpecification spec = new HIndexSpecification(indexNameToAdd);
spec.addIndexColumn(new HColumnDescriptor("info"), "name", ValueType.STRING);
tableIndices.addIndex(spec);
Admin admin = null;
HIndexAdmin iAdmin = null;
try {
admin = conn.getAdmin();
iAdmin = HIndexClient.newHIndexAdmin(admin);
// add index to the table
iAdmin.addIndices(tableName, tableIndices);
// Alternately, add the specified indices with data
// iAdmin.addIndicesWithData(tableName, tableIndices);
LOG.info("Successfully added indices to the table " + tableName);
} catch (IOException e) {
LOG.error("Add Indices failed for table " + tableName + "." + e);
} finally {
if (iAdmin != null) {
try {
// Close the HIndexAdmin object.
iAdmin.close();
} catch (IOException e) {
LOG.error("Failed to close HIndexAdmin ", e);
}
}
if (admin != null) {
try {
// Close the Admin object.
admin.close();
} catch (IOException e) {
LOG.error("Failed to close admin ", e);
}
}
}
LOG.info("Exiting Adding a Hindex.");
}
以下代码片段在com.huawei.bigdata.hbase.examples包的“HIndexExample”类的addIndicesExampleWithData方法中:
addIndicesWithData():将索引添加到具有大量预先存在数据的表中
public void addIndicesExampleWithData() {
LOG.info("Entering Adding a Hindex With Data.");
// Create index instance
TableIndices tableIndices = new TableIndices();
HIndexSpecification spec = new HIndexSpecification(indexNameToAdd);
spec.addIndexColumn(new HColumnDescriptor("info"), "age", ValueType.STRING);
tableIndices.addIndex(spec);
Admin admin = null;
HIndexAdmin iAdmin = null;
try {
admin = conn.getAdmin();
iAdmin = HIndexClient.newHIndexAdmin(admin);
// add index to the table
iAdmin.addIndicesWithData(tableName, tableIndices);
// Alternately, add the specified indices with data
// iAdmin.addIndicesWithData(tableName, tableIndices);
LOG.info("Successfully added indices to the table " + tableName);
} catch (IOException e) {
LOG.error("Add Indices failed for table " + tableName + "." + e);
} finally {
if (iAdmin != null) {
try {
// Close the HIndexAdmin object.
iAdmin.close();
} catch (IOException e) {
LOG.error("Failed to close HIndexAdmin ", e);
}
}
if (admin != null) {
try {
// Close the Admin object.
admin.close();
} catch (IOException e) {
LOG.error("Failed to close admin ", e);
}
}
}
LOG.info("Exiting Adding a Hindex With Data.");
}