Как очистить таблицу в hbase?

Я хочу очистить таблицу в 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);

может кто-нибудь помочь мне?

7 ответов


нет единой команды для очистки таблицы 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);
}

в этом случае данные не удаляются физически, на самом деле они "помечены как удаленные" и остаются в таблице до следующего майор компакт.


Если вы выполните это в оболочке HBase:

 > truncate 'yourTableName'

затем HBase выполнит эту операцию для "yourTableName":

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

другой эффективный вариант-фактически удалить таблицу, а затем восстановить другую со всеми теми же настройками, что и предыдущая.

Я не знаю, как это сделать на php, но я знаю, как это сделать на Java. Соответствующие действия в php должны быть похожи, вам просто нужно проверить, как выглядит 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);

используя hbase shell, truncate <table_name> выполнит задачу.

снимок показано ниже:enter image description here

здесь customer_details - имя таблицы


HBase thrift API (который использует php) не предоставляет команду усечения только для удаления и создания функциональности (какова разница с вашей точки зрения?)

в противном случае вам нужно сканировать, чтобы получить все ключи и deleteAllRow для каждого ключа - что не очень эффективный вариант


команда усечения в оболочке hbase сделает эту работу за вас:

прежде чем обрезать: enter image description here

после усечения: enter image description here


возможно, используя одну из этих двух команд:

DELETE FROM your_table WHERE 1;

или

TRUNCATE your_table;

С уважением!