Я использую Thrift API для HBase в C ++ (пример использования Вот), но теперь у меня есть необходимость использовать Thrift2. Я знаю, что есть примеры использования Thrift2 на других языках, таких как C #, Python и Java, но я не могу найти документацию для C ++.
Вот мой текущий код для вызова Thrift API:
transport->open();
std::string t("demo_table");
/ Scan all tables, look for the demo table and delete it. /
std::cout << "scanning tables..." << std::endl;
StrVec tables;
client.getTableNames(tables);
for (StrVec::const_iterator it = tables.begin(); it != tables.end(); ++it) {
std::cout << " found: " << *it << std::endl;
if (t == *it) {
if (client.isTableEnabled(*it)) {
std::cout << " disabling table: " << *it << std::endl;
client.disableTable(*it);
}
std::cout << " deleting table: " << *it << std::endl;
client.deleteTable(*it);
}
}
Теперь это не удается после переключения на Thrift2. Например, client.getTableNames () больше не работает (функция не существует).
Некоторые функции удалены из интерфейса hbase thrift2. Если вы просто хотите получить список имен таблиц в hbase, вы можете использовать get children из / hbase / table в zookeeper.
struct String_vector paths;
int ret = zoo_get_children(zkhandle,"/hbase/table", 0,&paths);//
if(ret)
{
std::cout << "zoo_get_children error " << ret << std::endl;
} else {
for(i = 0;i < paths.count;i++)
printf("/hbase/table/%s\n",paths.data[i]);
free_vector(&paths);
}
Других решений пока нет …