シェルで HBase テーブルを作成し、いくつかのデータを追加しました。http://hbase.apache.org/book/dm.sort.htmlには、データセットが最初に行キーでソートされ、次に列でソートされることが書かれています。だから私はHBaseシェルで何かを試しました:
hbase(main):013:0> put 'mytable', 'key1', 'cf:c', 'val'
0 row(s) in 0.0110 seconds
hbase(main):011:0> put 'mytable', 'key1', 'cf:d', 'val'
0 row(s) in 0.0060 seconds
hbase(main):012:0> put 'mytable', 'key1', 'cf:a', 'val'
0 row(s) in 0.0060 seconds
hbase(main):014:0> get 'mytable', 'key1'
COLUMN CELL
cf:a timestamp=1376468325426, value=val
cf:c timestamp=1376468328318, value=val
cf:d timestamp=1376468321642, value=val
3 row(s) in 0.0570 seconds
すべてがうまく見えます。期待通りの正しい順序 a -> c -> d を得ました。
今、私は Java の Apache Pig で同じことを試しました:
pigServer.registerQuery("mytable_data = load 'hbase://mytable' using org.apache.pig.backend.hadoop.hbase.HBaseStorage('cf', '-loadKey true') as (rowkey:chararray, columncontent:map[]);");
printAlias("mytable_data"); // own function, which itereate over the keys
私はこの結果を得ました:
(key1,[c#val,d#val,a#val])
したがって、順番は c -> d -> a です。それは私には少し奇妙に思えますが、HBase の場合と同じではないでしょうか? 後でマップをバッグに変換し、それを他のテーブルと結合するため、正しい順序を取得することが重要です。両方の入力が並べ替えられている場合、これらをデータセットに並べ替えずにマージ結合を使用できますか?! では、列のソートされたマップ (またはバッグ) を取得する方法はありますか?