如何从hbase表中获取值?

xkftehaa  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(370)

我在hbase中有一个表,其中有一个列族,名为 a 大约有30列。下面是显示两个行键的单元格值的示例-

ROW                                  COLUMN+CELL
 00:001000574                        column=a:aasbig, timestamp=1486493154559, value=true
 00:001000574                        column=a:aasdel, timestamp=1486493154559, value=true
 00:001000574                        column=a:aasdhq, timestamp=1486493154559, value=false
 00:001000574                        column=a:aasfsc, timestamp=1486493154559, value=true
 00:001000574                        column=a:aasgbm, timestamp=1486493154559, value=true
 00:001000574                        column=a:aasgbr, timestamp=1486493154559, value=true
 00:001000574                        column=a:aasmcu, timestamp=1486493154559, value=true
 00:001000574                        column=a:aasser, timestamp=1486493154559, value=true
 00:001000574                        column=a:aastlp, timestamp=1486493154559, value=true
 00:001000574                        column=a:aasvia, timestamp=1486493154559, value=true
 00:001000707                        column=a:aasbig, timestamp=1486493154559, value=false
 00:001000707                        column=a:aasdel, timestamp=1486493154559, value=false
 00:001000707                        column=a:aasdhq, timestamp=1486493154559, value=true
 00:001000707                        column=a:aasfsc, timestamp=1486493154559, value=false
 00:001000707                        column=a:aasgbm, timestamp=1486493154559, value=false
 00:001000707                        column=a:aasgbr, timestamp=1486493154559, value=false
 00:001000707                        column=a:aasmcu, timestamp=1486493154559, value=false
 00:001000707                        column=a:aasser, timestamp=1486493154559, value=false
 00:001000707                        column=a:aastlp, timestamp=1486493154559, value=false
 00:001000707                        column=a:aasvia, timestamp=1486493154559, value=false

每列都有一个值 true 或者 false . 这些数值会发生变化,一周后数值可能会有所不同。我想捕捉新旧价值观。结果应存储在csv文件中。
我的要求是,当我第一次运行代码时,我应该看到oldvalue为null,并且hbase表中的所有值都应该是newvalue的一部分。
下面是我第一次运行时希望在csv文件中看到的输出。

NUM,PRODUCT,OLDVALUE,NEWVALUE
001000574,aasbig,NULL,true
001000574,aasdel,NULL,true
001000574,aasdhq,NULL,false
001000574,aasfsc,NULL,true
001000574,aasgbm,NULL,true
001000574,aasgbr,NULL,true
001000574,aasmcu,NULL,true
001000574,aasser,NULL,true
001000574,aastlp,NULL,true
001000574,aasvia,NULL,true
001000707,aasbig,NULL,false
001000707,aasdel,NULL,false
001000707,aasdhq,NULL,true
001000707,aasfsc,NULL,false
001000707,aasgbm,NULL,false
001000707,aasgbr,NULL,false
001000707,aasmcu,NULL,false
001000707,aasser,NULL,false
001000707,aastlp,NULL,false
001000707,aasvia,NULL,false

从第二次开始,当我运行代码时 NEWVALUES 从上一次运行到现在应该在 OLDVALUES 以及 NEWVALUES 应该从hbase表中获取当前值。如下面的示例输出

NUM,PRODUCT,OLDVALUE,NEWVALUE
001000574,aasbig,true,true
001000574,aasdel,true,true
001000574,aasdhq,false,false
001000574,aasfsc,true,true
001000574,aasgbm,true,false
001000574,aasgbr,true,true
001000574,aasmcu,true,false
001000574,aasser,true,false
001000574,aastlp,true,true
001000574,aasvia,true,true
001000707,aasbig,false,true
001000707,aasdel,false,true
001000707,aasdhq,true,true
001000707,aasfsc,false,false
001000707,aasgbm,false,false
001000707,aasgbr,false,false
001000707,aasmcu,false,true
001000707,aasser,false,true
001000707,aastlp,false,false
001000707,aasvia,false,true

我尝试的是:我在hbase表上创建了一个配置单元,在查询表时只能得到 NUM 以及 value . 我无法获取hbase列名。另外,除非实现一些连接操作,否则我在获取新旧值方面也遇到了挑战。
我们可以写Pig脚本来实现这一点吗?
非常感谢您的帮助。

bvjxkvbb

bvjxkvbb1#

这可以通过以下步骤以编程方式轻松完成:
第一次 Scan 并获取其输出。还有其他优化的变体。 Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result result = scanner.next(); result != null; result = scanner.next()){ //Create required format } 为了下一次 Scan 表格使用 Range 过滤器提供 startTime 在api中兼职。它将获取一定时间段后更新的所有记录。 Result 将包含更新记录的版本。您可以使用最新版本的详细信息并生成输出。 Scan scan = new Scan(); scan.setTimeRange(startTime, endTime); ResultScanner scanner = table.getScanner(scan); for (Result result = scanner.next(); result != null; result = scanner.next()){ NavigableMap<byte[],NavigableMap<byte[],NavigableMap<Long,byte[]>>> allVersions=result.getMap(); //allVersions map will give all versions of the record. //Create required format } 我不确定Hive或Pig的过程。希望这有帮助!

相关问题