我在Postgres有一张桌子,我想把它移到Hbase

时间:2014-04-14 02:18:50

标签: hbase

我在Postgres有一个表,但是现在我应该将Hbase作为后端数据库实现,所以我想将下表移到Hbase中,如何重新设计这个表?我是Hbase的新手。

id        geom            osm_id         name           type
1  00003381C75CBE6443    24254755   Millenium Hall     office
2  00003382D5B5D76S3G    ...
...

2 个答案:

答案 0 :(得分:0)

如果您只想将已存在的表数据从postgres移动到hbase,请节省一些时间并使用sqoop。否则,如果您想手动执行此操作,那么由于hbase在创建表时没有显式定义列的概念,并且它将数据存储在ByteArray中,因此您可以将put命令用作put 'table_name','1', 'colfam:geom','00003381C75CBE6443'。同样,为每一列做一遍。

答案 1 :(得分:-1)

您需要在hbase中创建一个具有一个列系列名称的表,并且您的所有列都将成为该列系列的一部分。

您的ID将成为hbase中的rowkey。

hbase(main):002:0> create 'hbaseTable', 'column1'
0 row(s) in 1.2620 seconds

hbase(main):003:0> 

其中hbaseTable是您的名称空间,column1将是您的表名。 然后,您可以使用thrift / native hbase API在hbase表中保存数据。

Configuration conf = HBaseConfiguration.create();
HTableInterface table = new HTable(conf, "hbaseTable".getBytes());

Put put = new Put(1.getBytes());// for id 1.
put.add("column1".getBytes(), "geom".getBytes(), 00003381C75CBE6443.getBytes());
put.add("column1".getBytes(), "osm_id".getBytes(), 24254755.getBytes());
put.add("column1".getBytes(), "name".getBytes(), Millenium Hall.getBytes());
put.add("column1".getBytes(), "type".getBytes(), office.getBytes());

puts.add(put);// same can do for other ids as well.


hTable.put(puts);