我们已经知道Trafodion中的表其实是映射和存储在HBase表中的, 本文通过一个简单DEMO介绍一下Trafodion中创建的表是如何映射到HBase表。
1 创建Trafodion测试表并插入样例数据
SQL>create table mytable(a integer not null, b char(10), primary key (a));
--- SQL operation complete.
SQL>insert into mytable values (1, 'abc'), (2, 'def');
--- 2 row(s) inserted.
SQL>select * from mytable;
A B
----------- ----------
1 abc
2 def
--- 2 row(s) selected.
2 通过HBase Shell查询前面创建的表
hbase(main):002:0> scan 'TRAFODION.SEABASE.MYTABLE'
ROW COLUMN+CELL
\x80\x00\x00\x01 column=#1:\x01, timestamp=1475979256797, value=\x80\x00\x00\x01
\x80\x00\x00\x01 column=#1:\x02, timestamp=1475979256797, value=\x00abc
\x80\x00\x00\x02 column=#1:\x01, timestamp=1475979256800, value=\x80\x00\x00\x02
\x80\x00\x00\x02 column=#1:\x02, timestamp=1475979256800, value=\x00def
3 通过上述结果,我们可以验证以下结论
- Trafodion中的每一列数据都存放在HBase表中单独的CELL中
- 每一个Trafodion表采用单一column family,它的名字叫"#1"
- Trafodion中每一列对应HBase表中有一个Column qualifier,它是一个整数的序号,从1开始计数,为了避免长名浪费空间
- HBase表中的rowkey是对应Trafodion表主键所有字段进行编码后的结果,为了保证正确的进行二进制排序
- 对于给定的Trafodion表,HBase表中的rowkey长度是一致的