【问题标题】:How to clear a table in hbase?如何清除hbase中的表?
【发布时间】:2012-03-28 06:40:38
【问题描述】:

我想清空 hbase 中的一个表...例如:user。是否有任何命令或功能可以清空表而不删除它...

我的表结构是:

$mutations = array(
                new Mutation( array(
                    'column' => 'username:1',
                    'value' =>$name
                ) ),
                new Mutation( array(
                    'column' => 'email:1',
                    'value' =>$email
                ) )
        );          
$hbase->mutateRow("user",$key,$mutations);

有人可以帮我吗?

【问题讨论】:

    标签: php hbase


    【解决方案1】:

    如果你在 HBase shell 中执行:

     > truncate 'yourTableName'
    

    然后 HBase 将为 'yourTableName' 执行此操作:

     > disable 'yourTableName'
     > drop 'yourTableName'
     > create 'yourTableName', 'f1', 'f2', 'f3'
    

    【讨论】:

    • 'truncate' 不保留表的权限。但是,较新的命令 'truncate_preserve' 确实
    【解决方案2】:

    另一个有效的选择是实际删除表,然后使用与前一个相同的设置重建另一个表。

    我不知道如何在 php 中执行此操作,但我知道如何在 Java 中执行此操作。 php中对应的action应该是类似的,你只需要查看API的样子就行了。

    在 Java 中使用 HBase 0.90.4:

    // Remember the "schema" of your table
    HBaseAdmin admin = new HBaseAdmin(yourConfiguration);
    HTableDescriptor td = admin.getTableDescriptor(Bytes.toBytes("yourTableName");
    
    // Delete your table
    admin.disableTable("yourTableName");
    admin.deleteTable("yourTableName");
    
    // Recreate your talbe
    admin.createTable(td);
    

    【讨论】:

    【解决方案3】:

    使用hbase shelltruncate <table_name> 将完成任务。

    truncate 'customer_details'命令截图如下:

    customer_details 是表名

    【讨论】:

      【解决方案4】:

      hbase shell 中的 truncate 命令将为您完成这项工作:

      截断前:

      截断后:

      【讨论】:

        【解决方案5】:

        HBase thrift API(这是 php 正在使用的)不提供截断命令,仅提供 deleteTable 和 createTable 功能(从您的角度来看有什么区别?)

        否则您必须扫描以获取所有键并为每个键删除AllRow - 这不是一个非常有效的选择

        【讨论】:

          【解决方案6】:

          为此,您可以使用HAdmin。它是一个用于 Apache HBase 管理的 UI 工具。更改表页面中有“截断表”甚至“删除表”按钮。

          【讨论】:

            【解决方案7】:

            使用 alter 命令

            alter '<table_name>', NAME=>'column_family',TTL=><number_of_seconds>

            这里 number_of_seconds 代表数据将被自动删除的持续时间。

            【讨论】:

              【解决方案8】:

              没有单一的命令可以清除 Hbase 表,但您可以使用 2 种解决方法:禁用、删除、创建表或扫描所有记录并删除每个记录。

              实际上,禁用、删除和再次创建表大约需要 4 秒。

              // get Hbase client
              $client = <Your code here>;
              $t = "table_name";
              
              $tables = $client->getTableNames();
              
              if (in_array($t, $tables)) {
                if ($client->isTableEnabled($t))
                  $client->disableTable($t);
              
                $client->deleteTable($t);
              }
              
              $descriptors = array(
                new ColumnDescriptor(array("name" =>  "c1", "maxVersions" => 1)),
                new ColumnDescriptor(array("name" =>  "c2", "maxVersions" => 1))
              );
              
              $client->createTable($t, $descriptors);
              

              如果表中的数据不多 - 扫描所有行并删除每行会更快。

              $client = <Your code here>;
              $t = "table_name";
              
              // i don't remember, if list of column families is actually needed here
              $columns = array("c1", "c2");
              
              $scanner = $client->scannerOpen($t, "", $columns);
              while ($result = $client->scannerGet($scanner)) {
                $client->deleteAllRow($t, $result[0]->row);
              }
              

              在这种情况下,数据并没有被物理删除,实际上它被“标记为已删除”并保留在表中,直到下一个主要契约。

              【讨论】:

              • 你可以简单地使用 'truncate' 或 'truncate_preserve' !
              【解决方案9】:

              也许使用以下两个命令之一:

              DELETE FROM your_table WHERE 1;
              

              或者

              TRUNCATE your_table;
              

              问候!

              【讨论】:

              • @Micku 这些是标准的 SQL 语句,奇怪的是不起作用。您用来连接数据库的用户,您是否有权执行 DELETE 或 TRUNCATE?
              猜你喜欢
              • 1970-01-01
              • 2016-04-02
              • 1970-01-01
              • 1970-01-01
              • 2023-04-06
              • 2011-08-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多