HBase:使用与现有 table 相同的架构创建 table
HBase: Create table with same schema as existing table
我尝试在论坛上搜索,在那里我可以从现有的 hbase table 架构创建一个新的空 hbase table,但找不到。
更准确地说,假设我有一个 table,其中包含多个列族和这些族中的许多列限定符。
现在我必须创建另一个具有相同架构的空 table。我们有没有办法像在 RDBMS 中那样创建 table。
Create table new_table as
select * from existing_table where 1=2;
现有的 table 具有复杂的结构,因此无法使用指定列族和列限定符的普通 hbase create table
命令。
仅供参考..我正在使用 Mapr HBase 0.98.12-mapr-1506
并且我没有切换到任何高级版本或其他发行版的选项。
您可以使用快照功能来执行此操作。像这样;
hbase> snapshot 'tableName', 'tableSnapshot'
hbase> clone_snapshot 'tableSnapshot', 'newTableName'
hbase> delete_snapshot 'tableSnapshot'
hbase> truncate 'newTableName'
我希望你的 table 不是很大。而且你不能复制具有空值的列限定符,如果我没理解错的话,你的意思是你的问题。您可以将所有数据复制到新的 table 或仅复制 table 具有列族、协处理器等的结构
这是我使用的完整证明方法。希望对其他人有帮助。
1) 在命令
下启动 HBase shell vial
hbase shell
2) 使用以下命令查询现有 table 元数据
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) 最后 运行 使用新的 table 名称创建查询:
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'}
大功告成。新的 table 架构与现有的 table.
完全相同
我尝试在论坛上搜索,在那里我可以从现有的 hbase table 架构创建一个新的空 hbase table,但找不到。
更准确地说,假设我有一个 table,其中包含多个列族和这些族中的许多列限定符。
现在我必须创建另一个具有相同架构的空 table。我们有没有办法像在 RDBMS 中那样创建 table。
Create table new_table as
select * from existing_table where 1=2;
现有的 table 具有复杂的结构,因此无法使用指定列族和列限定符的普通 hbase create table
命令。
仅供参考..我正在使用 Mapr HBase 0.98.12-mapr-1506
并且我没有切换到任何高级版本或其他发行版的选项。
您可以使用快照功能来执行此操作。像这样;
hbase> snapshot 'tableName', 'tableSnapshot'
hbase> clone_snapshot 'tableSnapshot', 'newTableName'
hbase> delete_snapshot 'tableSnapshot'
hbase> truncate 'newTableName'
我希望你的 table 不是很大。而且你不能复制具有空值的列限定符,如果我没理解错的话,你的意思是你的问题。您可以将所有数据复制到新的 table 或仅复制 table 具有列族、协处理器等的结构
这是我使用的完整证明方法。希望对其他人有帮助。
1) 在命令
下启动 HBase shell vial hbase shell
2) 使用以下命令查询现有 table 元数据
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) 最后 运行 使用新的 table 名称创建查询:
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'}
大功告成。新的 table 架构与现有的 table.
完全相同