2017-03-29 5 views
1

私はaと呼ばれる1つの列ファミリと約30列のHbaseテーブルを持っています。以下HBaseテーブルから値を取得する方法は?

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 

キー - 2行のセルの値を示すサンプルは、各列はtrue又はfalseのいずれかとの値を有しています。これらの値は変更の対象となり、1週間後に値が異なる可能性があります。私は古い価値観と新しい価値観を捉えたいと思っています。結果は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のテーブルを作成し、テーブルを照会しながら、 私だけNUMvalueを得ることができました。 HBaseの列名を取得できませんでした。また、私はいくつかの結合操作を実装しない限り、古い値と新しい値を得ることに挑戦しました。

これを達成するために豚のスクリプトを書くことはできますか?

ご迷惑をおかけして申し訳ありません。

答えて

0

この簡単に、以下の手順により、プログラムで行うことができます。

  1. 初めてScanテーブルとその出力を取得します。これには他にも最適化された変形があります。 Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result result = scanner.next(); result != null; result = scanner.next()){
    //Create required format }
  2. ScanRangeフィルタを使用するテーブルは、API内でstartTimeの時間を提供します。一定期間後に更新されたすべてのレコードを取得します。 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の処理についてはわかりません。お役に立てれば!
+0

回答を編集して例を挙げて説明してください。 –

関連する問題