我在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脚本来实现这一点吗?
非常感谢您的帮助。
1条答案
按热度按时间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的过程。希望这有帮助!