我尝试在论坛上搜索,在那里我可以从现有的hbase表架构创建一个新的空hbase表,但无法找到.
更确切地说,假设我有一个包含多个列族的表,并且在这些族中有许多列限定符.
现在我必须使用相同的模式创建另一个空表.我们是否像在RDBMS中那样创建表.
Create table new_table as
select * from existing_table where 1=2;
Run Code Online (Sandbox Code Playgroud)
现有表具有复杂的结构,因此create table指定列族和列限定符的常规hbase 命令不是一个选项.
仅供参考我正在使用Mapr HBase 0.98.12-mapr-1506,我没有选择切换到任何高级版本或其他发行版.
Gya*_*edi 12
这是我用过的全面证明方法.希望它能帮助别人.
1)在命令下面启动HBase shell vial
hbase shell
Run Code Online (Sandbox Code Playgroud)
2)使用以下命令查询现有表元数据
hbase> describe ‘existing_table’;
Run Code Online (Sandbox Code Playgroud)
输出类似于:
{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'}
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
4)最后使用新表名运行create query:
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'}
Run Code Online (Sandbox Code Playgroud)
你完成了.新表模式与现有表完全相同.
您可以使用快照功能执行此操作.像这样;
hbase> snapshot 'tableName', 'tableSnapshot'
hbase> clone_snapshot 'tableSnapshot', 'newTableName'
hbase> delete_snapshot 'tableSnapshot'
hbase> truncate 'newTableName'
Run Code Online (Sandbox Code Playgroud)
我希望你的桌子不大.你不能用空值复制列限定符,如果我不明白错,你的意思是在你的问题中.您可以将所有数据复制到新表,也可以只复制具有列族,协处理器等的表结构.
| 归档时间: |
|
| 查看次数: |
6890 次 |
| 最近记录: |