Как очистить таблицу в 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 thrift API (который использует php) не предоставляет команду усечения только для удаления и создания функциональности (какова разница с вашей точки зрения?)
в противном случае вам нужно сканировать, чтобы получить все ключи и deleteAllRow для каждого ключа - что не очень эффективный вариант
возможно, используя одну из этих двух команд:
DELETE FROM your_table WHERE 1;
или
TRUNCATE your_table;
С уважением!