返回介绍

HBase 表描述和更改

发布于 2024-06-23 16:37:45 字数 21232 浏览 0 评论 0 收藏 0

描述

describe返回表的描述。其语法如下:

  1. hbase> describe 'table name'

下面给出的是emp表上describe命令的输出。

  1. hbase(main):006:0> describe 'emp'
  2. Table emp is ENABLED emp
  3. COLUMN FAMILIES DESCRIPTION
  4. {NAME => 'personal data', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', VERSIONS => '1', KEEP_DELETED_CELLS => 'FA
  5. LSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', BLOCKCACHE =>
  6. 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
  7. {NAME => 'professional data', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', VERSIONS => '1', KEEP_DELETED_CELLS =>
  8. 'FALSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', BLOCKCACH
  9. E => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
  10. 2 row(s)
  11. Quota is disabled
  12. Took 7.8766 seconds

更改

alter是用于更改现有表的命令。使用此命令,您可以更改列系列的最大单元数,设置和删除表范围运算符,以及从表中删除列系列。

更改列族的最大单元数

下面给出的是更改列族的最大单元数的语法。

  1. hbase> alter 't1', NAME => 'f1', VERSIONS => 5

在以下示例中,最大单元数设置为5。

  1. hbase(main):003:0> alter 'emp', NAME => 'personal data', VERSIONS => 5
  2. Updating all regions with the new schema...
  3. 0/1 regions updated.
  4. 1/1 regions updated.
  5. Done.
  6. 0 row(s) in 2.3050 seconds

表范围运算符

使用alter可以设置和删除表范围运算符,例如MAX_FILESIZEREADONLYMEMSTORE_FLUSHSIZEDEFERRED_LOG_FLUSH等。

设置只读

下面给出的是使表只读的语法。

  1. hbase>alter 't1', READONLY(option)

在以下示例中,我们使emp表为只读。

  1. hbase(main):006:0> alter 'emp', READONLY
  2. Updating all regions with the new schema...
  3. 0/1 regions updated.
  4. 1/1 regions updated.
  5. Done.
  6. 0 row(s) in 2.2140 seconds

删除表范围运算符

我们还可以删除表范围运算符。下面给出的是从emp表中删除MAX_FILESIZE的语法。

  1. hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'MAX_FILESIZE'

删除列族

使用alter,还可以删除列族。下面给出的是使用alter删除列族的语法。

  1. hbase> alter 'table name ', 'delete' => 'column family'

以下是从emp表中删除列族的示例。
假设在HBase中有一个名为employee的表。它包含以下数据:

  1. hbase(main):006:0> scan 'employee'
  2. ROW COLUMN+CELL
  3. row1 column = personal:city, timestamp = 1418193767, value = hyderabad
  4. row1 column = personal:name, timestamp = 1418193806767, value = raju
  5. row1 column = professional:designation, timestamp = 1418193767, value = manager
  6. row1 column = professional:salary, timestamp = 1418193806767, value = 50000
  7. 1 row(s) in 0.0160 seconds

现在,让我们使用alter命令删除名为professional的列族。

  1. hbase(main):007:0> alter 'employee','delete'⇒'professional'
  2. Updating all regions with the new schema...
  3. 0/1 regions updated.
  4. 1/1 regions updated.
  5. Done.
  6. 0 row(s) in 2.2380 seconds

现在,更改后验证表中的数据。观察列系列“专业”已不再存在,因为我们已将其删除。

  1. hbase(main):003:0> scan 'employee'
  2. ROW COLUMN + CELL
  3. row1 column = personal:city, timestamp = 14181936767, value = hyderabad
  4. row1 column = personal:name, timestamp = 1418193806767, value = raju
  5. 1 row(s) in 0.0830 seconds

使用Java API添加列族

您可以使用HBAseAdmin类的方法addColumn()把列族添加到表。请按照下面给出的步骤将列族添加到表中。

第1步

获得Admin类。

  1. // Instantiating configuration class
  2. Configuration config = HBaseConfiguration.create();
  3. Connection connection = ConnectionFactory.createConnection(config);
  4. // Instantiating Admin class
  5. Admin admin = null;
  6. admin = connection.getAdmin();

第2步

上述addColumn()方法需要2个参数,一个是表名,一个是HColumnDescriptor类。因此,需要实例化HColumnDescriptor类。HColumnDescriptor的构造函数又需要添加列族名称。在这里,我们将一个名为contactDetails的列族添加到现有的emp表中。

  1. // Instantiating columnDescriptor object
  2. HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails");

第3步

使用addColumn方法添加列系列。将表名和HColumnDescriptor类对象作为参数传递给此方法。

  1. // Adding column family
  2. admin.addColumn(TableName.valueOf("emp"), columnDescriptor);

下面给出的是将列族添加到现有表的完整程序。

  1. import java.io.IOException;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.HColumnDescriptor;
  4. import org.apache.hadoop.hbase.TableName;
  5. import org.apache.hadoop.hbase.client.Connection;
  6. import org.apache.hadoop.hbase.client.ConnectionFactory;
  7. import org.apache.hadoop.hbase.client.Admin;
  8. import org.apache.hadoop.conf.Configuration;
  9. @SuppressWarnings("deprecation")
  10. public class AddColoumn{
  11. public static void main(String[] args) throws IOException {
  12. try {
  13. // Instantiating configuration class
  14. Configuration config = HBaseConfiguration.create();
  15. Connection connection = ConnectionFactory.createConnection(config);
  16. // Instantiating Admin class
  17. Admin admin = null;
  18. admin = connection.getAdmin();
  19. // Instantiating columnDescriptor class
  20. HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails");
  21. // Adding column family
  22. admin.addColumn(TableName.valueOf("emp"), columnDescriptor);
  23. System.out.println("coloumn added");
  24. } catch (Exception e) {
  25. System.out.println(e.getMessage());
  26. }
  27. }
  28. }
  29. 编译并执行上述程序,如下所示。
  30. $javac AddColumn.java
  31. $java AddColumn
  32. 如果一切顺利,它将产生以下输出:
  33. column added
  34. 使用Java API删除列族
  35. 您可以使用该方法从表中删除列族deleteColumn()的HBAseAdmin类。请按照下面给出的步骤将列族添加到表中。
  36. 第1步 Admin类。
  37. // Instantiating configuration class
  38. Configuration config = HBaseConfiguration.create();
  39. Connection connection = ConnectionFactory.createConnection(config);
  40. // Instantiating Admin class
  41. Admin admin = null;
  42. admin = connection.getAdmin();
  43. 第2步 - 使用deleteColumn()方法删除列族。将表名和列族名作为参数传递给此方法。
  44. // Deleting column family
  45. String col = "contactDetails";
  46. // delete column family
  47. admin.deleteColumn(TableName.valueOf("emp"), col.getBytes());
  48. 下面给出的是从现有表中删除列族的完整程序。
  49. import java.io.IOException;
  50. import org.apache.hadoop.hbase.HBaseConfiguration;
  51. import org.apache.hadoop.hbase.TableName;
  52. import org.apache.hadoop.hbase.client.Connection;
  53. import org.apache.hadoop.hbase.client.ConnectionFactory;
  54. import org.apache.hadoop.hbase.client.Admin;
  55. import org.apache.hadoop.conf.Configuration;
  56. @SuppressWarnings("deprecation")
  57. public class DeleteColoumn{
  58. public static void main(String args[]) throws MasterNotRunningException, IOException{
  59. try {
  60. // Instantiating configuration class
  61. Configuration config = HBaseConfiguration.create();
  62. Connection connection = ConnectionFactory.createConnection(config);
  63. // Instantiating Admin class
  64. Admin admin = null;
  65. admin = connection.getAdmin();
  66. String col = "contactDetails";
  67. // delete column family
  68. admin.deleteColumn(TableName.valueOf("emp"), col.getBytes());
  69. System.out.println("coloumn deleted");
  70. } catch (Exception e) {
  71. System.out.println(e.getMessage());
  72. }
  73. }
  74. }

编译并执行上述程序,如下所示。

  1. $javac DeleteColumn.java
  2. $java DeleteColumn

以下应该是输出:

  1. column deleted

使用Java API删除列族

您可以使用HBAseAdmin类的deleteColumn()方法从表中删除列族的。请按照下面给出的步骤将列族添加到表中。

第1步

获取Admin类。

  1. // Instantiating configuration class
  2. Configuration config = HBaseConfiguration.create();
  3. Connection connection = ConnectionFactory.createConnection(config);
  4. // Instantiating Admin class
  5. Admin admin = null;
  6. admin = connection.getAdmin();

第2步

使用deleteColumn()方法删除列族。将表名和列族名作为参数传递给此方法。

  1. // Deleting column family
  2. String col = "contactDetails";
  3. // delete column family
  4. admin.deleteColumn(TableName.valueOf("emp"), col.getBytes());

下面给出的是从现有表中删除列族的完整程序。

  1. import java.io.IOException;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.TableName;
  4. import org.apache.hadoop.hbase.client.Connection;
  5. import org.apache.hadoop.hbase.client.ConnectionFactory;
  6. import org.apache.hadoop.hbase.client.Admin;
  7. import org.apache.hadoop.conf.Configuration;
  8. @SuppressWarnings("deprecation")
  9. public class DeleteColoumn{
  10. public static void main(String args[]) throws MasterNotRunningException, IOException{
  11. try {
  12. // Instantiating configuration class
  13. Configuration config = HBaseConfiguration.create();
  14. Connection connection = ConnectionFactory.createConnection(config);
  15. // Instantiating Admin class
  16. Admin admin = null;
  17. admin = connection.getAdmin();
  18. String col = "contactDetails";
  19. // delete column family
  20. admin.deleteColumn(TableName.valueOf("emp"), col.getBytes());
  21. System.out.println("coloumn deleted");
  22. } catch (Exception e) {
  23. System.out.println(e.getMessage());
  24. }
  25. }
  26. }

编译并执行上述程序,如下所示。

  1. $javac DeleteColumn.java
  2. $java DeleteColumn

以下应该是输出:

  1. column deleted

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文