HBase: создать таблицу с той же схемой, что и существующая таблица.

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

Чтобы быть более точным, предположим, что у меня есть таблица с несколькими семействами столбцов и множеством квалификаторов столбцов в этих семействах.

Теперь мне нужно создать еще одну пустую таблицу с той же схемой. Можем ли мы каким-либо образом создать таблицу, как в СУБД.

Create table new_table as
select * from existing_table where 1=2;

Существующая таблица имеет сложную структуру, поэтому обычная команда hbase create table с указанием семейства столбцов и квалификатора столбца не подходит.

К сведению. Я использую Mapr HBase 0.98.12-mapr-1506, и у меня нет возможности переключиться на какую-либо расширенную версию или другой дистрибутив.


person Gyanendra Dwivedi    schedule 24.02.2016    source источник
comment
можете ли вы принять мой ответ, если он полезен.   -  person halil    schedule 26.02.2016


Ответы (2)


Вот полный подход, который я использовал. Надеюсь, это поможет другим людям.

1) запустить флакон оболочки HBase ниже команды

 hbase shell

2) Запросить существующие метаданные таблицы с помощью команды ниже

 hbase> describe ‘existing_table’;

Вывод будет похож на:

{NAME => 'cf1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING 
=> 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION
_SCOPE => '0'}                                                                                                                  
{NAME => 'cf2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING 
=> 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION
_SCOPE => '0'}

3) Скопируйте этот вывод в блокнот и внесите следующие изменения:

  a) Replace  TTL => 'FOREVER' with TTL => org.apache.hadoop.hbase.HConstants::FOREVER
  b) Put an additional comma (,) between each column family description to connect column family definition.
  c) Remove newline characters (\n, \r) for the text; such that the content become one line text.

4) Наконец, запустив запрос на создание с новым именем таблицы:

create ‘copy_of_exsting_table_schema’, {NAME => 'cf1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING 
=> 'NONE', TTL => org.apache.hadoop.hbase.HConstants::FOREVER, COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION
_SCOPE => '0'} ,{NAME => 'cf2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING 
=> 'NONE', TTL => org.apache.hadoop.hbase.HConstants::FOREVER, COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION
_SCOPE => '0'}

Готово. Новая схема таблицы точно такая же, как у существующей таблицы.

person Gyanendra Dwivedi    schedule 07.04.2016
comment
Это поможет создать новую схему с существующей схемой, как мы будем копировать данные с существующей таблицей и схемой. - person Shyam Gupta; 27.02.2017
comment
Используйте функцию моментальных снимков для клонирования таблицы hbase. - person Gyanendra Dwivedi; 10.03.2017

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

hbase> snapshot 'tableName', 'tableSnapshot'
hbase> clone_snapshot 'tableSnapshot', 'newTableName'
hbase> delete_snapshot 'tableSnapshot'
hbase> truncate 'newTableName'

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

person halil    schedule 24.02.2016
comment
Спасибо за ответ, просто хотел понять, что будет делать disable 'tableName'. У меня нет возможности сделать исходную таблицу автономной (не могу остановить чтение/запись из другой программы). Мне просто нужна схема, а не данные для копирования. Можем ли мы просто сделать новую копию схемы, используя функцию моментального снимка? - person Gyanendra Dwivedi; 24.02.2016
comment
Извините, я отредактировал свой ответ. вам не нужно отключать таблицу для запуска команды моментального снимка. - person halil; 24.02.2016
comment
Это подтверждается чтением раздела моментальных снимков книги HBase: hbase.apache.org/book .html#ops.моментальные снимки - person David; 01.10.2019
comment
это вопрос 4-летней давности, и он показывает обходной путь, не давая точного кода для выполнения того, что он просит. - person halil; 22.06.2020