You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by 陈加俊 <cj...@gmail.com> on 2011/02/23 11:54:15 UTC

I can't get many versions of the specified column,but only get the latest version of the specified column

I can't get many versions of the specified column,but only get the latest
version of the specified column. Is there anyone  help me?

//put data by version

 final Put p = new Put(key); // key
final long ts = System.currentTimeMillis();
       p.add(FAMILY, q1, ts,v1);
       p.add(FAMILY, q2, ts,v2);
       p.add(FAMILY, q3, ts,v3);

      table.put(p);


//get all versions of data

final Get get = new Get(key);
           get.addFamily(FAMILY);
           get.setMaxVersions(10);
           final Result result = htable.get(get);

           final NavigableMap<byte[], NavigableMap<byte[],
NavigableMap<Long, byte[]>>> map = result.getMap();
           final Set<Entry<byte[], NavigableMap<byte[],
NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
           final Iterator<Entry<byte[], NavigableMap<byte[],
NavigableMap<Long, byte[]>>>> iterator = entrySet
                   .iterator();
           while (iterator.hasNext())
           {
               final Entry<byte[], NavigableMap<byte[],
NavigableMap<Long, byte[]>>> next = iterator.next();
               System.out.println(Bytes.toString(next.getKey())); //family
               for (final Entry<byte[], NavigableMap<Long, byte[]>>
item : next.getValue().entrySet())
               {
                   System.out.println(Bytes.toString(item.getKey()));
                   for (final Entry<Long, byte[]> _item :
item.getValue().entrySet())
                   {
                       System.out.println(_item.getKey()); //q
                       System.out.println(Bytes.toString(_item.getValue()));
//value
                   }
               }

           }

-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
Thank you very much ! I really do appreciate what you've done .

On Mon, Mar 7, 2011 at 11:41 AM, Tatsuya Kawano <ta...@gmail.com>wrote:

>
> Hi, I tried your test code yesterday, and now I know the reason of the
> problem. Your Puts were OK, but the Delete at the end caused the problem.
>
> You have two Puts with hard-coded *past* timestamps and another with a
> *future* timestamp. You also have one Delete without specifying a timestamp
> so this delete has a *present* timestamp. In HBase, a row delete operation
> doesn't remove the row from the disk files, but just record a delete marker
> with the timestamp. When HBase finds the delete marker, it treat any column
> values having earlier timestamp than the marker to be deleted. So once you
> delete the row, any Put with a past timestamp will never show up in a Get
> result. That's why you only saw the value from the third Put.
>
> This is not a bug but a feature of HBase. What's your actual use case? Do
> you need to specify the timestamp for every Puts? If so, you have to be very
> careful with Delete. If you don't need to specify them, you can just strip
> the hard-coded timestamps from your test case and your it will start to work
> as you expected.
>
> Thanks,
>
> --
> Tatsuya Kawano
> Tokyo, Japan
>
>
> On Feb 24, 2011, at 5:01 PM, 陈加俊 <cj...@gmail.com> wrote:
>
> > It will be right if according to the following process:
> >
> > step 1: create 'testTable',{NAME => 'log' , VERSIONS => 5 }
> >
> > step 2: excute my code below
> >
> > I will be wrong if uncomment the code :table.delete(new Delete(rowKey));
> >
> > I will be run right agin If I comment the code and change the rowKey.
> >
> >
> >
> > My code below :
> >
> >
> > public class GetRowVersionsTest extends TestCase
> >
> > {
> >
> >    private final byte[] family    = Bytes.toBytes("log");
> >
> >
> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >
> >
> >    private final byte[] rowKey    = Bytes.toBytes(1000);
> >
> >
> >    private final HTable table     =
> > IDMHBaseConfiguration.getTable("testTable");
> >
> >
> >    private final long   ts1       = 1298529542218L;
> >
> >
> >    private final long   ts2       = ts1 + 100;
> >
> >
> >    private final long   ts3       = ts1 + 1000;
> >
> >
> >    private final byte[] value1    = Bytes.toBytes("value1");
> >
> >
> >    private final byte[] value2    = Bytes.toBytes("value2");
> >
> >
> >    private final byte[] value3    = Bytes.toBytes("value3");
> >
> >
> >    private void insert(final long ts, final byte[] value) throws
> > IOException
> >
> >    {
> >
> >        //        table.setAutoFlush(false);
> >
> >        final Put put = new Put(rowKey);
> >
> >        put.add(family, qualifier, ts, value);
> >
> >        table.put(put);
> >
> >    }
> >
> >
> >    private void sleep()
> >
> >    {
> >
> >        try
> >
> >        {
> >
> >            Thread.sleep(1000);
> >
> >        }
> >
> >        catch (final InterruptedException e)
> >
> >        {
> >
> >            e.printStackTrace();
> >
> >        }
> >
> >    }
> >
> >
> >    @Test
> >
> >    public void testGetRowMultipleVersions() throws Exception
> >
> >    {
> >
> >        insert(ts1, value1);
> >
> >        sleep();
> >
> >        insert(ts2, value2);
> >
> >        sleep();
> >
> >        insert(ts3, value3);
> >
> >        sleep();
> >
> >
> >        // check getRow with multiple versions
> >
> >        final Get get = new Get(rowKey);
> >
> >        get.setMaxVersions();
> >
> >        final Result r = table.get(get);
> >
> >
> >        final List<KeyValue> list = r.list();
> >
> >        for (final KeyValue kv : list)
> >
> >        {
> >
> >            System.err.println(kv.getKey());
> >
> >            System.err.println(Bytes.toString(kv.getValue()));
> >
> >        }
> >
> >
> >        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> > byte[]>>> map = r.getMap();
> >
> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> > map.get(family);
> >
> >        final NavigableMap<Long, byte[]> versionMap =
> > familyMap.get(qualifier);
> >
> >        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >
> >        {
> >
> >            System.err.println(entry.getKey());
> >
> >            System.err.println(Bytes.toString(entry.getValue()));
> >
> >        }
> >
> >        //        assertTrue(versionMap.size() == 3);
> >
> >
> >        //        assertTrue(value1 == versionMap.get(ts1));
> >
> >        //        assertTrue(value2 == versionMap.get(ts2));
> >
> >        //        assertTrue(value3 == versionMap.get(ts3));
> >
> >
> >        // table.delete(new Delete(rowKey));
> >
> >        // assertTrue(table.get(get).size() == 0);
> >
> >        //        table.close();
> >
> >    }
> >
> >
> > On Thu, Feb 24, 2011 at 3:41 PM, Lars George <la...@gmail.com>
> wrote:
> >
> >> What error are you getting? The NPE?
> >>
> >> As Tatsuya pointed out, you are using the same time stamps:
> >>
> >>  private final long   ts2       = ts1 + 100;
> >>
> >>  private final long   ts3       = ts1 + 100;
> >>
> >> That cannot work, you are overriding cells.
> >>
> >> Lars
> >>
> >> On Thu, Feb 24, 2011 at 8:34 AM, 陈加俊 <cj...@gmail.com> wrote:
> >>> HTable object has not setAutoFlush. It's default value is true at my
> >>> cluster.So I set it true as follows ,but error is still the same.
> >>>
> >>> public class GetRowVersionsTest extends TestCase
> >>> {
> >>>   private final byte[] family    = Bytes.toBytes("log");
> >>>
> >>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >>>
> >>>   private final byte[] rowKey    = Bytes.toBytes(1);
> >>>
> >>>   private final long   ts1       = 1298529542218L;
> >>>
> >>>   private final long   ts2       = ts1 + 100;
> >>>
> >>>   private final long   ts3       = ts1 + 100;
> >>>
> >>>   private final byte[] value1    = Bytes.toBytes("value1");
> >>>
> >>>   private final byte[] value2    = Bytes.toBytes("value2");
> >>>
> >>>   private final byte[] value3    = Bytes.toBytes("value3");
> >>>
> >>>   private void insert(final long ts, final byte[] value) throws
> >>> IOException
> >>>   {
> >>>       final HTable table =
> >>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>       table.setAutoFlush(false);
> >>>       final Put put = new Put(rowKey);
> >>>       put.add(family, qualifier, ts, value);
> >>>       table.put(put);
> >>>   }
> >>>
> >>>   private void sleep()
> >>>   {
> >>>       try
> >>>       {
> >>>           Thread.sleep(1000);
> >>>       }
> >>>       catch (final InterruptedException e)
> >>>       {
> >>>           e.printStackTrace();
> >>>       }
> >>>   }
> >>>
> >>>   @Test
> >>>   public void testGetRowMultipleVersions() throws Exception
> >>>   {
> >>>       insert(ts1, value1);
> >>>       sleep();
> >>>       insert(ts2, value2);
> >>>       sleep();
> >>>       insert(ts3, value3);
> >>>       sleep();
> >>>
> >>>       // check getRow with multiple versions
> >>>       final HTable table =
> >>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>       final Get get = new Get(rowKey);
> >>>       get.setMaxVersions();
> >>>       final Result r = table.get(get);
> >>>
> >>>       final List<KeyValue> list = r.list();
> >>>       for (final KeyValue kv : list)
> >>>       {
> >>>           System.err.println(kv.getKey());
> >>>           System.err.println(Bytes.toString(kv.getValue()));
> >>>       }
> >>>
> >>>       final NavigableMap<byte[], NavigableMap<byte[],
> NavigableMap<Long,
> >>> byte[]>>> map = r.getMap();
> >>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap
> =
> >>> map.get(family);
> >>>       final NavigableMap<Long, byte[]> versionMap =
> >>> familyMap.get(qualifier);
> >>>       for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >>>       {
> >>>           System.err.println(entry.getKey());
> >>>           System.err.println(Bytes.toString(entry.getValue()));
> >>>       }
> >>>       //        assertTrue(versionMap.size() == 3);
> >>>
> >>>       //        assertTrue(value1 == versionMap.get(ts1));
> >>>       //        assertTrue(value2 == versionMap.get(ts2));
> >>>       //        assertTrue(value3 == versionMap.get(ts3));
> >>>
> >>>       //        table.delete(new Delete(rowKey));
> >>>       //        assertTrue(table.get(get).size() == 0);
> >>>       //        table.close();
> >>>   }
> >>>
> >>> On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com>
> wrote:
> >>>
> >>>> Does the HTable object have setAutoFlush(false) turned on by any
> chance?
> >>>>
> >>>> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
> >>>>> line 89:        final NavigableMap<byte[], NavigableMap<Long,
> byte[]>>
> >>>>> familyMap = map.get(family);
> >>>>> map is null ,
> >>>>> and strangely  I use r.list() instead,
> >>>>> final List<KeyValue> list = r.list();
> >>>>> r is null !
> >>>>>
> >>>>>
> >>>>> 2011/2/24 Ryan Rawson <ry...@gmail.com>
> >>>>>>
> >>>>>> Which line is line 89?
> >>>>>>
> >>>>>> Also it's preferable to do:
> >>>>>> assertEquals(3, versionMap.size());
> >>>>>> vs:
> >>>>>> assertTrue(versionMap.size() == 3);
> >>>>>>
> >>>>>> since the error messages from the former are more descriptive
> >>>>>> "expected 3 was 2".
> >>>>>>
> >>>>>> looking at the code it looks like it should work...
> >>>>>>
> >>>>>> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
> >>>>>>> This is my test case ,but I get NPE some times .
> >>>>>>>
> >>>>>>> java.lang.NullPointerException
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
> >>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >>>>>>> at java.lang.reflect.Method.invoke(Method.java:597)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> >>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >>>>>>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >>>>>>> at
> >> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >>>>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >>>>>>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >>>>>>>
> >>>>>>> public class GetRowVersionsTest extends TestCase
> >>>>>>> {
> >>>>>>>   private final byte[] family    = Bytes.toBytes("log");
> >>>>>>>
> >>>>>>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >>>>>>>
> >>>>>>>   private final byte[] rowKey    = Bytes.toBytes(1);
> >>>>>>>
> >>>>>>>   private final HTable table     =
> >>>>>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>>>>>
> >>>>>>>   private final long   ts1       = 1298529542218L;
> >>>>>>>
> >>>>>>>   private final long   ts2       = ts1 + 100;
> >>>>>>>
> >>>>>>>   private final long   ts3       = ts1 + 100;
> >>>>>>>
> >>>>>>>   private final byte[] value1    = Bytes.toBytes("value1");
> >>>>>>>
> >>>>>>>   private final byte[] value2    = Bytes.toBytes("value2");
> >>>>>>>
> >>>>>>>   private final byte[] value3    = Bytes.toBytes("value3");
> >>>>>>>
> >>>>>>>   private void insert(final long ts, final byte[] value) throws
> >>>>>>> IOException
> >>>>>>>   {
> >>>>>>>       final Put put = new Put(rowKey);
> >>>>>>>       put.add(family, qualifier, ts, value);
> >>>>>>>       table.put(put);
> >>>>>>>   }
> >>>>>>>
> >>>>>>>   private void sleep()
> >>>>>>>   {
> >>>>>>>       try
> >>>>>>>       {
> >>>>>>>           Thread.sleep(1000);
> >>>>>>>       }
> >>>>>>>       catch (final InterruptedException e)
> >>>>>>>       {
> >>>>>>>           e.printStackTrace();
> >>>>>>>       }
> >>>>>>>   }
> >>>>>>>
> >>>>>>>   @Test
> >>>>>>>   public void testGetRowMultipleVersions() throws Exception
> >>>>>>>   {
> >>>>>>>       insert(ts1, value1);
> >>>>>>>       sleep();
> >>>>>>>       insert(ts2, value2);
> >>>>>>>       sleep();
> >>>>>>>       insert(ts3, value3);
> >>>>>>>       sleep();
> >>>>>>>
> >>>>>>>       // check getRow with multiple versions
> >>>>>>>       final Get get = new Get(rowKey);
> >>>>>>>       get.setMaxVersions();
> >>>>>>>       final Result r = table.get(get);
> >>>>>>>       final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long,
> >>>>>>> byte[]>>> map = r.getMap();
> >>>>>>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> >>>> familyMap
> >>>>>>> =
> >>>>>>> map.get(family);
> >>>>>>>       final NavigableMap<Long, byte[]> versionMap =
> >>>>>>> familyMap.get(qualifier);
> >>>>>>>       for (final Map.Entry<Long, byte[]> entry :
> >>>> versionMap.entrySet())
> >>>>>>>       {
> >>>>>>>           System.err.println(entry.getKey());
> >>>>>>>           System.err.println(Bytes.toString(entry.getValue()));
> >>>>>>>       }
> >>>>>>>       //        assertTrue(versionMap.size() == 3);
> >>>>>>>
> >>>>>>>       //        assertTrue(value1 == versionMap.get(ts1));
> >>>>>>>       //        assertTrue(value2 == versionMap.get(ts2));
> >>>>>>>       //        assertTrue(value3 == versionMap.get(ts3));
> >>>>>>>
> >>>>>>>       //        table.delete(new Delete(rowKey));
> >>>>>>>       //        assertTrue(table.get(get).size() == 0);
> >>>>>>>       //        table.close();
> >>>>>>>   }
> >>>>>>> }
> >>>>>>>
> >>>>>>>
> >>>>>>> On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
> >>>>>>> <ta...@gmail.com>wrote:
> >>>>>>>
> >>>>>>>> Hi Jiajun,
> >>>>>>>>
> >>>>>>>> Make sure you don't have the same timestamp on every versions of
> >>>> puts;
> >>>>>>>> try
> >>>>>>>> to put Thread.sleep() in your test(?) codes when necessary.
> >>>>>>>>
> >>>>>>>> You might not want to specify the timestamp by yourself but want
> >> to
> >>>> let
> >>>>>>>> HBase to store appropriate ones.
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Tatsuya Kawano (Mr.)
> >>>>>>>> Tokyo, Japan
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
> >>>> wrote:
> >>>>>>>>
> >>>>>>>>> There are test cases for this, the functionality DOES work,
> >>>> something
> >>>>>>>>> is
> >>>>>>>> up...
> >>>>>>>>>
> >>>>>>>>> Without full code and full descriptions of your tables,
> >> debugging
> >>>> is
> >>>>>>>>> harder than it needs to be.  It's probably a simple typo or
> >>>>>>>>> something,
> >>>>>>>>> check your code and table descriptions again. Many people rely
> >> on
> >>>> the
> >>>>>>>>> multi version query capabilities and it is very unlikely to be
> >>>> broken
> >>>>>>>>> in a released version of hbase.
> >>>>>>>>>
> >>>>>>>>> On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com>
> >> wrote:
> >>>>>>>>>> final List<KeyValue> list = result.list();
> >>>>>>>>>>          for (final KeyValue it : list)
> >>>>>>>>>>          {
> >>>>>>>>>>              System.out.println(Bytes.toString(it.getKey()));
> >>>>>>>>>>
> >> System.out.println(Bytes.toString(it.getValue()));
> >>>>>>>>>>          }
> >>>>>>>>>> I can only get the last version!  why ? Is there any testcase
> >> in
> >>>>>>>>>> Hbase?
> >>>>>>>>>>
> >>>>>>>>>> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
> >>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> /**
> >>>>>>>>>>>  * Create a sorted list of the KeyValue's in this result.
> >>>>>>>>>>>  *
> >>>>>>>>>>>  * @return The sorted list of KeyValue's.
> >>>>>>>>>>>  */
> >>>>>>>>>>> public List<KeyValue> list() {
> >>>>>>>>>>>   if(this.kvs == null) {
> >>>>>>>>>>>     readFields();
> >>>>>>>>>>>   }
> >>>>>>>>>>>   return isEmpty()? null: Arrays.asList(sorted());
> >>>>>>>>>>> }
> >>>>>>>>>>>
> >>>>>>>>>>> I will try it . Thank you very much!
> >>>>>>>>>>>
> >>>>>>>>>>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
> >>>> buttler1@llnl.gov>
> >>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Result.list() ?
> >>>>>>>>>>>> Putting the hbase source into your IDE of choice (yay
> >> Eclipse!)
> >>>> is
> >>>>>>>> really
> >>>>>>>>>>>> helpful
> >>>>>>>>>>>>
> >>>>>>>>>>>> Dave
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >>>>>>>>>>>> To: user@hbase.apache.org
> >>>>>>>>>>>> Cc: Buttler, David
> >>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
> >>>> column,but
> >>>>>>>> only
> >>>>>>>>>>>> get the latest version of the specified column
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thank you David !
> >>>>>>>>>>>>
> >>>>>>>>>>>> I alter the table schema as follow:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
> >>>>>>>>>>>>> METHOD
> >>>>>>>> =>
> >>>>>>>>>>>> 'add'}
> >>>>>>>>>>>>
> >>>>>>>>>>>> How to iterate over KeyValues?  which method in Result?
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
> >>>>>>>>>>>> <bu...@llnl.gov>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> What is your table schema set to?  By default it holds 3
> >>>>>>>>>>>>> versions.
> >>>>>>>>>>>>> Also, you might iterating over KeyValues instead of using
> >> the
> >>>> Map
> >>>>>>>> since
> >>>>>>>>>>>> you
> >>>>>>>>>>>>> don't really care about the organization, just the time.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Dave
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >>>>>>>>>>>>> To: user@hbase.apache.org
> >>>>>>>>>>>>> Cc: Stack
> >>>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
> >>>>>>>>>>>>> column,but
> >>>>>>>> only
> >>>>>>>>>>>> get
> >>>>>>>>>>>>> the latest version of the specified column
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> I execute it five times at diffrent time.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> //put data by version
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> final Put p = new Put(key); // key
> >>>>>>>>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
> >>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
> >>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
> >>>>>>>>>>>>>    table.put(p);
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> So I can get five versions ,right?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
> >>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> What do you get for a result?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> You are only entering a single version of each column, a
> >>>> single
> >>>>>>>>>>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
> >>>>>>>>>>>>>> FAMILY:q3.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> St.Ack
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cjjvictory@gmail.com
> >>>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>> I can't get many versions of the specified column,but only
> >>>> get
> >>>>>>>>>>>>>>> the
> >>>>>>>>>>>>> latest
> >>>>>>>>>>>>>>> version of the specified column. Is there anyone  help me?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> //put data by version
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> final Put p = new Put(key); // key
> >>>>>>>>>>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
> >>>>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
> >>>>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    table.put(p);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> //get all versions of data
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> final Get get = new Get(key);
> >>>>>>>>>>>>>>>         get.addFamily(FAMILY);
> >>>>>>>>>>>>>>>         get.setMaxVersions(10);
> >>>>>>>>>>>>>>>         final Result result = htable.get(get);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>         final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >>>>>>>>>>>>>>>         final Set<Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >>>>>>>>>>>>>>>         final Iterator<Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >>>>>>>>>>>>>>>                 .iterator();
> >>>>>>>>>>>>>>>         while (iterator.hasNext())
> >>>>>>>>>>>>>>>         {
> >>>>>>>>>>>>>>>             final Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >>>>>>>>>>>>>>>
> >>>> System.out.println(Bytes.toString(next.getKey()));
> >>>>>>>>>>>>> //family
> >>>>>>>>>>>>>>>             for (final Entry<byte[], NavigableMap<Long,
> >>>>>>>>>>>>>>> byte[]>>
> >>>>>>>>>>>>>>> item : next.getValue().entrySet())
> >>>>>>>>>>>>>>>             {
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> System.out.println(Bytes.toString(item.getKey()));
> >>>>>>>>>>>>>>>                 for (final Entry<Long, byte[]> _item :
> >>>>>>>>>>>>>>> item.getValue().entrySet())
> >>>>>>>>>>>>>>>                 {
> >>>>>>>>>>>>>>>                     System.out.println(_item.getKey());
> >> //q
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >>>>>>>>>>>>>>> //value
> >>>>>>>>>>>>>>>                 }
> >>>>>>>>>>>>>>>             }
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>         }
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>>>>> jiajun
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>>> jiajun
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> --
> >>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>> jiajun
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> --
> >>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>> jiajun
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> Thanks & Best regards
> >>>>>>>>>> jiajun
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Thanks & Best regards
> >>>>>>> jiajun
> >>>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Thanks & Best regards
> >>>>> jiajun
> >>>>>
> >>>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Thanks & Best regards
> >>> jiajun
> >>>
> >>
> >
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
>
>
>
> --
> Thanks & Best regards
> jiajun
>
>


-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Tatsuya Kawano <ta...@gmail.com>.
Hi, I tried your test code yesterday, and now I know the reason of the problem. Your Puts were OK, but the Delete at the end caused the problem. 

You have two Puts with hard-coded *past* timestamps and another with a *future* timestamp. You also have one Delete without specifying a timestamp so this delete has a *present* timestamp. In HBase, a row delete operation doesn't remove the row from the disk files, but just record a delete marker with the timestamp. When HBase finds the delete marker, it treat any column values having earlier timestamp than the marker to be deleted. So once you delete the row, any Put with a past timestamp will never show up in a Get result. That's why you only saw the value from the third Put.

This is not a bug but a feature of HBase. What's your actual use case? Do you need to specify the timestamp for every Puts? If so, you have to be very careful with Delete. If you don't need to specify them, you can just strip the hard-coded timestamps from your test case and your it will start to work as you expected.

Thanks, 

--
Tatsuya Kawano
Tokyo, Japan


On Feb 24, 2011, at 5:01 PM, 陈加俊 <cj...@gmail.com> wrote:

> It will be right if according to the following process:
>
> step 1: create 'testTable',{NAME => 'log' , VERSIONS => 5 }
>
> step 2: excute my code below
>
> I will be wrong if uncomment the code :table.delete(new Delete(rowKey));
>
> I will be run right agin If I comment the code and change the rowKey.
>
>
>
> My code below :
>
>
> public class GetRowVersionsTest extends TestCase
>
> {
>
>    private final byte[] family    = Bytes.toBytes("log");
>
>
>    private final byte[] qualifier = Bytes.toBytes("siteUrl");
>
>
>    private final byte[] rowKey    = Bytes.toBytes(1000);
>
>
>    private final HTable table     =
> IDMHBaseConfiguration.getTable("testTable");
>
>
>    private final long   ts1       = 1298529542218L;
>
>
>    private final long   ts2       = ts1 + 100;
>
>
>    private final long   ts3       = ts1 + 1000;
>
>
>    private final byte[] value1    = Bytes.toBytes("value1");
>
>
>    private final byte[] value2    = Bytes.toBytes("value2");
>
>
>    private final byte[] value3    = Bytes.toBytes("value3");
>
>
>    private void insert(final long ts, final byte[] value) throws
> IOException
>
>    {
>
>        //        table.setAutoFlush(false);
>
>        final Put put = new Put(rowKey);
>
>        put.add(family, qualifier, ts, value);
>
>        table.put(put);
>
>    }
>
>
>    private void sleep()
>
>    {
>
>        try
>
>        {
>
>            Thread.sleep(1000);
>
>        }
>
>        catch (final InterruptedException e)
>
>        {
>
>            e.printStackTrace();
>
>        }
>
>    }
>
>
>    @Test
>
>    public void testGetRowMultipleVersions() throws Exception
>
>    {
>
>        insert(ts1, value1);
>
>        sleep();
>
>        insert(ts2, value2);
>
>        sleep();
>
>        insert(ts3, value3);
>
>        sleep();
>
>
>        // check getRow with multiple versions
>
>        final Get get = new Get(rowKey);
>
>        get.setMaxVersions();
>
>        final Result r = table.get(get);
>
>
>        final List<KeyValue> list = r.list();
>
>        for (final KeyValue kv : list)
>
>        {
>
>            System.err.println(kv.getKey());
>
>            System.err.println(Bytes.toString(kv.getValue()));
>
>        }
>
>
>        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> byte[]>>> map = r.getMap();
>
>        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> map.get(family);
>
>        final NavigableMap<Long, byte[]> versionMap =
> familyMap.get(qualifier);
>
>        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
>
>        {
>
>            System.err.println(entry.getKey());
>
>            System.err.println(Bytes.toString(entry.getValue()));
>
>        }
>
>        //        assertTrue(versionMap.size() == 3);
>
>
>        //        assertTrue(value1 == versionMap.get(ts1));
>
>        //        assertTrue(value2 == versionMap.get(ts2));
>
>        //        assertTrue(value3 == versionMap.get(ts3));
>
>
>        // table.delete(new Delete(rowKey));
>
>        // assertTrue(table.get(get).size() == 0);
>
>        //        table.close();
>
>    }
>
>
> On Thu, Feb 24, 2011 at 3:41 PM, Lars George <la...@gmail.com> wrote:
>
>> What error are you getting? The NPE?
>>
>> As Tatsuya pointed out, you are using the same time stamps:
>>
>>  private final long   ts2       = ts1 + 100;
>>
>>  private final long   ts3       = ts1 + 100;
>>
>> That cannot work, you are overriding cells.
>>
>> Lars
>>
>> On Thu, Feb 24, 2011 at 8:34 AM, 陈加俊 <cj...@gmail.com> wrote:
>>> HTable object has not setAutoFlush. It's default value is true at my
>>> cluster.So I set it true as follows ,but error is still the same.
>>>
>>> public class GetRowVersionsTest extends TestCase
>>> {
>>>   private final byte[] family    = Bytes.toBytes("log");
>>>
>>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
>>>
>>>   private final byte[] rowKey    = Bytes.toBytes(1);
>>>
>>>   private final long   ts1       = 1298529542218L;
>>>
>>>   private final long   ts2       = ts1 + 100;
>>>
>>>   private final long   ts3       = ts1 + 100;
>>>
>>>   private final byte[] value1    = Bytes.toBytes("value1");
>>>
>>>   private final byte[] value2    = Bytes.toBytes("value2");
>>>
>>>   private final byte[] value3    = Bytes.toBytes("value3");
>>>
>>>   private void insert(final long ts, final byte[] value) throws
>>> IOException
>>>   {
>>>       final HTable table =
>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>>>       table.setAutoFlush(false);
>>>       final Put put = new Put(rowKey);
>>>       put.add(family, qualifier, ts, value);
>>>       table.put(put);
>>>   }
>>>
>>>   private void sleep()
>>>   {
>>>       try
>>>       {
>>>           Thread.sleep(1000);
>>>       }
>>>       catch (final InterruptedException e)
>>>       {
>>>           e.printStackTrace();
>>>       }
>>>   }
>>>
>>>   @Test
>>>   public void testGetRowMultipleVersions() throws Exception
>>>   {
>>>       insert(ts1, value1);
>>>       sleep();
>>>       insert(ts2, value2);
>>>       sleep();
>>>       insert(ts3, value3);
>>>       sleep();
>>>
>>>       // check getRow with multiple versions
>>>       final HTable table =
>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>>>       final Get get = new Get(rowKey);
>>>       get.setMaxVersions();
>>>       final Result r = table.get(get);
>>>
>>>       final List<KeyValue> list = r.list();
>>>       for (final KeyValue kv : list)
>>>       {
>>>           System.err.println(kv.getKey());
>>>           System.err.println(Bytes.toString(kv.getValue()));
>>>       }
>>>
>>>       final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
>>> byte[]>>> map = r.getMap();
>>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
>>> map.get(family);
>>>       final NavigableMap<Long, byte[]> versionMap =
>>> familyMap.get(qualifier);
>>>       for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
>>>       {
>>>           System.err.println(entry.getKey());
>>>           System.err.println(Bytes.toString(entry.getValue()));
>>>       }
>>>       //        assertTrue(versionMap.size() == 3);
>>>
>>>       //        assertTrue(value1 == versionMap.get(ts1));
>>>       //        assertTrue(value2 == versionMap.get(ts2));
>>>       //        assertTrue(value3 == versionMap.get(ts3));
>>>
>>>       //        table.delete(new Delete(rowKey));
>>>       //        assertTrue(table.get(get).size() == 0);
>>>       //        table.close();
>>>   }
>>>
>>> On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com> wrote:
>>>
>>>> Does the HTable object have setAutoFlush(false) turned on by any chance?
>>>>
>>>> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
>>>>> line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
>>>>> familyMap = map.get(family);
>>>>> map is null ,
>>>>> and strangely  I use r.list() instead,
>>>>> final List<KeyValue> list = r.list();
>>>>> r is null !
>>>>>
>>>>>
>>>>> 2011/2/24 Ryan Rawson <ry...@gmail.com>
>>>>>>
>>>>>> Which line is line 89?
>>>>>>
>>>>>> Also it's preferable to do:
>>>>>> assertEquals(3, versionMap.size());
>>>>>> vs:
>>>>>> assertTrue(versionMap.size() == 3);
>>>>>>
>>>>>> since the error messages from the former are more descriptive
>>>>>> "expected 3 was 2".
>>>>>>
>>>>>> looking at the code it looks like it should work...
>>>>>>
>>>>>> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
>>>>>>> This is my test case ,but I get NPE some times .
>>>>>>>
>>>>>>> java.lang.NullPointerException
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>>>>>>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>>>>>>> at
>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>>>>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>>>>>>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>>>>>>> at
>>>>>>>
>>>>>>>
>>>>
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>>>>>>>
>>>>>>> public class GetRowVersionsTest extends TestCase
>>>>>>> {
>>>>>>>   private final byte[] family    = Bytes.toBytes("log");
>>>>>>>
>>>>>>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
>>>>>>>
>>>>>>>   private final byte[] rowKey    = Bytes.toBytes(1);
>>>>>>>
>>>>>>>   private final HTable table     =
>>>>>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>>>>>>>
>>>>>>>   private final long   ts1       = 1298529542218L;
>>>>>>>
>>>>>>>   private final long   ts2       = ts1 + 100;
>>>>>>>
>>>>>>>   private final long   ts3       = ts1 + 100;
>>>>>>>
>>>>>>>   private final byte[] value1    = Bytes.toBytes("value1");
>>>>>>>
>>>>>>>   private final byte[] value2    = Bytes.toBytes("value2");
>>>>>>>
>>>>>>>   private final byte[] value3    = Bytes.toBytes("value3");
>>>>>>>
>>>>>>>   private void insert(final long ts, final byte[] value) throws
>>>>>>> IOException
>>>>>>>   {
>>>>>>>       final Put put = new Put(rowKey);
>>>>>>>       put.add(family, qualifier, ts, value);
>>>>>>>       table.put(put);
>>>>>>>   }
>>>>>>>
>>>>>>>   private void sleep()
>>>>>>>   {
>>>>>>>       try
>>>>>>>       {
>>>>>>>           Thread.sleep(1000);
>>>>>>>       }
>>>>>>>       catch (final InterruptedException e)
>>>>>>>       {
>>>>>>>           e.printStackTrace();
>>>>>>>       }
>>>>>>>   }
>>>>>>>
>>>>>>>   @Test
>>>>>>>   public void testGetRowMultipleVersions() throws Exception
>>>>>>>   {
>>>>>>>       insert(ts1, value1);
>>>>>>>       sleep();
>>>>>>>       insert(ts2, value2);
>>>>>>>       sleep();
>>>>>>>       insert(ts3, value3);
>>>>>>>       sleep();
>>>>>>>
>>>>>>>       // check getRow with multiple versions
>>>>>>>       final Get get = new Get(rowKey);
>>>>>>>       get.setMaxVersions();
>>>>>>>       final Result r = table.get(get);
>>>>>>>       final NavigableMap<byte[], NavigableMap<byte[],
>>>>>>> NavigableMap<Long,
>>>>>>> byte[]>>> map = r.getMap();
>>>>>>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>>
>>>> familyMap
>>>>>>> =
>>>>>>> map.get(family);
>>>>>>>       final NavigableMap<Long, byte[]> versionMap =
>>>>>>> familyMap.get(qualifier);
>>>>>>>       for (final Map.Entry<Long, byte[]> entry :
>>>> versionMap.entrySet())
>>>>>>>       {
>>>>>>>           System.err.println(entry.getKey());
>>>>>>>           System.err.println(Bytes.toString(entry.getValue()));
>>>>>>>       }
>>>>>>>       //        assertTrue(versionMap.size() == 3);
>>>>>>>
>>>>>>>       //        assertTrue(value1 == versionMap.get(ts1));
>>>>>>>       //        assertTrue(value2 == versionMap.get(ts2));
>>>>>>>       //        assertTrue(value3 == versionMap.get(ts3));
>>>>>>>
>>>>>>>       //        table.delete(new Delete(rowKey));
>>>>>>>       //        assertTrue(table.get(get).size() == 0);
>>>>>>>       //        table.close();
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
>>>>>>> <ta...@gmail.com>wrote:
>>>>>>>
>>>>>>>> Hi Jiajun,
>>>>>>>>
>>>>>>>> Make sure you don't have the same timestamp on every versions of
>>>> puts;
>>>>>>>> try
>>>>>>>> to put Thread.sleep() in your test(?) codes when necessary.
>>>>>>>>
>>>>>>>> You might not want to specify the timestamp by yourself but want
>> to
>>>> let
>>>>>>>> HBase to store appropriate ones.
>>>>>>>>
>>>>>>>> --
>>>>>>>> Tatsuya Kawano (Mr.)
>>>>>>>> Tokyo, Japan
>>>>>>>>
>>>>>>>>
>>>>>>>> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
>>>> wrote:
>>>>>>>>
>>>>>>>>> There are test cases for this, the functionality DOES work,
>>>> something
>>>>>>>>> is
>>>>>>>> up...
>>>>>>>>>
>>>>>>>>> Without full code and full descriptions of your tables,
>> debugging
>>>> is
>>>>>>>>> harder than it needs to be.  It's probably a simple typo or
>>>>>>>>> something,
>>>>>>>>> check your code and table descriptions again. Many people rely
>> on
>>>> the
>>>>>>>>> multi version query capabilities and it is very unlikely to be
>>>> broken
>>>>>>>>> in a released version of hbase.
>>>>>>>>>
>>>>>>>>> On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com>
>> wrote:
>>>>>>>>>> final List<KeyValue> list = result.list();
>>>>>>>>>>          for (final KeyValue it : list)
>>>>>>>>>>          {
>>>>>>>>>>              System.out.println(Bytes.toString(it.getKey()));
>>>>>>>>>>
>> System.out.println(Bytes.toString(it.getValue()));
>>>>>>>>>>          }
>>>>>>>>>> I can only get the last version!  why ? Is there any testcase
>> in
>>>>>>>>>> Hbase?
>>>>>>>>>>
>>>>>>>>>> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> /**
>>>>>>>>>>>  * Create a sorted list of the KeyValue's in this result.
>>>>>>>>>>>  *
>>>>>>>>>>>  * @return The sorted list of KeyValue's.
>>>>>>>>>>>  */
>>>>>>>>>>> public List<KeyValue> list() {
>>>>>>>>>>>   if(this.kvs == null) {
>>>>>>>>>>>     readFields();
>>>>>>>>>>>   }
>>>>>>>>>>>   return isEmpty()? null: Arrays.asList(sorted());
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> I will try it . Thank you very much!
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
>>>> buttler1@llnl.gov>
>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Result.list() ?
>>>>>>>>>>>> Putting the hbase source into your IDE of choice (yay
>> Eclipse!)
>>>> is
>>>>>>>> really
>>>>>>>>>>>> helpful
>>>>>>>>>>>>
>>>>>>>>>>>> Dave
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:42 PM
>>>>>>>>>>>> To: user@hbase.apache.org
>>>>>>>>>>>> Cc: Buttler, David
>>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
>>>> column,but
>>>>>>>> only
>>>>>>>>>>>> get the latest version of the specified column
>>>>>>>>>>>>
>>>>>>>>>>>> Thank you David !
>>>>>>>>>>>>
>>>>>>>>>>>> I alter the table schema as follow:
>>>>>>>>>>>>
>>>>>>>>>>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
>>>>>>>>>>>>> METHOD
>>>>>>>> =>
>>>>>>>>>>>> 'add'}
>>>>>>>>>>>>
>>>>>>>>>>>> How to iterate over KeyValues?  which method in Result?
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
>>>>>>>>>>>> <bu...@llnl.gov>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> What is your table schema set to?  By default it holds 3
>>>>>>>>>>>>> versions.
>>>>>>>>>>>>> Also, you might iterating over KeyValues instead of using
>> the
>>>> Map
>>>>>>>> since
>>>>>>>>>>>> you
>>>>>>>>>>>>> don't really care about the organization, just the time.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Dave
>>>>>>>>>>>>>
>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:22 PM
>>>>>>>>>>>>> To: user@hbase.apache.org
>>>>>>>>>>>>> Cc: Stack
>>>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
>>>>>>>>>>>>> column,but
>>>>>>>> only
>>>>>>>>>>>> get
>>>>>>>>>>>>> the latest version of the specified column
>>>>>>>>>>>>>
>>>>>>>>>>>>> I execute it five times at diffrent time.
>>>>>>>>>>>>>
>>>>>>>>>>>>> //put data by version
>>>>>>>>>>>>>
>>>>>>>>>>>>> final Put p = new Put(key); // key
>>>>>>>>>>>>> final long ts = System.currentTimeMillis();
>>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
>>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
>>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
>>>>>>>>>>>>>    table.put(p);
>>>>>>>>>>>>>
>>>>>>>>>>>>> So I can get five versions ,right?
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> What do you get for a result?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> You are only entering a single version of each column, a
>>>> single
>>>>>>>>>>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
>>>>>>>>>>>>>> FAMILY:q3.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> St.Ack
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cjjvictory@gmail.com
>>>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> I can't get many versions of the specified column,but only
>>>> get
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>> latest
>>>>>>>>>>>>>>> version of the specified column. Is there anyone  help me?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> //put data by version
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> final Put p = new Put(key); // key
>>>>>>>>>>>>>>> final long ts = System.currentTimeMillis();
>>>>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
>>>>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
>>>>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    table.put(p);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> //get all versions of data
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> final Get get = new Get(key);
>>>>>>>>>>>>>>>         get.addFamily(FAMILY);
>>>>>>>>>>>>>>>         get.setMaxVersions(10);
>>>>>>>>>>>>>>>         final Result result = htable.get(get);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         final NavigableMap<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
>>>>>>>>>>>>>>>         final Set<Entry<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>>>>>>>>>>>>>>>         final Iterator<Entry<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
>>>>>>>>>>>>>>>                 .iterator();
>>>>>>>>>>>>>>>         while (iterator.hasNext())
>>>>>>>>>>>>>>>         {
>>>>>>>>>>>>>>>             final Entry<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
>>>>>>>>>>>>>>>
>>>> System.out.println(Bytes.toString(next.getKey()));
>>>>>>>>>>>>> //family
>>>>>>>>>>>>>>>             for (final Entry<byte[], NavigableMap<Long,
>>>>>>>>>>>>>>> byte[]>>
>>>>>>>>>>>>>>> item : next.getValue().entrySet())
>>>>>>>>>>>>>>>             {
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> System.out.println(Bytes.toString(item.getKey()));
>>>>>>>>>>>>>>>                 for (final Entry<Long, byte[]> _item :
>>>>>>>>>>>>>>> item.getValue().entrySet())
>>>>>>>>>>>>>>>                 {
>>>>>>>>>>>>>>>                     System.out.println(_item.getKey());
>> //q
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> System.out.println(Bytes.toString(_item.getValue()));
>>>>>>>>>>>>>>> //value
>>>>>>>>>>>>>>>                 }
>>>>>>>>>>>>>>>             }
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         }
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>>>>>> jiajun
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>>>> jiajun
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>>> jiajun
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>> jiajun
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Thanks & Best regards
>>>>>>>>>> jiajun
>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Thanks & Best regards
>>>>>>> jiajun
>>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Thanks & Best regards
>>>>> jiajun
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Thanks & Best regards
>>> jiajun
>>>
>>
>
>
>
> --
> Thanks & Best regards
> jiajun



-- 
Thanks & Best regards
jiajun


Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Tatsuya Kawano <ta...@gmail.com>.
Hi, 

Sorry for not getting back to you earlier. I haven't had any chance to run HBase since then, but for this weekend , I will. I'll let you know the result soon.

Thanks, 

--
Tatsuya Kawano
Tokyo, Japan


On Feb 24, 2011, at 8:25 PM, 陈加俊 <cj...@gmail.com> wrote:

> Thank you !  HBase version is 0.20.6
> 
> On Thu, Feb 24, 2011 at 6:33 PM, Tatsuya Kawano <ta...@gmail.com> wrote:
> 
> Hmmm, it's strange. Let me try your code on my cluster this weekend. What the HBase version are you using?
> 
> --
> Tatsuya Kawano
> Tokyo, Japan
> 
> 
> On Feb 24, 2011, at 5:01 PM, 陈加俊 <cj...@gmail.com> wrote:
> 
> > It will be right if according to the following process:
> >
> > step 1: create 'testTable',{NAME => 'log' , VERSIONS => 5 }
> >
> > step 2: excute my code below
> >
> > I will be wrong if uncomment the code :table.delete(new Delete(rowKey));
> >
> > I will be run right agin If I comment the code and change the rowKey.
> >
> >
> >
> > My code below :
> >
> >
> > public class GetRowVersionsTest extends TestCase
> >
> > {
> >
> >    private final byte[] family    = Bytes.toBytes("log");
> >
> >
> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >
> >
> >    private final byte[] rowKey    = Bytes.toBytes(1000);
> >
> >
> >    private final HTable table     =
> > IDMHBaseConfiguration.getTable("testTable");
> >
> >
> >    private final long   ts1       = 1298529542218L;
> >
> >
> >    private final long   ts2       = ts1 + 100;
> >
> >
> >    private final long   ts3       = ts1 + 1000;
> >
> >
> >    private final byte[] value1    = Bytes.toBytes("value1");
> >
> >
> >    private final byte[] value2    = Bytes.toBytes("value2");
> >
> >
> >    private final byte[] value3    = Bytes.toBytes("value3");
> >
> >
> >    private void insert(final long ts, final byte[] value) throws
> > IOException
> >
> >    {
> >
> >        //        table.setAutoFlush(false);
> >
> >        final Put put = new Put(rowKey);
> >
> >        put.add(family, qualifier, ts, value);
> >
> >        table.put(put);
> >
> >    }
> >
> >
> >    private void sleep()
> >
> >    {
> >
> >        try
> >
> >        {
> >
> >            Thread.sleep(1000);
> >
> >        }
> >
> >        catch (final InterruptedException e)
> >
> >        {
> >
> >            e.printStackTrace();
> >
> >        }
> >
> >    }
> >
> >
> >    @Test
> >
> >    public void testGetRowMultipleVersions() throws Exception
> >
> >    {
> >
> >        insert(ts1, value1);
> >
> >        sleep();
> >
> >        insert(ts2, value2);
> >
> >        sleep();
> >
> >        insert(ts3, value3);
> >
> >        sleep();
> >
> >
> >        // check getRow with multiple versions
> >
> >        final Get get = new Get(rowKey);
> >
> >        get.setMaxVersions();
> >
> >        final Result r = table.get(get);
> >
> >
> >        final List<KeyValue> list = r.list();
> >
> >        for (final KeyValue kv : list)
> >
> >        {
> >
> >            System.err.println(kv.getKey());
> >
> >            System.err.println(Bytes.toString(kv.getValue()));
> >
> >        }
> >
> >
> >        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> > byte[]>>> map = r.getMap();
> >
> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> > map.get(family);
> >
> >        final NavigableMap<Long, byte[]> versionMap =
> > familyMap.get(qualifier);
> >
> >        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >
> >        {
> >
> >            System.err.println(entry.getKey());
> >
> >            System.err.println(Bytes.toString(entry.getValue()));
> >
> >        }
> >
> >        //        assertTrue(versionMap.size() == 3);
> >
> >
> >        //        assertTrue(value1 == versionMap.get(ts1));
> >
> >        //        assertTrue(value2 == versionMap.get(ts2));
> >
> >        //        assertTrue(value3 == versionMap.get(ts3));
> >
> >
> >        // table.delete(new Delete(rowKey));
> >
> >        // assertTrue(table.get(get).size() == 0);
> >
> >        //        table.close();
> >
> >    }
> >
> >
> > On Thu, Feb 24, 2011 at 3:41 PM, Lars George <la...@gmail.com> wrote:
> >
> >> What error are you getting? The NPE?
> >>
> >> As Tatsuya pointed out, you are using the same time stamps:
> >>
> >>  private final long   ts2       = ts1 + 100;
> >>
> >>  private final long   ts3       = ts1 + 100;
> >>
> >> That cannot work, you are overriding cells.
> >>
> >> Lars
> >>
> >> On Thu, Feb 24, 2011 at 8:34 AM, 陈加俊 <cj...@gmail.com> wrote:
> >>> HTable object has not setAutoFlush. It's default value is true at my
> >>> cluster.So I set it true as follows ,but error is still the same.
> >>>
> >>> public class GetRowVersionsTest extends TestCase
> >>> {
> >>>   private final byte[] family    = Bytes.toBytes("log");
> >>>
> >>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >>>
> >>>   private final byte[] rowKey    = Bytes.toBytes(1);
> >>>
> >>>   private final long   ts1       = 1298529542218L;
> >>>
> >>>   private final long   ts2       = ts1 + 100;
> >>>
> >>>   private final long   ts3       = ts1 + 100;
> >>>
> >>>   private final byte[] value1    = Bytes.toBytes("value1");
> >>>
> >>>   private final byte[] value2    = Bytes.toBytes("value2");
> >>>
> >>>   private final byte[] value3    = Bytes.toBytes("value3");
> >>>
> >>>   private void insert(final long ts, final byte[] value) throws
> >>> IOException
> >>>   {
> >>>       final HTable table =
> >>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>       table.setAutoFlush(false);
> >>>       final Put put = new Put(rowKey);
> >>>       put.add(family, qualifier, ts, value);
> >>>       table.put(put);
> >>>   }
> >>>
> >>>   private void sleep()
> >>>   {
> >>>       try
> >>>       {
> >>>           Thread.sleep(1000);
> >>>       }
> >>>       catch (final InterruptedException e)
> >>>       {
> >>>           e.printStackTrace();
> >>>       }
> >>>   }
> >>>
> >>>   @Test
> >>>   public void testGetRowMultipleVersions() throws Exception
> >>>   {
> >>>       insert(ts1, value1);
> >>>       sleep();
> >>>       insert(ts2, value2);
> >>>       sleep();
> >>>       insert(ts3, value3);
> >>>       sleep();
> >>>
> >>>       // check getRow with multiple versions
> >>>       final HTable table =
> >>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>       final Get get = new Get(rowKey);
> >>>       get.setMaxVersions();
> >>>       final Result r = table.get(get);
> >>>
> >>>       final List<KeyValue> list = r.list();
> >>>       for (final KeyValue kv : list)
> >>>       {
> >>>           System.err.println(kv.getKey());
> >>>           System.err.println(Bytes.toString(kv.getValue()));
> >>>       }
> >>>
> >>>       final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> >>> byte[]>>> map = r.getMap();
> >>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> >>> map.get(family);
> >>>       final NavigableMap<Long, byte[]> versionMap =
> >>> familyMap.get(qualifier);
> >>>       for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >>>       {
> >>>           System.err.println(entry.getKey());
> >>>           System.err.println(Bytes.toString(entry.getValue()));
> >>>       }
> >>>       //        assertTrue(versionMap.size() == 3);
> >>>
> >>>       //        assertTrue(value1 == versionMap.get(ts1));
> >>>       //        assertTrue(value2 == versionMap.get(ts2));
> >>>       //        assertTrue(value3 == versionMap.get(ts3));
> >>>
> >>>       //        table.delete(new Delete(rowKey));
> >>>       //        assertTrue(table.get(get).size() == 0);
> >>>       //        table.close();
> >>>   }
> >>>
> >>> On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com> wrote:
> >>>
> >>>> Does the HTable object have setAutoFlush(false) turned on by any chance?
> >>>>
> >>>> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
> >>>>> line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> >>>>> familyMap = map.get(family);
> >>>>> map is null ,
> >>>>> and strangely  I use r.list() instead,
> >>>>> final List<KeyValue> list = r.list();
> >>>>> r is null !
> >>>>>
> >>>>>
> >>>>> 2011/2/24 Ryan Rawson <ry...@gmail.com>
> >>>>>>
> >>>>>> Which line is line 89?
> >>>>>>
> >>>>>> Also it's preferable to do:
> >>>>>> assertEquals(3, versionMap.size());
> >>>>>> vs:
> >>>>>> assertTrue(versionMap.size() == 3);
> >>>>>>
> >>>>>> since the error messages from the former are more descriptive
> >>>>>> "expected 3 was 2".
> >>>>>>
> >>>>>> looking at the code it looks like it should work...
> >>>>>>
> >>>>>> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
> >>>>>>> This is my test case ,but I get NPE some times .
> >>>>>>>
> >>>>>>> java.lang.NullPointerException
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
> >>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >>>>>>> at java.lang.reflect.Method.invoke(Method.java:597)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> >>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >>>>>>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >>>>>>> at
> >> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >>>>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >>>>>>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >>>>>>>
> >>>>>>> public class GetRowVersionsTest extends TestCase
> >>>>>>> {
> >>>>>>>   private final byte[] family    = Bytes.toBytes("log");
> >>>>>>>
> >>>>>>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >>>>>>>
> >>>>>>>   private final byte[] rowKey    = Bytes.toBytes(1);
> >>>>>>>
> >>>>>>>   private final HTable table     =
> >>>>>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>>>>>
> >>>>>>>   private final long   ts1       = 1298529542218L;
> >>>>>>>
> >>>>>>>   private final long   ts2       = ts1 + 100;
> >>>>>>>
> >>>>>>>   private final long   ts3       = ts1 + 100;
> >>>>>>>
> >>>>>>>   private final byte[] value1    = Bytes.toBytes("value1");
> >>>>>>>
> >>>>>>>   private final byte[] value2    = Bytes.toBytes("value2");
> >>>>>>>
> >>>>>>>   private final byte[] value3    = Bytes.toBytes("value3");
> >>>>>>>
> >>>>>>>   private void insert(final long ts, final byte[] value) throws
> >>>>>>> IOException
> >>>>>>>   {
> >>>>>>>       final Put put = new Put(rowKey);
> >>>>>>>       put.add(family, qualifier, ts, value);
> >>>>>>>       table.put(put);
> >>>>>>>   }
> >>>>>>>
> >>>>>>>   private void sleep()
> >>>>>>>   {
> >>>>>>>       try
> >>>>>>>       {
> >>>>>>>           Thread.sleep(1000);
> >>>>>>>       }
> >>>>>>>       catch (final InterruptedException e)
> >>>>>>>       {
> >>>>>>>           e.printStackTrace();
> >>>>>>>       }
> >>>>>>>   }
> >>>>>>>
> >>>>>>>   @Test
> >>>>>>>   public void testGetRowMultipleVersions() throws Exception
> >>>>>>>   {
> >>>>>>>       insert(ts1, value1);
> >>>>>>>       sleep();
> >>>>>>>       insert(ts2, value2);
> >>>>>>>       sleep();
> >>>>>>>       insert(ts3, value3);
> >>>>>>>       sleep();
> >>>>>>>
> >>>>>>>       // check getRow with multiple versions
> >>>>>>>       final Get get = new Get(rowKey);
> >>>>>>>       get.setMaxVersions();
> >>>>>>>       final Result r = table.get(get);
> >>>>>>>       final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long,
> >>>>>>> byte[]>>> map = r.getMap();
> >>>>>>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> >>>> familyMap
> >>>>>>> =
> >>>>>>> map.get(family);
> >>>>>>>       final NavigableMap<Long, byte[]> versionMap =
> >>>>>>> familyMap.get(qualifier);
> >>>>>>>       for (final Map.Entry<Long, byte[]> entry :
> >>>> versionMap.entrySet())
> >>>>>>>       {
> >>>>>>>           System.err.println(entry.getKey());
> >>>>>>>           System.err.println(Bytes.toString(entry.getValue()));
> >>>>>>>       }
> >>>>>>>       //        assertTrue(versionMap.size() == 3);
> >>>>>>>
> >>>>>>>       //        assertTrue(value1 == versionMap.get(ts1));
> >>>>>>>       //        assertTrue(value2 == versionMap.get(ts2));
> >>>>>>>       //        assertTrue(value3 == versionMap.get(ts3));
> >>>>>>>
> >>>>>>>       //        table.delete(new Delete(rowKey));
> >>>>>>>       //        assertTrue(table.get(get).size() == 0);
> >>>>>>>       //        table.close();
> >>>>>>>   }
> >>>>>>> }
> >>>>>>>
> >>>>>>>
> >>>>>>> On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
> >>>>>>> <ta...@gmail.com>wrote:
> >>>>>>>
> >>>>>>>> Hi Jiajun,
> >>>>>>>>
> >>>>>>>> Make sure you don't have the same timestamp on every versions of
> >>>> puts;
> >>>>>>>> try
> >>>>>>>> to put Thread.sleep() in your test(?) codes when necessary.
> >>>>>>>>
> >>>>>>>> You might not want to specify the timestamp by yourself but want
> >> to
> >>>> let
> >>>>>>>> HBase to store appropriate ones.
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Tatsuya Kawano (Mr.)
> >>>>>>>> Tokyo, Japan
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
> >>>> wrote:
> >>>>>>>>
> >>>>>>>>> There are test cases for this, the functionality DOES work,
> >>>> something
> >>>>>>>>> is
> >>>>>>>> up...
> >>>>>>>>>
> >>>>>>>>> Without full code and full descriptions of your tables,
> >> debugging
> >>>> is
> >>>>>>>>> harder than it needs to be.  It's probably a simple typo or
> >>>>>>>>> something,
> >>>>>>>>> check your code and table descriptions again. Many people rely
> >> on
> >>>> the
> >>>>>>>>> multi version query capabilities and it is very unlikely to be
> >>>> broken
> >>>>>>>>> in a released version of hbase.
> >>>>>>>>>
> >>>>>>>>> On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com>
> >> wrote:
> >>>>>>>>>> final List<KeyValue> list = result.list();
> >>>>>>>>>>          for (final KeyValue it : list)
> >>>>>>>>>>          {
> >>>>>>>>>>              System.out.println(Bytes.toString(it.getKey()));
> >>>>>>>>>>
> >> System.out.println(Bytes.toString(it.getValue()));
> >>>>>>>>>>          }
> >>>>>>>>>> I can only get the last version!  why ? Is there any testcase
> >> in
> >>>>>>>>>> Hbase?
> >>>>>>>>>>
> >>>>>>>>>> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
> >>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> /**
> >>>>>>>>>>>  * Create a sorted list of the KeyValue's in this result.
> >>>>>>>>>>>  *
> >>>>>>>>>>>  * @return The sorted list of KeyValue's.
> >>>>>>>>>>>  */
> >>>>>>>>>>> public List<KeyValue> list() {
> >>>>>>>>>>>   if(this.kvs == null) {
> >>>>>>>>>>>     readFields();
> >>>>>>>>>>>   }
> >>>>>>>>>>>   return isEmpty()? null: Arrays.asList(sorted());
> >>>>>>>>>>> }
> >>>>>>>>>>>
> >>>>>>>>>>> I will try it . Thank you very much!
> >>>>>>>>>>>
> >>>>>>>>>>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
> >>>> buttler1@llnl.gov>
> >>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Result.list() ?
> >>>>>>>>>>>> Putting the hbase source into your IDE of choice (yay
> >> Eclipse!)
> >>>> is
> >>>>>>>> really
> >>>>>>>>>>>> helpful
> >>>>>>>>>>>>
> >>>>>>>>>>>> Dave
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >>>>>>>>>>>> To: user@hbase.apache.org
> >>>>>>>>>>>> Cc: Buttler, David
> >>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
> >>>> column,but
> >>>>>>>> only
> >>>>>>>>>>>> get the latest version of the specified column
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thank you David !
> >>>>>>>>>>>>
> >>>>>>>>>>>> I alter the table schema as follow:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
> >>>>>>>>>>>>> METHOD
> >>>>>>>> =>
> >>>>>>>>>>>> 'add'}
> >>>>>>>>>>>>
> >>>>>>>>>>>> How to iterate over KeyValues?  which method in Result?
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
> >>>>>>>>>>>> <bu...@llnl.gov>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> What is your table schema set to?  By default it holds 3
> >>>>>>>>>>>>> versions.
> >>>>>>>>>>>>> Also, you might iterating over KeyValues instead of using
> >> the
> >>>> Map
> >>>>>>>> since
> >>>>>>>>>>>> you
> >>>>>>>>>>>>> don't really care about the organization, just the time.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Dave
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >>>>>>>>>>>>> To: user@hbase.apache.org
> >>>>>>>>>>>>> Cc: Stack
> >>>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
> >>>>>>>>>>>>> column,but
> >>>>>>>> only
> >>>>>>>>>>>> get
> >>>>>>>>>>>>> the latest version of the specified column
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> I execute it five times at diffrent time.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> //put data by version
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> final Put p = new Put(key); // key
> >>>>>>>>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
> >>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
> >>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
> >>>>>>>>>>>>>    table.put(p);
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> So I can get five versions ,right?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
> >>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> What do you get for a result?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> You are only entering a single version of each column, a
> >>>> single
> >>>>>>>>>>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
> >>>>>>>>>>>>>> FAMILY:q3.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> St.Ack
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cjjvictory@gmail.com
> >>>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>> I can't get many versions of the specified column,but only
> >>>> get
> >>>>>>>>>>>>>>> the
> >>>>>>>>>>>>> latest
> >>>>>>>>>>>>>>> version of the specified column. Is there anyone  help me?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> //put data by version
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> final Put p = new Put(key); // key
> >>>>>>>>>>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
> >>>>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
> >>>>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    table.put(p);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> //get all versions of data
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> final Get get = new Get(key);
> >>>>>>>>>>>>>>>         get.addFamily(FAMILY);
> >>>>>>>>>>>>>>>         get.setMaxVersions(10);
> >>>>>>>>>>>>>>>         final Result result = htable.get(get);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>         final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >>>>>>>>>>>>>>>         final Set<Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >>>>>>>>>>>>>>>         final Iterator<Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >>>>>>>>>>>>>>>                 .iterator();
> >>>>>>>>>>>>>>>         while (iterator.hasNext())
> >>>>>>>>>>>>>>>         {
> >>>>>>>>>>>>>>>             final Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >>>>>>>>>>>>>>>
> >>>> System.out.println(Bytes.toString(next.getKey()));
> >>>>>>>>>>>>> //family
> >>>>>>>>>>>>>>>             for (final Entry<byte[], NavigableMap<Long,
> >>>>>>>>>>>>>>> byte[]>>
> >>>>>>>>>>>>>>> item : next.getValue().entrySet())
> >>>>>>>>>>>>>>>             {
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> System.out.println(Bytes.toString(item.getKey()));
> >>>>>>>>>>>>>>>                 for (final Entry<Long, byte[]> _item :
> >>>>>>>>>>>>>>> item.getValue().entrySet())
> >>>>>>>>>>>>>>>                 {
> >>>>>>>>>>>>>>>                     System.out.println(_item.getKey());
> >> //q
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >>>>>>>>>>>>>>> //value
> >>>>>>>>>>>>>>>                 }
> >>>>>>>>>>>>>>>             }
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>         }
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>>>>> jiajun
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>>> jiajun
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> --
> >>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>> jiajun
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> --
> >>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>> jiajun
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> Thanks & Best regards
> >>>>>>>>>> jiajun
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Thanks & Best regards
> >>>>>>> jiajun
> >>>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Thanks & Best regards
> >>>>> jiajun
> >>>>>
> >>>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Thanks & Best regards
> >>> jiajun
> >>>
> >>
> >
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
> 
> 
> 
> -- 
> Thanks & Best regards
> jiajun
> 

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
Thank you !  HBase version is 0.20.6

On Thu, Feb 24, 2011 at 6:33 PM, Tatsuya Kawano <ta...@gmail.com>wrote:

>
> Hmmm, it's strange. Let me try your code on my cluster this weekend. What
> the HBase version are you using?
>
> --
> Tatsuya Kawano
> Tokyo, Japan
>
>
> On Feb 24, 2011, at 5:01 PM, 陈加俊 <cj...@gmail.com> wrote:
>
> > It will be right if according to the following process:
> >
> > step 1: create 'testTable',{NAME => 'log' , VERSIONS => 5 }
> >
> > step 2: excute my code below
> >
> > I will be wrong if uncomment the code :table.delete(new Delete(rowKey));
> >
> > I will be run right agin If I comment the code and change the rowKey.
> >
> >
> >
> > My code below :
> >
> >
> > public class GetRowVersionsTest extends TestCase
> >
> > {
> >
> >    private final byte[] family    = Bytes.toBytes("log");
> >
> >
> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >
> >
> >    private final byte[] rowKey    = Bytes.toBytes(1000);
> >
> >
> >    private final HTable table     =
> > IDMHBaseConfiguration.getTable("testTable");
> >
> >
> >    private final long   ts1       = 1298529542218L;
> >
> >
> >    private final long   ts2       = ts1 + 100;
> >
> >
> >    private final long   ts3       = ts1 + 1000;
> >
> >
> >    private final byte[] value1    = Bytes.toBytes("value1");
> >
> >
> >    private final byte[] value2    = Bytes.toBytes("value2");
> >
> >
> >    private final byte[] value3    = Bytes.toBytes("value3");
> >
> >
> >    private void insert(final long ts, final byte[] value) throws
> > IOException
> >
> >    {
> >
> >        //        table.setAutoFlush(false);
> >
> >        final Put put = new Put(rowKey);
> >
> >        put.add(family, qualifier, ts, value);
> >
> >        table.put(put);
> >
> >    }
> >
> >
> >    private void sleep()
> >
> >    {
> >
> >        try
> >
> >        {
> >
> >            Thread.sleep(1000);
> >
> >        }
> >
> >        catch (final InterruptedException e)
> >
> >        {
> >
> >            e.printStackTrace();
> >
> >        }
> >
> >    }
> >
> >
> >    @Test
> >
> >    public void testGetRowMultipleVersions() throws Exception
> >
> >    {
> >
> >        insert(ts1, value1);
> >
> >        sleep();
> >
> >        insert(ts2, value2);
> >
> >        sleep();
> >
> >        insert(ts3, value3);
> >
> >        sleep();
> >
> >
> >        // check getRow with multiple versions
> >
> >        final Get get = new Get(rowKey);
> >
> >        get.setMaxVersions();
> >
> >        final Result r = table.get(get);
> >
> >
> >        final List<KeyValue> list = r.list();
> >
> >        for (final KeyValue kv : list)
> >
> >        {
> >
> >            System.err.println(kv.getKey());
> >
> >            System.err.println(Bytes.toString(kv.getValue()));
> >
> >        }
> >
> >
> >        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> > byte[]>>> map = r.getMap();
> >
> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> > map.get(family);
> >
> >        final NavigableMap<Long, byte[]> versionMap =
> > familyMap.get(qualifier);
> >
> >        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >
> >        {
> >
> >            System.err.println(entry.getKey());
> >
> >            System.err.println(Bytes.toString(entry.getValue()));
> >
> >        }
> >
> >        //        assertTrue(versionMap.size() == 3);
> >
> >
> >        //        assertTrue(value1 == versionMap.get(ts1));
> >
> >        //        assertTrue(value2 == versionMap.get(ts2));
> >
> >        //        assertTrue(value3 == versionMap.get(ts3));
> >
> >
> >        // table.delete(new Delete(rowKey));
> >
> >        // assertTrue(table.get(get).size() == 0);
> >
> >        //        table.close();
> >
> >    }
> >
> >
> > On Thu, Feb 24, 2011 at 3:41 PM, Lars George <la...@gmail.com>
> wrote:
> >
> >> What error are you getting? The NPE?
> >>
> >> As Tatsuya pointed out, you are using the same time stamps:
> >>
> >>  private final long   ts2       = ts1 + 100;
> >>
> >>  private final long   ts3       = ts1 + 100;
> >>
> >> That cannot work, you are overriding cells.
> >>
> >> Lars
> >>
> >> On Thu, Feb 24, 2011 at 8:34 AM, 陈加俊 <cj...@gmail.com> wrote:
> >>> HTable object has not setAutoFlush. It's default value is true at my
> >>> cluster.So I set it true as follows ,but error is still the same.
> >>>
> >>> public class GetRowVersionsTest extends TestCase
> >>> {
> >>>   private final byte[] family    = Bytes.toBytes("log");
> >>>
> >>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >>>
> >>>   private final byte[] rowKey    = Bytes.toBytes(1);
> >>>
> >>>   private final long   ts1       = 1298529542218L;
> >>>
> >>>   private final long   ts2       = ts1 + 100;
> >>>
> >>>   private final long   ts3       = ts1 + 100;
> >>>
> >>>   private final byte[] value1    = Bytes.toBytes("value1");
> >>>
> >>>   private final byte[] value2    = Bytes.toBytes("value2");
> >>>
> >>>   private final byte[] value3    = Bytes.toBytes("value3");
> >>>
> >>>   private void insert(final long ts, final byte[] value) throws
> >>> IOException
> >>>   {
> >>>       final HTable table =
> >>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>       table.setAutoFlush(false);
> >>>       final Put put = new Put(rowKey);
> >>>       put.add(family, qualifier, ts, value);
> >>>       table.put(put);
> >>>   }
> >>>
> >>>   private void sleep()
> >>>   {
> >>>       try
> >>>       {
> >>>           Thread.sleep(1000);
> >>>       }
> >>>       catch (final InterruptedException e)
> >>>       {
> >>>           e.printStackTrace();
> >>>       }
> >>>   }
> >>>
> >>>   @Test
> >>>   public void testGetRowMultipleVersions() throws Exception
> >>>   {
> >>>       insert(ts1, value1);
> >>>       sleep();
> >>>       insert(ts2, value2);
> >>>       sleep();
> >>>       insert(ts3, value3);
> >>>       sleep();
> >>>
> >>>       // check getRow with multiple versions
> >>>       final HTable table =
> >>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>       final Get get = new Get(rowKey);
> >>>       get.setMaxVersions();
> >>>       final Result r = table.get(get);
> >>>
> >>>       final List<KeyValue> list = r.list();
> >>>       for (final KeyValue kv : list)
> >>>       {
> >>>           System.err.println(kv.getKey());
> >>>           System.err.println(Bytes.toString(kv.getValue()));
> >>>       }
> >>>
> >>>       final NavigableMap<byte[], NavigableMap<byte[],
> NavigableMap<Long,
> >>> byte[]>>> map = r.getMap();
> >>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap
> =
> >>> map.get(family);
> >>>       final NavigableMap<Long, byte[]> versionMap =
> >>> familyMap.get(qualifier);
> >>>       for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >>>       {
> >>>           System.err.println(entry.getKey());
> >>>           System.err.println(Bytes.toString(entry.getValue()));
> >>>       }
> >>>       //        assertTrue(versionMap.size() == 3);
> >>>
> >>>       //        assertTrue(value1 == versionMap.get(ts1));
> >>>       //        assertTrue(value2 == versionMap.get(ts2));
> >>>       //        assertTrue(value3 == versionMap.get(ts3));
> >>>
> >>>       //        table.delete(new Delete(rowKey));
> >>>       //        assertTrue(table.get(get).size() == 0);
> >>>       //        table.close();
> >>>   }
> >>>
> >>> On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com>
> wrote:
> >>>
> >>>> Does the HTable object have setAutoFlush(false) turned on by any
> chance?
> >>>>
> >>>> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
> >>>>> line 89:        final NavigableMap<byte[], NavigableMap<Long,
> byte[]>>
> >>>>> familyMap = map.get(family);
> >>>>> map is null ,
> >>>>> and strangely  I use r.list() instead,
> >>>>> final List<KeyValue> list = r.list();
> >>>>> r is null !
> >>>>>
> >>>>>
> >>>>> 2011/2/24 Ryan Rawson <ry...@gmail.com>
> >>>>>>
> >>>>>> Which line is line 89?
> >>>>>>
> >>>>>> Also it's preferable to do:
> >>>>>> assertEquals(3, versionMap.size());
> >>>>>> vs:
> >>>>>> assertTrue(versionMap.size() == 3);
> >>>>>>
> >>>>>> since the error messages from the former are more descriptive
> >>>>>> "expected 3 was 2".
> >>>>>>
> >>>>>> looking at the code it looks like it should work...
> >>>>>>
> >>>>>> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
> >>>>>>> This is my test case ,but I get NPE some times .
> >>>>>>>
> >>>>>>> java.lang.NullPointerException
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
> >>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >>>>>>> at java.lang.reflect.Method.invoke(Method.java:597)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> >>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >>>>>>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >>>>>>> at
> >> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >>>>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >>>>>>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >>>>>>> at
> >>>>>>>
> >>>>>>>
> >>>>
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >>>>>>>
> >>>>>>> public class GetRowVersionsTest extends TestCase
> >>>>>>> {
> >>>>>>>   private final byte[] family    = Bytes.toBytes("log");
> >>>>>>>
> >>>>>>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >>>>>>>
> >>>>>>>   private final byte[] rowKey    = Bytes.toBytes(1);
> >>>>>>>
> >>>>>>>   private final HTable table     =
> >>>>>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >>>>>>>
> >>>>>>>   private final long   ts1       = 1298529542218L;
> >>>>>>>
> >>>>>>>   private final long   ts2       = ts1 + 100;
> >>>>>>>
> >>>>>>>   private final long   ts3       = ts1 + 100;
> >>>>>>>
> >>>>>>>   private final byte[] value1    = Bytes.toBytes("value1");
> >>>>>>>
> >>>>>>>   private final byte[] value2    = Bytes.toBytes("value2");
> >>>>>>>
> >>>>>>>   private final byte[] value3    = Bytes.toBytes("value3");
> >>>>>>>
> >>>>>>>   private void insert(final long ts, final byte[] value) throws
> >>>>>>> IOException
> >>>>>>>   {
> >>>>>>>       final Put put = new Put(rowKey);
> >>>>>>>       put.add(family, qualifier, ts, value);
> >>>>>>>       table.put(put);
> >>>>>>>   }
> >>>>>>>
> >>>>>>>   private void sleep()
> >>>>>>>   {
> >>>>>>>       try
> >>>>>>>       {
> >>>>>>>           Thread.sleep(1000);
> >>>>>>>       }
> >>>>>>>       catch (final InterruptedException e)
> >>>>>>>       {
> >>>>>>>           e.printStackTrace();
> >>>>>>>       }
> >>>>>>>   }
> >>>>>>>
> >>>>>>>   @Test
> >>>>>>>   public void testGetRowMultipleVersions() throws Exception
> >>>>>>>   {
> >>>>>>>       insert(ts1, value1);
> >>>>>>>       sleep();
> >>>>>>>       insert(ts2, value2);
> >>>>>>>       sleep();
> >>>>>>>       insert(ts3, value3);
> >>>>>>>       sleep();
> >>>>>>>
> >>>>>>>       // check getRow with multiple versions
> >>>>>>>       final Get get = new Get(rowKey);
> >>>>>>>       get.setMaxVersions();
> >>>>>>>       final Result r = table.get(get);
> >>>>>>>       final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long,
> >>>>>>> byte[]>>> map = r.getMap();
> >>>>>>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> >>>> familyMap
> >>>>>>> =
> >>>>>>> map.get(family);
> >>>>>>>       final NavigableMap<Long, byte[]> versionMap =
> >>>>>>> familyMap.get(qualifier);
> >>>>>>>       for (final Map.Entry<Long, byte[]> entry :
> >>>> versionMap.entrySet())
> >>>>>>>       {
> >>>>>>>           System.err.println(entry.getKey());
> >>>>>>>           System.err.println(Bytes.toString(entry.getValue()));
> >>>>>>>       }
> >>>>>>>       //        assertTrue(versionMap.size() == 3);
> >>>>>>>
> >>>>>>>       //        assertTrue(value1 == versionMap.get(ts1));
> >>>>>>>       //        assertTrue(value2 == versionMap.get(ts2));
> >>>>>>>       //        assertTrue(value3 == versionMap.get(ts3));
> >>>>>>>
> >>>>>>>       //        table.delete(new Delete(rowKey));
> >>>>>>>       //        assertTrue(table.get(get).size() == 0);
> >>>>>>>       //        table.close();
> >>>>>>>   }
> >>>>>>> }
> >>>>>>>
> >>>>>>>
> >>>>>>> On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
> >>>>>>> <ta...@gmail.com>wrote:
> >>>>>>>
> >>>>>>>> Hi Jiajun,
> >>>>>>>>
> >>>>>>>> Make sure you don't have the same timestamp on every versions of
> >>>> puts;
> >>>>>>>> try
> >>>>>>>> to put Thread.sleep() in your test(?) codes when necessary.
> >>>>>>>>
> >>>>>>>> You might not want to specify the timestamp by yourself but want
> >> to
> >>>> let
> >>>>>>>> HBase to store appropriate ones.
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Tatsuya Kawano (Mr.)
> >>>>>>>> Tokyo, Japan
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
> >>>> wrote:
> >>>>>>>>
> >>>>>>>>> There are test cases for this, the functionality DOES work,
> >>>> something
> >>>>>>>>> is
> >>>>>>>> up...
> >>>>>>>>>
> >>>>>>>>> Without full code and full descriptions of your tables,
> >> debugging
> >>>> is
> >>>>>>>>> harder than it needs to be.  It's probably a simple typo or
> >>>>>>>>> something,
> >>>>>>>>> check your code and table descriptions again. Many people rely
> >> on
> >>>> the
> >>>>>>>>> multi version query capabilities and it is very unlikely to be
> >>>> broken
> >>>>>>>>> in a released version of hbase.
> >>>>>>>>>
> >>>>>>>>> On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com>
> >> wrote:
> >>>>>>>>>> final List<KeyValue> list = result.list();
> >>>>>>>>>>          for (final KeyValue it : list)
> >>>>>>>>>>          {
> >>>>>>>>>>              System.out.println(Bytes.toString(it.getKey()));
> >>>>>>>>>>
> >> System.out.println(Bytes.toString(it.getValue()));
> >>>>>>>>>>          }
> >>>>>>>>>> I can only get the last version!  why ? Is there any testcase
> >> in
> >>>>>>>>>> Hbase?
> >>>>>>>>>>
> >>>>>>>>>> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
> >>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> /**
> >>>>>>>>>>>  * Create a sorted list of the KeyValue's in this result.
> >>>>>>>>>>>  *
> >>>>>>>>>>>  * @return The sorted list of KeyValue's.
> >>>>>>>>>>>  */
> >>>>>>>>>>> public List<KeyValue> list() {
> >>>>>>>>>>>   if(this.kvs == null) {
> >>>>>>>>>>>     readFields();
> >>>>>>>>>>>   }
> >>>>>>>>>>>   return isEmpty()? null: Arrays.asList(sorted());
> >>>>>>>>>>> }
> >>>>>>>>>>>
> >>>>>>>>>>> I will try it . Thank you very much!
> >>>>>>>>>>>
> >>>>>>>>>>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
> >>>> buttler1@llnl.gov>
> >>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Result.list() ?
> >>>>>>>>>>>> Putting the hbase source into your IDE of choice (yay
> >> Eclipse!)
> >>>> is
> >>>>>>>> really
> >>>>>>>>>>>> helpful
> >>>>>>>>>>>>
> >>>>>>>>>>>> Dave
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >>>>>>>>>>>> To: user@hbase.apache.org
> >>>>>>>>>>>> Cc: Buttler, David
> >>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
> >>>> column,but
> >>>>>>>> only
> >>>>>>>>>>>> get the latest version of the specified column
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thank you David !
> >>>>>>>>>>>>
> >>>>>>>>>>>> I alter the table schema as follow:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
> >>>>>>>>>>>>> METHOD
> >>>>>>>> =>
> >>>>>>>>>>>> 'add'}
> >>>>>>>>>>>>
> >>>>>>>>>>>> How to iterate over KeyValues?  which method in Result?
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
> >>>>>>>>>>>> <bu...@llnl.gov>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> What is your table schema set to?  By default it holds 3
> >>>>>>>>>>>>> versions.
> >>>>>>>>>>>>> Also, you might iterating over KeyValues instead of using
> >> the
> >>>> Map
> >>>>>>>> since
> >>>>>>>>>>>> you
> >>>>>>>>>>>>> don't really care about the organization, just the time.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Dave
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >>>>>>>>>>>>> To: user@hbase.apache.org
> >>>>>>>>>>>>> Cc: Stack
> >>>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
> >>>>>>>>>>>>> column,but
> >>>>>>>> only
> >>>>>>>>>>>> get
> >>>>>>>>>>>>> the latest version of the specified column
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> I execute it five times at diffrent time.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> //put data by version
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> final Put p = new Put(key); // key
> >>>>>>>>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
> >>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
> >>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
> >>>>>>>>>>>>>    table.put(p);
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> So I can get five versions ,right?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
> >>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> What do you get for a result?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> You are only entering a single version of each column, a
> >>>> single
> >>>>>>>>>>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
> >>>>>>>>>>>>>> FAMILY:q3.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> St.Ack
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cjjvictory@gmail.com
> >>>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>> I can't get many versions of the specified column,but only
> >>>> get
> >>>>>>>>>>>>>>> the
> >>>>>>>>>>>>> latest
> >>>>>>>>>>>>>>> version of the specified column. Is there anyone  help me?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> //put data by version
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> final Put p = new Put(key); // key
> >>>>>>>>>>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
> >>>>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
> >>>>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    table.put(p);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> //get all versions of data
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> final Get get = new Get(key);
> >>>>>>>>>>>>>>>         get.addFamily(FAMILY);
> >>>>>>>>>>>>>>>         get.setMaxVersions(10);
> >>>>>>>>>>>>>>>         final Result result = htable.get(get);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>         final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >>>>>>>>>>>>>>>         final Set<Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >>>>>>>>>>>>>>>         final Iterator<Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >>>>>>>>>>>>>>>                 .iterator();
> >>>>>>>>>>>>>>>         while (iterator.hasNext())
> >>>>>>>>>>>>>>>         {
> >>>>>>>>>>>>>>>             final Entry<byte[], NavigableMap<byte[],
> >>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >>>>>>>>>>>>>>>
> >>>> System.out.println(Bytes.toString(next.getKey()));
> >>>>>>>>>>>>> //family
> >>>>>>>>>>>>>>>             for (final Entry<byte[], NavigableMap<Long,
> >>>>>>>>>>>>>>> byte[]>>
> >>>>>>>>>>>>>>> item : next.getValue().entrySet())
> >>>>>>>>>>>>>>>             {
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> System.out.println(Bytes.toString(item.getKey()));
> >>>>>>>>>>>>>>>                 for (final Entry<Long, byte[]> _item :
> >>>>>>>>>>>>>>> item.getValue().entrySet())
> >>>>>>>>>>>>>>>                 {
> >>>>>>>>>>>>>>>                     System.out.println(_item.getKey());
> >> //q
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >>>>>>>>>>>>>>> //value
> >>>>>>>>>>>>>>>                 }
> >>>>>>>>>>>>>>>             }
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>         }
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>>>>> jiajun
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>>> jiajun
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> --
> >>>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>>> jiajun
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> --
> >>>>>>>>>>> Thanks & Best regards
> >>>>>>>>>>> jiajun
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> Thanks & Best regards
> >>>>>>>>>> jiajun
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Thanks & Best regards
> >>>>>>> jiajun
> >>>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Thanks & Best regards
> >>>>> jiajun
> >>>>>
> >>>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Thanks & Best regards
> >>> jiajun
> >>>
> >>
> >
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Tatsuya Kawano <ta...@gmail.com>.
Hmmm, it's strange. Let me try your code on my cluster this weekend. What the HBase version are you using?

--
Tatsuya Kawano
Tokyo, Japan


On Feb 24, 2011, at 5:01 PM, 陈加俊 <cj...@gmail.com> wrote:

> It will be right if according to the following process:
> 
> step 1: create 'testTable',{NAME => 'log' , VERSIONS => 5 }
> 
> step 2: excute my code below
> 
> I will be wrong if uncomment the code :table.delete(new Delete(rowKey));
> 
> I will be run right agin If I comment the code and change the rowKey.
> 
> 
> 
> My code below :
> 
> 
> public class GetRowVersionsTest extends TestCase
> 
> {
> 
>    private final byte[] family    = Bytes.toBytes("log");
> 
> 
>    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> 
> 
>    private final byte[] rowKey    = Bytes.toBytes(1000);
> 
> 
>    private final HTable table     =
> IDMHBaseConfiguration.getTable("testTable");
> 
> 
>    private final long   ts1       = 1298529542218L;
> 
> 
>    private final long   ts2       = ts1 + 100;
> 
> 
>    private final long   ts3       = ts1 + 1000;
> 
> 
>    private final byte[] value1    = Bytes.toBytes("value1");
> 
> 
>    private final byte[] value2    = Bytes.toBytes("value2");
> 
> 
>    private final byte[] value3    = Bytes.toBytes("value3");
> 
> 
>    private void insert(final long ts, final byte[] value) throws
> IOException
> 
>    {
> 
>        //        table.setAutoFlush(false);
> 
>        final Put put = new Put(rowKey);
> 
>        put.add(family, qualifier, ts, value);
> 
>        table.put(put);
> 
>    }
> 
> 
>    private void sleep()
> 
>    {
> 
>        try
> 
>        {
> 
>            Thread.sleep(1000);
> 
>        }
> 
>        catch (final InterruptedException e)
> 
>        {
> 
>            e.printStackTrace();
> 
>        }
> 
>    }
> 
> 
>    @Test
> 
>    public void testGetRowMultipleVersions() throws Exception
> 
>    {
> 
>        insert(ts1, value1);
> 
>        sleep();
> 
>        insert(ts2, value2);
> 
>        sleep();
> 
>        insert(ts3, value3);
> 
>        sleep();
> 
> 
>        // check getRow with multiple versions
> 
>        final Get get = new Get(rowKey);
> 
>        get.setMaxVersions();
> 
>        final Result r = table.get(get);
> 
> 
>        final List<KeyValue> list = r.list();
> 
>        for (final KeyValue kv : list)
> 
>        {
> 
>            System.err.println(kv.getKey());
> 
>            System.err.println(Bytes.toString(kv.getValue()));
> 
>        }
> 
> 
>        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> byte[]>>> map = r.getMap();
> 
>        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> map.get(family);
> 
>        final NavigableMap<Long, byte[]> versionMap =
> familyMap.get(qualifier);
> 
>        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> 
>        {
> 
>            System.err.println(entry.getKey());
> 
>            System.err.println(Bytes.toString(entry.getValue()));
> 
>        }
> 
>        //        assertTrue(versionMap.size() == 3);
> 
> 
>        //        assertTrue(value1 == versionMap.get(ts1));
> 
>        //        assertTrue(value2 == versionMap.get(ts2));
> 
>        //        assertTrue(value3 == versionMap.get(ts3));
> 
> 
>        // table.delete(new Delete(rowKey));
> 
>        // assertTrue(table.get(get).size() == 0);
> 
>        //        table.close();
> 
>    }
> 
> 
> On Thu, Feb 24, 2011 at 3:41 PM, Lars George <la...@gmail.com> wrote:
> 
>> What error are you getting? The NPE?
>> 
>> As Tatsuya pointed out, you are using the same time stamps:
>> 
>>  private final long   ts2       = ts1 + 100;
>> 
>>  private final long   ts3       = ts1 + 100;
>> 
>> That cannot work, you are overriding cells.
>> 
>> Lars
>> 
>> On Thu, Feb 24, 2011 at 8:34 AM, 陈加俊 <cj...@gmail.com> wrote:
>>> HTable object has not setAutoFlush. It's default value is true at my
>>> cluster.So I set it true as follows ,but error is still the same.
>>> 
>>> public class GetRowVersionsTest extends TestCase
>>> {
>>>   private final byte[] family    = Bytes.toBytes("log");
>>> 
>>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
>>> 
>>>   private final byte[] rowKey    = Bytes.toBytes(1);
>>> 
>>>   private final long   ts1       = 1298529542218L;
>>> 
>>>   private final long   ts2       = ts1 + 100;
>>> 
>>>   private final long   ts3       = ts1 + 100;
>>> 
>>>   private final byte[] value1    = Bytes.toBytes("value1");
>>> 
>>>   private final byte[] value2    = Bytes.toBytes("value2");
>>> 
>>>   private final byte[] value3    = Bytes.toBytes("value3");
>>> 
>>>   private void insert(final long ts, final byte[] value) throws
>>> IOException
>>>   {
>>>       final HTable table =
>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>>>       table.setAutoFlush(false);
>>>       final Put put = new Put(rowKey);
>>>       put.add(family, qualifier, ts, value);
>>>       table.put(put);
>>>   }
>>> 
>>>   private void sleep()
>>>   {
>>>       try
>>>       {
>>>           Thread.sleep(1000);
>>>       }
>>>       catch (final InterruptedException e)
>>>       {
>>>           e.printStackTrace();
>>>       }
>>>   }
>>> 
>>>   @Test
>>>   public void testGetRowMultipleVersions() throws Exception
>>>   {
>>>       insert(ts1, value1);
>>>       sleep();
>>>       insert(ts2, value2);
>>>       sleep();
>>>       insert(ts3, value3);
>>>       sleep();
>>> 
>>>       // check getRow with multiple versions
>>>       final HTable table =
>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>>>       final Get get = new Get(rowKey);
>>>       get.setMaxVersions();
>>>       final Result r = table.get(get);
>>> 
>>>       final List<KeyValue> list = r.list();
>>>       for (final KeyValue kv : list)
>>>       {
>>>           System.err.println(kv.getKey());
>>>           System.err.println(Bytes.toString(kv.getValue()));
>>>       }
>>> 
>>>       final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
>>> byte[]>>> map = r.getMap();
>>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
>>> map.get(family);
>>>       final NavigableMap<Long, byte[]> versionMap =
>>> familyMap.get(qualifier);
>>>       for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
>>>       {
>>>           System.err.println(entry.getKey());
>>>           System.err.println(Bytes.toString(entry.getValue()));
>>>       }
>>>       //        assertTrue(versionMap.size() == 3);
>>> 
>>>       //        assertTrue(value1 == versionMap.get(ts1));
>>>       //        assertTrue(value2 == versionMap.get(ts2));
>>>       //        assertTrue(value3 == versionMap.get(ts3));
>>> 
>>>       //        table.delete(new Delete(rowKey));
>>>       //        assertTrue(table.get(get).size() == 0);
>>>       //        table.close();
>>>   }
>>> 
>>> On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com> wrote:
>>> 
>>>> Does the HTable object have setAutoFlush(false) turned on by any chance?
>>>> 
>>>> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
>>>>> line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
>>>>> familyMap = map.get(family);
>>>>> map is null ,
>>>>> and strangely  I use r.list() instead,
>>>>> final List<KeyValue> list = r.list();
>>>>> r is null !
>>>>> 
>>>>> 
>>>>> 2011/2/24 Ryan Rawson <ry...@gmail.com>
>>>>>> 
>>>>>> Which line is line 89?
>>>>>> 
>>>>>> Also it's preferable to do:
>>>>>> assertEquals(3, versionMap.size());
>>>>>> vs:
>>>>>> assertTrue(versionMap.size() == 3);
>>>>>> 
>>>>>> since the error messages from the former are more descriptive
>>>>>> "expected 3 was 2".
>>>>>> 
>>>>>> looking at the code it looks like it should work...
>>>>>> 
>>>>>> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
>>>>>>> This is my test case ,but I get NPE some times .
>>>>>>> 
>>>>>>> java.lang.NullPointerException
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>>>>>>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>>>>>>> at
>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>>>>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>>>>>>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>>>>>>> at
>>>>>>> 
>>>>>>> 
>>>> 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>>>>>>> 
>>>>>>> public class GetRowVersionsTest extends TestCase
>>>>>>> {
>>>>>>>   private final byte[] family    = Bytes.toBytes("log");
>>>>>>> 
>>>>>>>   private final byte[] qualifier = Bytes.toBytes("siteUrl");
>>>>>>> 
>>>>>>>   private final byte[] rowKey    = Bytes.toBytes(1);
>>>>>>> 
>>>>>>>   private final HTable table     =
>>>>>>> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>>>>>>> 
>>>>>>>   private final long   ts1       = 1298529542218L;
>>>>>>> 
>>>>>>>   private final long   ts2       = ts1 + 100;
>>>>>>> 
>>>>>>>   private final long   ts3       = ts1 + 100;
>>>>>>> 
>>>>>>>   private final byte[] value1    = Bytes.toBytes("value1");
>>>>>>> 
>>>>>>>   private final byte[] value2    = Bytes.toBytes("value2");
>>>>>>> 
>>>>>>>   private final byte[] value3    = Bytes.toBytes("value3");
>>>>>>> 
>>>>>>>   private void insert(final long ts, final byte[] value) throws
>>>>>>> IOException
>>>>>>>   {
>>>>>>>       final Put put = new Put(rowKey);
>>>>>>>       put.add(family, qualifier, ts, value);
>>>>>>>       table.put(put);
>>>>>>>   }
>>>>>>> 
>>>>>>>   private void sleep()
>>>>>>>   {
>>>>>>>       try
>>>>>>>       {
>>>>>>>           Thread.sleep(1000);
>>>>>>>       }
>>>>>>>       catch (final InterruptedException e)
>>>>>>>       {
>>>>>>>           e.printStackTrace();
>>>>>>>       }
>>>>>>>   }
>>>>>>> 
>>>>>>>   @Test
>>>>>>>   public void testGetRowMultipleVersions() throws Exception
>>>>>>>   {
>>>>>>>       insert(ts1, value1);
>>>>>>>       sleep();
>>>>>>>       insert(ts2, value2);
>>>>>>>       sleep();
>>>>>>>       insert(ts3, value3);
>>>>>>>       sleep();
>>>>>>> 
>>>>>>>       // check getRow with multiple versions
>>>>>>>       final Get get = new Get(rowKey);
>>>>>>>       get.setMaxVersions();
>>>>>>>       final Result r = table.get(get);
>>>>>>>       final NavigableMap<byte[], NavigableMap<byte[],
>>>>>>> NavigableMap<Long,
>>>>>>> byte[]>>> map = r.getMap();
>>>>>>>       final NavigableMap<byte[], NavigableMap<Long, byte[]>>
>>>> familyMap
>>>>>>> =
>>>>>>> map.get(family);
>>>>>>>       final NavigableMap<Long, byte[]> versionMap =
>>>>>>> familyMap.get(qualifier);
>>>>>>>       for (final Map.Entry<Long, byte[]> entry :
>>>> versionMap.entrySet())
>>>>>>>       {
>>>>>>>           System.err.println(entry.getKey());
>>>>>>>           System.err.println(Bytes.toString(entry.getValue()));
>>>>>>>       }
>>>>>>>       //        assertTrue(versionMap.size() == 3);
>>>>>>> 
>>>>>>>       //        assertTrue(value1 == versionMap.get(ts1));
>>>>>>>       //        assertTrue(value2 == versionMap.get(ts2));
>>>>>>>       //        assertTrue(value3 == versionMap.get(ts3));
>>>>>>> 
>>>>>>>       //        table.delete(new Delete(rowKey));
>>>>>>>       //        assertTrue(table.get(get).size() == 0);
>>>>>>>       //        table.close();
>>>>>>>   }
>>>>>>> }
>>>>>>> 
>>>>>>> 
>>>>>>> On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
>>>>>>> <ta...@gmail.com>wrote:
>>>>>>> 
>>>>>>>> Hi Jiajun,
>>>>>>>> 
>>>>>>>> Make sure you don't have the same timestamp on every versions of
>>>> puts;
>>>>>>>> try
>>>>>>>> to put Thread.sleep() in your test(?) codes when necessary.
>>>>>>>> 
>>>>>>>> You might not want to specify the timestamp by yourself but want
>> to
>>>> let
>>>>>>>> HBase to store appropriate ones.
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Tatsuya Kawano (Mr.)
>>>>>>>> Tokyo, Japan
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
>>>> wrote:
>>>>>>>> 
>>>>>>>>> There are test cases for this, the functionality DOES work,
>>>> something
>>>>>>>>> is
>>>>>>>> up...
>>>>>>>>> 
>>>>>>>>> Without full code and full descriptions of your tables,
>> debugging
>>>> is
>>>>>>>>> harder than it needs to be.  It's probably a simple typo or
>>>>>>>>> something,
>>>>>>>>> check your code and table descriptions again. Many people rely
>> on
>>>> the
>>>>>>>>> multi version query capabilities and it is very unlikely to be
>>>> broken
>>>>>>>>> in a released version of hbase.
>>>>>>>>> 
>>>>>>>>> On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com>
>> wrote:
>>>>>>>>>> final List<KeyValue> list = result.list();
>>>>>>>>>>          for (final KeyValue it : list)
>>>>>>>>>>          {
>>>>>>>>>>              System.out.println(Bytes.toString(it.getKey()));
>>>>>>>>>> 
>> System.out.println(Bytes.toString(it.getValue()));
>>>>>>>>>>          }
>>>>>>>>>> I can only get the last version!  why ? Is there any testcase
>> in
>>>>>>>>>> Hbase?
>>>>>>>>>> 
>>>>>>>>>> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> /**
>>>>>>>>>>>  * Create a sorted list of the KeyValue's in this result.
>>>>>>>>>>>  *
>>>>>>>>>>>  * @return The sorted list of KeyValue's.
>>>>>>>>>>>  */
>>>>>>>>>>> public List<KeyValue> list() {
>>>>>>>>>>>   if(this.kvs == null) {
>>>>>>>>>>>     readFields();
>>>>>>>>>>>   }
>>>>>>>>>>>   return isEmpty()? null: Arrays.asList(sorted());
>>>>>>>>>>> }
>>>>>>>>>>> 
>>>>>>>>>>> I will try it . Thank you very much!
>>>>>>>>>>> 
>>>>>>>>>>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
>>>> buttler1@llnl.gov>
>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Result.list() ?
>>>>>>>>>>>> Putting the hbase source into your IDE of choice (yay
>> Eclipse!)
>>>> is
>>>>>>>> really
>>>>>>>>>>>> helpful
>>>>>>>>>>>> 
>>>>>>>>>>>> Dave
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:42 PM
>>>>>>>>>>>> To: user@hbase.apache.org
>>>>>>>>>>>> Cc: Buttler, David
>>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
>>>> column,but
>>>>>>>> only
>>>>>>>>>>>> get the latest version of the specified column
>>>>>>>>>>>> 
>>>>>>>>>>>> Thank you David !
>>>>>>>>>>>> 
>>>>>>>>>>>> I alter the table schema as follow:
>>>>>>>>>>>> 
>>>>>>>>>>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
>>>>>>>>>>>>> METHOD
>>>>>>>> =>
>>>>>>>>>>>> 'add'}
>>>>>>>>>>>> 
>>>>>>>>>>>> How to iterate over KeyValues?  which method in Result?
>>>>>>>>>>>> 
>>>>>>>>>>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
>>>>>>>>>>>> <bu...@llnl.gov>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> What is your table schema set to?  By default it holds 3
>>>>>>>>>>>>> versions.
>>>>>>>>>>>>> Also, you might iterating over KeyValues instead of using
>> the
>>>> Map
>>>>>>>> since
>>>>>>>>>>>> you
>>>>>>>>>>>>> don't really care about the organization, just the time.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Dave
>>>>>>>>>>>>> 
>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>>>>>>>>>>>> Sent: Wednesday, February 23, 2011 5:22 PM
>>>>>>>>>>>>> To: user@hbase.apache.org
>>>>>>>>>>>>> Cc: Stack
>>>>>>>>>>>>> Subject: Re: I can't get many versions of the specified
>>>>>>>>>>>>> column,but
>>>>>>>> only
>>>>>>>>>>>> get
>>>>>>>>>>>>> the latest version of the specified column
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I execute it five times at diffrent time.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> //put data by version
>>>>>>>>>>>>> 
>>>>>>>>>>>>> final Put p = new Put(key); // key
>>>>>>>>>>>>> final long ts = System.currentTimeMillis();
>>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
>>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
>>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
>>>>>>>>>>>>>    table.put(p);
>>>>>>>>>>>>> 
>>>>>>>>>>>>> So I can get five versions ,right?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> What do you get for a result?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> You are only entering a single version of each column, a
>>>> single
>>>>>>>>>>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
>>>>>>>>>>>>>> FAMILY:q3.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> St.Ack
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cjjvictory@gmail.com
>>> 
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> I can't get many versions of the specified column,but only
>>>> get
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>> latest
>>>>>>>>>>>>>>> version of the specified column. Is there anyone  help me?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> //put data by version
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> final Put p = new Put(key); // key
>>>>>>>>>>>>>>> final long ts = System.currentTimeMillis();
>>>>>>>>>>>>>>>     p.add(FAMILY, q1, ts,v1);
>>>>>>>>>>>>>>>     p.add(FAMILY, q2, ts,v2);
>>>>>>>>>>>>>>>     p.add(FAMILY, q3, ts,v3);
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>    table.put(p);
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> //get all versions of data
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> final Get get = new Get(key);
>>>>>>>>>>>>>>>         get.addFamily(FAMILY);
>>>>>>>>>>>>>>>         get.setMaxVersions(10);
>>>>>>>>>>>>>>>         final Result result = htable.get(get);
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>         final NavigableMap<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
>>>>>>>>>>>>>>>         final Set<Entry<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>>>>>>>>>>>>>>>         final Iterator<Entry<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
>>>>>>>>>>>>>>>                 .iterator();
>>>>>>>>>>>>>>>         while (iterator.hasNext())
>>>>>>>>>>>>>>>         {
>>>>>>>>>>>>>>>             final Entry<byte[], NavigableMap<byte[],
>>>>>>>>>>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
>>>>>>>>>>>>>>> 
>>>> System.out.println(Bytes.toString(next.getKey()));
>>>>>>>>>>>>> //family
>>>>>>>>>>>>>>>             for (final Entry<byte[], NavigableMap<Long,
>>>>>>>>>>>>>>> byte[]>>
>>>>>>>>>>>>>>> item : next.getValue().entrySet())
>>>>>>>>>>>>>>>             {
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> System.out.println(Bytes.toString(item.getKey()));
>>>>>>>>>>>>>>>                 for (final Entry<Long, byte[]> _item :
>>>>>>>>>>>>>>> item.getValue().entrySet())
>>>>>>>>>>>>>>>                 {
>>>>>>>>>>>>>>>                     System.out.println(_item.getKey());
>> //q
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> System.out.println(Bytes.toString(_item.getValue()));
>>>>>>>>>>>>>>> //value
>>>>>>>>>>>>>>>                 }
>>>>>>>>>>>>>>>             }
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>         }
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>>>>>> jiajun
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>>>> jiajun
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> --
>>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>>> jiajun
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> --
>>>>>>>>>>> Thanks & Best regards
>>>>>>>>>>> jiajun
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> --
>>>>>>>>>> Thanks & Best regards
>>>>>>>>>> jiajun
>>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> Thanks & Best regards
>>>>>>> jiajun
>>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Thanks & Best regards
>>>>> jiajun
>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Thanks & Best regards
>>> jiajun
>>> 
>> 
> 
> 
> 
> -- 
> Thanks & Best regards
> jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
It will be right if according to the following process:

step 1: create 'testTable',{NAME => 'log' , VERSIONS => 5 }

step 2: excute my code below

I will be wrong if uncomment the code :table.delete(new Delete(rowKey));

I will be run right agin If I comment the code and change the rowKey.



My code below :


public class GetRowVersionsTest extends TestCase

{

    private final byte[] family    = Bytes.toBytes("log");


    private final byte[] qualifier = Bytes.toBytes("siteUrl");


    private final byte[] rowKey    = Bytes.toBytes(1000);


    private final HTable table     =
IDMHBaseConfiguration.getTable("testTable");


    private final long   ts1       = 1298529542218L;


    private final long   ts2       = ts1 + 100;


    private final long   ts3       = ts1 + 1000;


    private final byte[] value1    = Bytes.toBytes("value1");


    private final byte[] value2    = Bytes.toBytes("value2");


    private final byte[] value3    = Bytes.toBytes("value3");


    private void insert(final long ts, final byte[] value) throws
IOException

    {

        //        table.setAutoFlush(false);

        final Put put = new Put(rowKey);

        put.add(family, qualifier, ts, value);

        table.put(put);

    }


    private void sleep()

    {

        try

        {

            Thread.sleep(1000);

        }

        catch (final InterruptedException e)

        {

            e.printStackTrace();

        }

    }


    @Test

    public void testGetRowMultipleVersions() throws Exception

    {

        insert(ts1, value1);

        sleep();

        insert(ts2, value2);

        sleep();

        insert(ts3, value3);

        sleep();


        // check getRow with multiple versions

        final Get get = new Get(rowKey);

        get.setMaxVersions();

        final Result r = table.get(get);


        final List<KeyValue> list = r.list();

        for (final KeyValue kv : list)

        {

            System.err.println(kv.getKey());

            System.err.println(Bytes.toString(kv.getValue()));

        }


        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
byte[]>>> map = r.getMap();

        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
map.get(family);

        final NavigableMap<Long, byte[]> versionMap =
familyMap.get(qualifier);

        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())

        {

            System.err.println(entry.getKey());

            System.err.println(Bytes.toString(entry.getValue()));

        }

        //        assertTrue(versionMap.size() == 3);


        //        assertTrue(value1 == versionMap.get(ts1));

        //        assertTrue(value2 == versionMap.get(ts2));

        //        assertTrue(value3 == versionMap.get(ts3));


        // table.delete(new Delete(rowKey));

        // assertTrue(table.get(get).size() == 0);

        //        table.close();

    }


On Thu, Feb 24, 2011 at 3:41 PM, Lars George <la...@gmail.com> wrote:

> What error are you getting? The NPE?
>
> As Tatsuya pointed out, you are using the same time stamps:
>
>   private final long   ts2       = ts1 + 100;
>
>   private final long   ts3       = ts1 + 100;
>
> That cannot work, you are overriding cells.
>
> Lars
>
> On Thu, Feb 24, 2011 at 8:34 AM, 陈加俊 <cj...@gmail.com> wrote:
> > HTable object has not setAutoFlush. It's default value is true at my
> > cluster.So I set it true as follows ,but error is still the same.
> >
> > public class GetRowVersionsTest extends TestCase
> > {
> >    private final byte[] family    = Bytes.toBytes("log");
> >
> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >
> >    private final byte[] rowKey    = Bytes.toBytes(1);
> >
> >    private final long   ts1       = 1298529542218L;
> >
> >    private final long   ts2       = ts1 + 100;
> >
> >    private final long   ts3       = ts1 + 100;
> >
> >    private final byte[] value1    = Bytes.toBytes("value1");
> >
> >    private final byte[] value2    = Bytes.toBytes("value2");
> >
> >    private final byte[] value3    = Bytes.toBytes("value3");
> >
> >    private void insert(final long ts, final byte[] value) throws
> > IOException
> >    {
> >        final HTable table =
> > IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >        table.setAutoFlush(false);
> >        final Put put = new Put(rowKey);
> >        put.add(family, qualifier, ts, value);
> >        table.put(put);
> >    }
> >
> >    private void sleep()
> >    {
> >        try
> >        {
> >            Thread.sleep(1000);
> >        }
> >        catch (final InterruptedException e)
> >        {
> >            e.printStackTrace();
> >        }
> >    }
> >
> >    @Test
> >    public void testGetRowMultipleVersions() throws Exception
> >    {
> >        insert(ts1, value1);
> >        sleep();
> >        insert(ts2, value2);
> >        sleep();
> >        insert(ts3, value3);
> >        sleep();
> >
> >        // check getRow with multiple versions
> >        final HTable table =
> > IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >        final Get get = new Get(rowKey);
> >        get.setMaxVersions();
> >        final Result r = table.get(get);
> >
> >        final List<KeyValue> list = r.list();
> >        for (final KeyValue kv : list)
> >        {
> >            System.err.println(kv.getKey());
> >            System.err.println(Bytes.toString(kv.getValue()));
> >        }
> >
> >        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> > byte[]>>> map = r.getMap();
> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> > map.get(family);
> >        final NavigableMap<Long, byte[]> versionMap =
> > familyMap.get(qualifier);
> >        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >        {
> >            System.err.println(entry.getKey());
> >            System.err.println(Bytes.toString(entry.getValue()));
> >        }
> >        //        assertTrue(versionMap.size() == 3);
> >
> >        //        assertTrue(value1 == versionMap.get(ts1));
> >        //        assertTrue(value2 == versionMap.get(ts2));
> >        //        assertTrue(value3 == versionMap.get(ts3));
> >
> >        //        table.delete(new Delete(rowKey));
> >        //        assertTrue(table.get(get).size() == 0);
> >        //        table.close();
> >    }
> >
> > On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com> wrote:
> >
> >> Does the HTable object have setAutoFlush(false) turned on by any chance?
> >>
> >> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
> >> > line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> >> > familyMap = map.get(family);
> >> > map is null ,
> >> > and strangely  I use r.list() instead,
> >> > final List<KeyValue> list = r.list();
> >> > r is null !
> >> >
> >> >
> >> > 2011/2/24 Ryan Rawson <ry...@gmail.com>
> >> >>
> >> >> Which line is line 89?
> >> >>
> >> >> Also it's preferable to do:
> >> >> assertEquals(3, versionMap.size());
> >> >> vs:
> >> >> assertTrue(versionMap.size() == 3);
> >> >>
> >> >> since the error messages from the former are more descriptive
> >> >> "expected 3 was 2".
> >> >>
> >> >> looking at the code it looks like it should work...
> >> >>
> >> >> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
> >> >> >  This is my test case ,but I get NPE some times .
> >> >> >
> >> >> > java.lang.NullPointerException
> >> >> > at
> >> >> >
> >> >> >
> >>
> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
> >> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >> >> > at
> >> >> >
> >> >> >
> >>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >> >> > at
> >> >> >
> >> >> >
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >> >> > at java.lang.reflect.Method.invoke(Method.java:597)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> >> >> > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >> >> > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >> >> > at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >> >> > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >> >> > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >> >> > at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >> >> > at
> >> >> >
> >> >> >
> >>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >> >> >
> >> >> > public class GetRowVersionsTest extends TestCase
> >> >> > {
> >> >> >    private final byte[] family    = Bytes.toBytes("log");
> >> >> >
> >> >> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >> >> >
> >> >> >    private final byte[] rowKey    = Bytes.toBytes(1);
> >> >> >
> >> >> >    private final HTable table     =
> >> >> > IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >> >> >
> >> >> >    private final long   ts1       = 1298529542218L;
> >> >> >
> >> >> >    private final long   ts2       = ts1 + 100;
> >> >> >
> >> >> >    private final long   ts3       = ts1 + 100;
> >> >> >
> >> >> >    private final byte[] value1    = Bytes.toBytes("value1");
> >> >> >
> >> >> >    private final byte[] value2    = Bytes.toBytes("value2");
> >> >> >
> >> >> >    private final byte[] value3    = Bytes.toBytes("value3");
> >> >> >
> >> >> >    private void insert(final long ts, final byte[] value) throws
> >> >> > IOException
> >> >> >    {
> >> >> >        final Put put = new Put(rowKey);
> >> >> >        put.add(family, qualifier, ts, value);
> >> >> >        table.put(put);
> >> >> >    }
> >> >> >
> >> >> >    private void sleep()
> >> >> >    {
> >> >> >        try
> >> >> >        {
> >> >> >            Thread.sleep(1000);
> >> >> >        }
> >> >> >        catch (final InterruptedException e)
> >> >> >        {
> >> >> >            e.printStackTrace();
> >> >> >        }
> >> >> >    }
> >> >> >
> >> >> >    @Test
> >> >> >    public void testGetRowMultipleVersions() throws Exception
> >> >> >    {
> >> >> >        insert(ts1, value1);
> >> >> >        sleep();
> >> >> >        insert(ts2, value2);
> >> >> >        sleep();
> >> >> >        insert(ts3, value3);
> >> >> >        sleep();
> >> >> >
> >> >> >        // check getRow with multiple versions
> >> >> >        final Get get = new Get(rowKey);
> >> >> >        get.setMaxVersions();
> >> >> >        final Result r = table.get(get);
> >> >> >        final NavigableMap<byte[], NavigableMap<byte[],
> >> >> > NavigableMap<Long,
> >> >> > byte[]>>> map = r.getMap();
> >> >> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> >> familyMap
> >> >> > =
> >> >> > map.get(family);
> >> >> >        final NavigableMap<Long, byte[]> versionMap =
> >> >> > familyMap.get(qualifier);
> >> >> >        for (final Map.Entry<Long, byte[]> entry :
> >> versionMap.entrySet())
> >> >> >        {
> >> >> >            System.err.println(entry.getKey());
> >> >> >            System.err.println(Bytes.toString(entry.getValue()));
> >> >> >        }
> >> >> >        //        assertTrue(versionMap.size() == 3);
> >> >> >
> >> >> >        //        assertTrue(value1 == versionMap.get(ts1));
> >> >> >        //        assertTrue(value2 == versionMap.get(ts2));
> >> >> >        //        assertTrue(value3 == versionMap.get(ts3));
> >> >> >
> >> >> >        //        table.delete(new Delete(rowKey));
> >> >> >        //        assertTrue(table.get(get).size() == 0);
> >> >> >        //        table.close();
> >> >> >    }
> >> >> > }
> >> >> >
> >> >> >
> >> >> > On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
> >> >> > <ta...@gmail.com>wrote:
> >> >> >
> >> >> >> Hi Jiajun,
> >> >> >>
> >> >> >> Make sure you don't have the same timestamp on every versions of
> >> puts;
> >> >> >> try
> >> >> >> to put Thread.sleep() in your test(?) codes when necessary.
> >> >> >>
> >> >> >> You might not want to specify the timestamp by yourself but want
> to
> >> let
> >> >> >> HBase to store appropriate ones.
> >> >> >>
> >> >> >> --
> >> >> >> Tatsuya Kawano (Mr.)
> >> >> >> Tokyo, Japan
> >> >> >>
> >> >> >>
> >> >> >> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
> >> wrote:
> >> >> >>
> >> >> >> > There are test cases for this, the functionality DOES work,
> >> something
> >> >> >> > is
> >> >> >> up...
> >> >> >> >
> >> >> >> > Without full code and full descriptions of your tables,
> debugging
> >> is
> >> >> >> > harder than it needs to be.  It's probably a simple typo or
> >> >> >> > something,
> >> >> >> > check your code and table descriptions again. Many people rely
> on
> >> the
> >> >> >> > multi version query capabilities and it is very unlikely to be
> >> broken
> >> >> >> > in a released version of hbase.
> >> >> >> >
> >> >> >> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com>
> wrote:
> >> >> >> >>  final List<KeyValue> list = result.list();
> >> >> >> >>           for (final KeyValue it : list)
> >> >> >> >>           {
> >> >> >> >>               System.out.println(Bytes.toString(it.getKey()));
> >> >> >> >>
> System.out.println(Bytes.toString(it.getValue()));
> >> >> >> >>           }
> >> >> >> >> I can only get the last version!  why ? Is there any testcase
> in
> >> >> >> >> Hbase?
> >> >> >> >>
> >> >> >> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
> >> wrote:
> >> >> >> >>
> >> >> >> >>> /**
> >> >> >> >>>   * Create a sorted list of the KeyValue's in this result.
> >> >> >> >>>   *
> >> >> >> >>>   * @return The sorted list of KeyValue's.
> >> >> >> >>>   */
> >> >> >> >>>  public List<KeyValue> list() {
> >> >> >> >>>    if(this.kvs == null) {
> >> >> >> >>>      readFields();
> >> >> >> >>>    }
> >> >> >> >>>    return isEmpty()? null: Arrays.asList(sorted());
> >> >> >> >>>  }
> >> >> >> >>>
> >> >> >> >>> I will try it . Thank you very much!
> >> >> >> >>>
> >> >> >> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
> >> buttler1@llnl.gov>
> >> >> >> wrote:
> >> >> >> >>>
> >> >> >> >>>> Result.list() ?
> >> >> >> >>>> Putting the hbase source into your IDE of choice (yay
> Eclipse!)
> >> is
> >> >> >> really
> >> >> >> >>>> helpful
> >> >> >> >>>>
> >> >> >> >>>> Dave
> >> >> >> >>>>
> >> >> >> >>>>
> >> >> >> >>>> -----Original Message-----
> >> >> >> >>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >> >> >> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >> >> >> >>>> To: user@hbase.apache.org
> >> >> >> >>>> Cc: Buttler, David
> >> >> >> >>>> Subject: Re: I can't get many versions of the specified
> >> column,but
> >> >> >> only
> >> >> >> >>>> get the latest version of the specified column
> >> >> >> >>>>
> >> >> >> >>>> Thank you David !
> >> >> >> >>>>
> >> >> >> >>>> I alter the table schema as follow:
> >> >> >> >>>>
> >> >> >> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
> >> >> >> >>>>> METHOD
> >> >> >> =>
> >> >> >> >>>> 'add'}
> >> >> >> >>>>
> >> >> >> >>>> How to iterate over KeyValues?  which method in Result?
> >> >> >> >>>>
> >> >> >> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
> >> >> >> >>>> <bu...@llnl.gov>
> >> >> >> >>>> wrote:
> >> >> >> >>>>
> >> >> >> >>>>> What is your table schema set to?  By default it holds 3
> >> >> >> >>>>> versions.
> >> >> >> >>>>> Also, you might iterating over KeyValues instead of using
> the
> >> Map
> >> >> >> since
> >> >> >> >>>> you
> >> >> >> >>>>> don't really care about the organization, just the time.
> >> >> >> >>>>>
> >> >> >> >>>>> Dave
> >> >> >> >>>>>
> >> >> >> >>>>> -----Original Message-----
> >> >> >> >>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >> >> >> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >> >> >> >>>>> To: user@hbase.apache.org
> >> >> >> >>>>> Cc: Stack
> >> >> >> >>>>> Subject: Re: I can't get many versions of the specified
> >> >> >> >>>>> column,but
> >> >> >> only
> >> >> >> >>>> get
> >> >> >> >>>>> the latest version of the specified column
> >> >> >> >>>>>
> >> >> >> >>>>> I execute it five times at diffrent time.
> >> >> >> >>>>>
> >> >> >> >>>>> //put data by version
> >> >> >> >>>>>
> >> >> >> >>>>> final Put p = new Put(key); // key
> >> >> >> >>>>> final long ts = System.currentTimeMillis();
> >> >> >> >>>>>      p.add(FAMILY, q1, ts,v1);
> >> >> >> >>>>>      p.add(FAMILY, q2, ts,v2);
> >> >> >> >>>>>      p.add(FAMILY, q3, ts,v3);
> >> >> >> >>>>>     table.put(p);
> >> >> >> >>>>>
> >> >> >> >>>>> So I can get five versions ,right?
> >> >> >> >>>>>
> >> >> >> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
> >> wrote:
> >> >> >> >>>>>
> >> >> >> >>>>>> What do you get for a result?
> >> >> >> >>>>>>
> >> >> >> >>>>>> You are only entering a single version of each column, a
> >> single
> >> >> >> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
> >> >> >> >>>>>> FAMILY:q3.
> >> >> >> >>>>>>
> >> >> >> >>>>>> St.Ack
> >> >> >> >>>>>>
> >> >> >> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cjjvictory@gmail.com
> >
> >> >> >> >>>>>> wrote:
> >> >> >> >>>>>>> I can't get many versions of the specified column,but only
> >> get
> >> >> >> >>>>>>> the
> >> >> >> >>>>> latest
> >> >> >> >>>>>>> version of the specified column. Is there anyone  help me?
> >> >> >> >>>>>>>
> >> >> >> >>>>>>> //put data by version
> >> >> >> >>>>>>>
> >> >> >> >>>>>>> final Put p = new Put(key); // key
> >> >> >> >>>>>>> final long ts = System.currentTimeMillis();
> >> >> >> >>>>>>>      p.add(FAMILY, q1, ts,v1);
> >> >> >> >>>>>>>      p.add(FAMILY, q2, ts,v2);
> >> >> >> >>>>>>>      p.add(FAMILY, q3, ts,v3);
> >> >> >> >>>>>>>
> >> >> >> >>>>>>>     table.put(p);
> >> >> >> >>>>>>>
> >> >> >> >>>>>>>
> >> >> >> >>>>>>> //get all versions of data
> >> >> >> >>>>>>>
> >> >> >> >>>>>>> final Get get = new Get(key);
> >> >> >> >>>>>>>          get.addFamily(FAMILY);
> >> >> >> >>>>>>>          get.setMaxVersions(10);
> >> >> >> >>>>>>>          final Result result = htable.get(get);
> >> >> >> >>>>>>>
> >> >> >> >>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
> >> >> >> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >> >> >> >>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
> >> >> >> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >> >> >> >>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
> >> >> >> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >> >> >> >>>>>>>                  .iterator();
> >> >> >> >>>>>>>          while (iterator.hasNext())
> >> >> >> >>>>>>>          {
> >> >> >> >>>>>>>              final Entry<byte[], NavigableMap<byte[],
> >> >> >> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >> >> >> >>>>>>>
> >>  System.out.println(Bytes.toString(next.getKey()));
> >> >> >> >>>>> //family
> >> >> >> >>>>>>>              for (final Entry<byte[], NavigableMap<Long,
> >> >> >> >>>>>>> byte[]>>
> >> >> >> >>>>>>> item : next.getValue().entrySet())
> >> >> >> >>>>>>>              {
> >> >> >> >>>>>>>
> >> >> >> >>>>>>>  System.out.println(Bytes.toString(item.getKey()));
> >> >> >> >>>>>>>                  for (final Entry<Long, byte[]> _item :
> >> >> >> >>>>>>> item.getValue().entrySet())
> >> >> >> >>>>>>>                  {
> >> >> >> >>>>>>>                      System.out.println(_item.getKey());
> //q
> >> >> >> >>>>>>>
> >> >> >> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >> >> >> >>>>>>> //value
> >> >> >> >>>>>>>                  }
> >> >> >> >>>>>>>              }
> >> >> >> >>>>>>>
> >> >> >> >>>>>>>          }
> >> >> >> >>>>>>>
> >> >> >> >>>>>>> --
> >> >> >> >>>>>>> Thanks & Best regards
> >> >> >> >>>>>>> jiajun
> >> >> >> >>>>>>>
> >> >> >> >>>>>>
> >> >> >> >>>>>
> >> >> >> >>>>>
> >> >> >> >>>>>
> >> >> >> >>>>> --
> >> >> >> >>>>> Thanks & Best regards
> >> >> >> >>>>> jiajun
> >> >> >> >>>>>
> >> >> >> >>>>
> >> >> >> >>>>
> >> >> >> >>>>
> >> >> >> >>>> --
> >> >> >> >>>> Thanks & Best regards
> >> >> >> >>>> jiajun
> >> >> >> >>>>
> >> >> >> >>>
> >> >> >> >>>
> >> >> >> >>>
> >> >> >> >>> --
> >> >> >> >>> Thanks & Best regards
> >> >> >> >>> jiajun
> >> >> >> >>>
> >> >> >> >>>
> >> >> >> >>
> >> >> >> >>
> >> >> >> >> --
> >> >> >> >> Thanks & Best regards
> >> >> >> >> jiajun
> >> >> >> >>
> >> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > Thanks & Best regards
> >> >> > jiajun
> >> >> >
> >> >
> >> >
> >> >
> >> > --
> >> > Thanks & Best regards
> >> > jiajun
> >> >
> >> >
> >>
> >
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
> >
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Lars George <la...@gmail.com>.
What error are you getting? The NPE?

As Tatsuya pointed out, you are using the same time stamps:

   private final long   ts2       = ts1 + 100;

   private final long   ts3       = ts1 + 100;

That cannot work, you are overriding cells.

Lars

On Thu, Feb 24, 2011 at 8:34 AM, 陈加俊 <cj...@gmail.com> wrote:
> HTable object has not setAutoFlush. It's default value is true at my
> cluster.So I set it true as follows ,but error is still the same.
>
> public class GetRowVersionsTest extends TestCase
> {
>    private final byte[] family    = Bytes.toBytes("log");
>
>    private final byte[] qualifier = Bytes.toBytes("siteUrl");
>
>    private final byte[] rowKey    = Bytes.toBytes(1);
>
>    private final long   ts1       = 1298529542218L;
>
>    private final long   ts2       = ts1 + 100;
>
>    private final long   ts3       = ts1 + 100;
>
>    private final byte[] value1    = Bytes.toBytes("value1");
>
>    private final byte[] value2    = Bytes.toBytes("value2");
>
>    private final byte[] value3    = Bytes.toBytes("value3");
>
>    private void insert(final long ts, final byte[] value) throws
> IOException
>    {
>        final HTable table =
> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>        table.setAutoFlush(false);
>        final Put put = new Put(rowKey);
>        put.add(family, qualifier, ts, value);
>        table.put(put);
>    }
>
>    private void sleep()
>    {
>        try
>        {
>            Thread.sleep(1000);
>        }
>        catch (final InterruptedException e)
>        {
>            e.printStackTrace();
>        }
>    }
>
>    @Test
>    public void testGetRowMultipleVersions() throws Exception
>    {
>        insert(ts1, value1);
>        sleep();
>        insert(ts2, value2);
>        sleep();
>        insert(ts3, value3);
>        sleep();
>
>        // check getRow with multiple versions
>        final HTable table =
> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>        final Get get = new Get(rowKey);
>        get.setMaxVersions();
>        final Result r = table.get(get);
>
>        final List<KeyValue> list = r.list();
>        for (final KeyValue kv : list)
>        {
>            System.err.println(kv.getKey());
>            System.err.println(Bytes.toString(kv.getValue()));
>        }
>
>        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> byte[]>>> map = r.getMap();
>        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> map.get(family);
>        final NavigableMap<Long, byte[]> versionMap =
> familyMap.get(qualifier);
>        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
>        {
>            System.err.println(entry.getKey());
>            System.err.println(Bytes.toString(entry.getValue()));
>        }
>        //        assertTrue(versionMap.size() == 3);
>
>        //        assertTrue(value1 == versionMap.get(ts1));
>        //        assertTrue(value2 == versionMap.get(ts2));
>        //        assertTrue(value3 == versionMap.get(ts3));
>
>        //        table.delete(new Delete(rowKey));
>        //        assertTrue(table.get(get).size() == 0);
>        //        table.close();
>    }
>
> On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com> wrote:
>
>> Does the HTable object have setAutoFlush(false) turned on by any chance?
>>
>> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
>> > line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
>> > familyMap = map.get(family);
>> > map is null ,
>> > and strangely  I use r.list() instead,
>> > final List<KeyValue> list = r.list();
>> > r is null !
>> >
>> >
>> > 2011/2/24 Ryan Rawson <ry...@gmail.com>
>> >>
>> >> Which line is line 89?
>> >>
>> >> Also it's preferable to do:
>> >> assertEquals(3, versionMap.size());
>> >> vs:
>> >> assertTrue(versionMap.size() == 3);
>> >>
>> >> since the error messages from the former are more descriptive
>> >> "expected 3 was 2".
>> >>
>> >> looking at the code it looks like it should work...
>> >>
>> >> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
>> >> >  This is my test case ,but I get NPE some times .
>> >> >
>> >> > java.lang.NullPointerException
>> >> > at
>> >> >
>> >> >
>> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
>> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> >> > at
>> >> >
>> >> >
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> >> > at
>> >> >
>> >> >
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> >> > at java.lang.reflect.Method.invoke(Method.java:597)
>> >> > at
>> >> >
>> >> >
>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>> >> > at
>> >> >
>> >> >
>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>> >> > at
>> >> >
>> >> >
>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>> >> > at
>> >> >
>> >> >
>> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>> >> > at
>> >> >
>> >> >
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>> >> > at
>> >> >
>> >> >
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>> >> > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> >> > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> >> > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> >> > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> >> > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> >> > at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> >> > at
>> >> >
>> >> >
>> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
>> >> > at
>> >> >
>> >> >
>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>> >> > at
>> >> >
>> >> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>> >> > at
>> >> >
>> >> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>> >> > at
>> >> >
>> >> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>> >> > at
>> >> >
>> >> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>> >> >
>> >> > public class GetRowVersionsTest extends TestCase
>> >> > {
>> >> >    private final byte[] family    = Bytes.toBytes("log");
>> >> >
>> >> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
>> >> >
>> >> >    private final byte[] rowKey    = Bytes.toBytes(1);
>> >> >
>> >> >    private final HTable table     =
>> >> > IDMHBaseConfiguration.getTable(BigTableName.getSite());
>> >> >
>> >> >    private final long   ts1       = 1298529542218L;
>> >> >
>> >> >    private final long   ts2       = ts1 + 100;
>> >> >
>> >> >    private final long   ts3       = ts1 + 100;
>> >> >
>> >> >    private final byte[] value1    = Bytes.toBytes("value1");
>> >> >
>> >> >    private final byte[] value2    = Bytes.toBytes("value2");
>> >> >
>> >> >    private final byte[] value3    = Bytes.toBytes("value3");
>> >> >
>> >> >    private void insert(final long ts, final byte[] value) throws
>> >> > IOException
>> >> >    {
>> >> >        final Put put = new Put(rowKey);
>> >> >        put.add(family, qualifier, ts, value);
>> >> >        table.put(put);
>> >> >    }
>> >> >
>> >> >    private void sleep()
>> >> >    {
>> >> >        try
>> >> >        {
>> >> >            Thread.sleep(1000);
>> >> >        }
>> >> >        catch (final InterruptedException e)
>> >> >        {
>> >> >            e.printStackTrace();
>> >> >        }
>> >> >    }
>> >> >
>> >> >    @Test
>> >> >    public void testGetRowMultipleVersions() throws Exception
>> >> >    {
>> >> >        insert(ts1, value1);
>> >> >        sleep();
>> >> >        insert(ts2, value2);
>> >> >        sleep();
>> >> >        insert(ts3, value3);
>> >> >        sleep();
>> >> >
>> >> >        // check getRow with multiple versions
>> >> >        final Get get = new Get(rowKey);
>> >> >        get.setMaxVersions();
>> >> >        final Result r = table.get(get);
>> >> >        final NavigableMap<byte[], NavigableMap<byte[],
>> >> > NavigableMap<Long,
>> >> > byte[]>>> map = r.getMap();
>> >> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
>> familyMap
>> >> > =
>> >> > map.get(family);
>> >> >        final NavigableMap<Long, byte[]> versionMap =
>> >> > familyMap.get(qualifier);
>> >> >        for (final Map.Entry<Long, byte[]> entry :
>> versionMap.entrySet())
>> >> >        {
>> >> >            System.err.println(entry.getKey());
>> >> >            System.err.println(Bytes.toString(entry.getValue()));
>> >> >        }
>> >> >        //        assertTrue(versionMap.size() == 3);
>> >> >
>> >> >        //        assertTrue(value1 == versionMap.get(ts1));
>> >> >        //        assertTrue(value2 == versionMap.get(ts2));
>> >> >        //        assertTrue(value3 == versionMap.get(ts3));
>> >> >
>> >> >        //        table.delete(new Delete(rowKey));
>> >> >        //        assertTrue(table.get(get).size() == 0);
>> >> >        //        table.close();
>> >> >    }
>> >> > }
>> >> >
>> >> >
>> >> > On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
>> >> > <ta...@gmail.com>wrote:
>> >> >
>> >> >> Hi Jiajun,
>> >> >>
>> >> >> Make sure you don't have the same timestamp on every versions of
>> puts;
>> >> >> try
>> >> >> to put Thread.sleep() in your test(?) codes when necessary.
>> >> >>
>> >> >> You might not want to specify the timestamp by yourself but want to
>> let
>> >> >> HBase to store appropriate ones.
>> >> >>
>> >> >> --
>> >> >> Tatsuya Kawano (Mr.)
>> >> >> Tokyo, Japan
>> >> >>
>> >> >>
>> >> >> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
>> wrote:
>> >> >>
>> >> >> > There are test cases for this, the functionality DOES work,
>> something
>> >> >> > is
>> >> >> up...
>> >> >> >
>> >> >> > Without full code and full descriptions of your tables, debugging
>> is
>> >> >> > harder than it needs to be.  It's probably a simple typo or
>> >> >> > something,
>> >> >> > check your code and table descriptions again. Many people rely on
>> the
>> >> >> > multi version query capabilities and it is very unlikely to be
>> broken
>> >> >> > in a released version of hbase.
>> >> >> >
>> >> >> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
>> >> >> >>  final List<KeyValue> list = result.list();
>> >> >> >>           for (final KeyValue it : list)
>> >> >> >>           {
>> >> >> >>               System.out.println(Bytes.toString(it.getKey()));
>> >> >> >>               System.out.println(Bytes.toString(it.getValue()));
>> >> >> >>           }
>> >> >> >> I can only get the last version!  why ? Is there any testcase in
>> >> >> >> Hbase?
>> >> >> >>
>> >> >> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
>> wrote:
>> >> >> >>
>> >> >> >>> /**
>> >> >> >>>   * Create a sorted list of the KeyValue's in this result.
>> >> >> >>>   *
>> >> >> >>>   * @return The sorted list of KeyValue's.
>> >> >> >>>   */
>> >> >> >>>  public List<KeyValue> list() {
>> >> >> >>>    if(this.kvs == null) {
>> >> >> >>>      readFields();
>> >> >> >>>    }
>> >> >> >>>    return isEmpty()? null: Arrays.asList(sorted());
>> >> >> >>>  }
>> >> >> >>>
>> >> >> >>> I will try it . Thank you very much!
>> >> >> >>>
>> >> >> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
>> buttler1@llnl.gov>
>> >> >> wrote:
>> >> >> >>>
>> >> >> >>>> Result.list() ?
>> >> >> >>>> Putting the hbase source into your IDE of choice (yay Eclipse!)
>> is
>> >> >> really
>> >> >> >>>> helpful
>> >> >> >>>>
>> >> >> >>>> Dave
>> >> >> >>>>
>> >> >> >>>>
>> >> >> >>>> -----Original Message-----
>> >> >> >>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> >> >> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
>> >> >> >>>> To: user@hbase.apache.org
>> >> >> >>>> Cc: Buttler, David
>> >> >> >>>> Subject: Re: I can't get many versions of the specified
>> column,but
>> >> >> only
>> >> >> >>>> get the latest version of the specified column
>> >> >> >>>>
>> >> >> >>>> Thank you David !
>> >> >> >>>>
>> >> >> >>>> I alter the table schema as follow:
>> >> >> >>>>
>> >> >> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
>> >> >> >>>>> METHOD
>> >> >> =>
>> >> >> >>>> 'add'}
>> >> >> >>>>
>> >> >> >>>> How to iterate over KeyValues?  which method in Result?
>> >> >> >>>>
>> >> >> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
>> >> >> >>>> <bu...@llnl.gov>
>> >> >> >>>> wrote:
>> >> >> >>>>
>> >> >> >>>>> What is your table schema set to?  By default it holds 3
>> >> >> >>>>> versions.
>> >> >> >>>>> Also, you might iterating over KeyValues instead of using the
>> Map
>> >> >> since
>> >> >> >>>> you
>> >> >> >>>>> don't really care about the organization, just the time.
>> >> >> >>>>>
>> >> >> >>>>> Dave
>> >> >> >>>>>
>> >> >> >>>>> -----Original Message-----
>> >> >> >>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> >> >> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
>> >> >> >>>>> To: user@hbase.apache.org
>> >> >> >>>>> Cc: Stack
>> >> >> >>>>> Subject: Re: I can't get many versions of the specified
>> >> >> >>>>> column,but
>> >> >> only
>> >> >> >>>> get
>> >> >> >>>>> the latest version of the specified column
>> >> >> >>>>>
>> >> >> >>>>> I execute it five times at diffrent time.
>> >> >> >>>>>
>> >> >> >>>>> //put data by version
>> >> >> >>>>>
>> >> >> >>>>> final Put p = new Put(key); // key
>> >> >> >>>>> final long ts = System.currentTimeMillis();
>> >> >> >>>>>      p.add(FAMILY, q1, ts,v1);
>> >> >> >>>>>      p.add(FAMILY, q2, ts,v2);
>> >> >> >>>>>      p.add(FAMILY, q3, ts,v3);
>> >> >> >>>>>     table.put(p);
>> >> >> >>>>>
>> >> >> >>>>> So I can get five versions ,right?
>> >> >> >>>>>
>> >> >> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
>> wrote:
>> >> >> >>>>>
>> >> >> >>>>>> What do you get for a result?
>> >> >> >>>>>>
>> >> >> >>>>>> You are only entering a single version of each column, a
>> single
>> >> >> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
>> >> >> >>>>>> FAMILY:q3.
>> >> >> >>>>>>
>> >> >> >>>>>> St.Ack
>> >> >> >>>>>>
>> >> >> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com>
>> >> >> >>>>>> wrote:
>> >> >> >>>>>>> I can't get many versions of the specified column,but only
>> get
>> >> >> >>>>>>> the
>> >> >> >>>>> latest
>> >> >> >>>>>>> version of the specified column. Is there anyone  help me?
>> >> >> >>>>>>>
>> >> >> >>>>>>> //put data by version
>> >> >> >>>>>>>
>> >> >> >>>>>>> final Put p = new Put(key); // key
>> >> >> >>>>>>> final long ts = System.currentTimeMillis();
>> >> >> >>>>>>>      p.add(FAMILY, q1, ts,v1);
>> >> >> >>>>>>>      p.add(FAMILY, q2, ts,v2);
>> >> >> >>>>>>>      p.add(FAMILY, q3, ts,v3);
>> >> >> >>>>>>>
>> >> >> >>>>>>>     table.put(p);
>> >> >> >>>>>>>
>> >> >> >>>>>>>
>> >> >> >>>>>>> //get all versions of data
>> >> >> >>>>>>>
>> >> >> >>>>>>> final Get get = new Get(key);
>> >> >> >>>>>>>          get.addFamily(FAMILY);
>> >> >> >>>>>>>          get.setMaxVersions(10);
>> >> >> >>>>>>>          final Result result = htable.get(get);
>> >> >> >>>>>>>
>> >> >> >>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
>> >> >> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
>> >> >> >>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
>> >> >> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>> >> >> >>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
>> >> >> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
>> >> >> >>>>>>>                  .iterator();
>> >> >> >>>>>>>          while (iterator.hasNext())
>> >> >> >>>>>>>          {
>> >> >> >>>>>>>              final Entry<byte[], NavigableMap<byte[],
>> >> >> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
>> >> >> >>>>>>>
>>  System.out.println(Bytes.toString(next.getKey()));
>> >> >> >>>>> //family
>> >> >> >>>>>>>              for (final Entry<byte[], NavigableMap<Long,
>> >> >> >>>>>>> byte[]>>
>> >> >> >>>>>>> item : next.getValue().entrySet())
>> >> >> >>>>>>>              {
>> >> >> >>>>>>>
>> >> >> >>>>>>>  System.out.println(Bytes.toString(item.getKey()));
>> >> >> >>>>>>>                  for (final Entry<Long, byte[]> _item :
>> >> >> >>>>>>> item.getValue().entrySet())
>> >> >> >>>>>>>                  {
>> >> >> >>>>>>>                      System.out.println(_item.getKey()); //q
>> >> >> >>>>>>>
>> >> >> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
>> >> >> >>>>>>> //value
>> >> >> >>>>>>>                  }
>> >> >> >>>>>>>              }
>> >> >> >>>>>>>
>> >> >> >>>>>>>          }
>> >> >> >>>>>>>
>> >> >> >>>>>>> --
>> >> >> >>>>>>> Thanks & Best regards
>> >> >> >>>>>>> jiajun
>> >> >> >>>>>>>
>> >> >> >>>>>>
>> >> >> >>>>>
>> >> >> >>>>>
>> >> >> >>>>>
>> >> >> >>>>> --
>> >> >> >>>>> Thanks & Best regards
>> >> >> >>>>> jiajun
>> >> >> >>>>>
>> >> >> >>>>
>> >> >> >>>>
>> >> >> >>>>
>> >> >> >>>> --
>> >> >> >>>> Thanks & Best regards
>> >> >> >>>> jiajun
>> >> >> >>>>
>> >> >> >>>
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> --
>> >> >> >>> Thanks & Best regards
>> >> >> >>> jiajun
>> >> >> >>>
>> >> >> >>>
>> >> >> >>
>> >> >> >>
>> >> >> >> --
>> >> >> >> Thanks & Best regards
>> >> >> >> jiajun
>> >> >> >>
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Thanks & Best regards
>> >> > jiajun
>> >> >
>> >
>> >
>> >
>> > --
>> > Thanks & Best regards
>> > jiajun
>> >
>> >
>>
>
>
>
> --
> Thanks & Best regards
> jiajun
>

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
HTable object has not setAutoFlush. It's default value is true at my
cluster.So I set it true as follows ,but error is still the same.

public class GetRowVersionsTest extends TestCase
{
    private final byte[] family    = Bytes.toBytes("log");

    private final byte[] qualifier = Bytes.toBytes("siteUrl");

    private final byte[] rowKey    = Bytes.toBytes(1);

    private final long   ts1       = 1298529542218L;

    private final long   ts2       = ts1 + 100;

    private final long   ts3       = ts1 + 100;

    private final byte[] value1    = Bytes.toBytes("value1");

    private final byte[] value2    = Bytes.toBytes("value2");

    private final byte[] value3    = Bytes.toBytes("value3");

    private void insert(final long ts, final byte[] value) throws
IOException
    {
        final HTable table =
IDMHBaseConfiguration.getTable(BigTableName.getSite());
        table.setAutoFlush(false);
        final Put put = new Put(rowKey);
        put.add(family, qualifier, ts, value);
        table.put(put);
    }

    private void sleep()
    {
        try
        {
            Thread.sleep(1000);
        }
        catch (final InterruptedException e)
        {
            e.printStackTrace();
        }
    }

    @Test
    public void testGetRowMultipleVersions() throws Exception
    {
        insert(ts1, value1);
        sleep();
        insert(ts2, value2);
        sleep();
        insert(ts3, value3);
        sleep();

        // check getRow with multiple versions
        final HTable table =
IDMHBaseConfiguration.getTable(BigTableName.getSite());
        final Get get = new Get(rowKey);
        get.setMaxVersions();
        final Result r = table.get(get);

        final List<KeyValue> list = r.list();
        for (final KeyValue kv : list)
        {
            System.err.println(kv.getKey());
            System.err.println(Bytes.toString(kv.getValue()));
        }

        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
byte[]>>> map = r.getMap();
        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
map.get(family);
        final NavigableMap<Long, byte[]> versionMap =
familyMap.get(qualifier);
        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
        {
            System.err.println(entry.getKey());
            System.err.println(Bytes.toString(entry.getValue()));
        }
        //        assertTrue(versionMap.size() == 3);

        //        assertTrue(value1 == versionMap.get(ts1));
        //        assertTrue(value2 == versionMap.get(ts2));
        //        assertTrue(value3 == versionMap.get(ts3));

        //        table.delete(new Delete(rowKey));
        //        assertTrue(table.get(get).size() == 0);
        //        table.close();
    }

On Thu, Feb 24, 2011 at 3:26 PM, Ryan Rawson <ry...@gmail.com> wrote:

> Does the HTable object have setAutoFlush(false) turned on by any chance?
>
> On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
> > line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> > familyMap = map.get(family);
> > map is null ,
> > and strangely  I use r.list() instead,
> > final List<KeyValue> list = r.list();
> > r is null !
> >
> >
> > 2011/2/24 Ryan Rawson <ry...@gmail.com>
> >>
> >> Which line is line 89?
> >>
> >> Also it's preferable to do:
> >> assertEquals(3, versionMap.size());
> >> vs:
> >> assertTrue(versionMap.size() == 3);
> >>
> >> since the error messages from the former are more descriptive
> >> "expected 3 was 2".
> >>
> >> looking at the code it looks like it should work...
> >>
> >> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
> >> >  This is my test case ,but I get NPE some times .
> >> >
> >> > java.lang.NullPointerException
> >> > at
> >> >
> >> >
> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >> > at
> >> >
> >> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >> > at
> >> >
> >> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >> > at java.lang.reflect.Method.invoke(Method.java:597)
> >> > at
> >> >
> >> >
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> >> > at
> >> >
> >> >
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> >> > at
> >> >
> >> >
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> >> > at
> >> >
> >> >
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> >> > at
> >> >
> >> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> >> > at
> >> >
> >> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> >> > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >> > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >> > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >> > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >> > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >> > at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >> > at
> >> >
> >> >
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> >> > at
> >> >
> >> >
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >> > at
> >> >
> >> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >> > at
> >> >
> >> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >> > at
> >> >
> >> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >> > at
> >> >
> >> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >> >
> >> > public class GetRowVersionsTest extends TestCase
> >> > {
> >> >    private final byte[] family    = Bytes.toBytes("log");
> >> >
> >> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >> >
> >> >    private final byte[] rowKey    = Bytes.toBytes(1);
> >> >
> >> >    private final HTable table     =
> >> > IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >> >
> >> >    private final long   ts1       = 1298529542218L;
> >> >
> >> >    private final long   ts2       = ts1 + 100;
> >> >
> >> >    private final long   ts3       = ts1 + 100;
> >> >
> >> >    private final byte[] value1    = Bytes.toBytes("value1");
> >> >
> >> >    private final byte[] value2    = Bytes.toBytes("value2");
> >> >
> >> >    private final byte[] value3    = Bytes.toBytes("value3");
> >> >
> >> >    private void insert(final long ts, final byte[] value) throws
> >> > IOException
> >> >    {
> >> >        final Put put = new Put(rowKey);
> >> >        put.add(family, qualifier, ts, value);
> >> >        table.put(put);
> >> >    }
> >> >
> >> >    private void sleep()
> >> >    {
> >> >        try
> >> >        {
> >> >            Thread.sleep(1000);
> >> >        }
> >> >        catch (final InterruptedException e)
> >> >        {
> >> >            e.printStackTrace();
> >> >        }
> >> >    }
> >> >
> >> >    @Test
> >> >    public void testGetRowMultipleVersions() throws Exception
> >> >    {
> >> >        insert(ts1, value1);
> >> >        sleep();
> >> >        insert(ts2, value2);
> >> >        sleep();
> >> >        insert(ts3, value3);
> >> >        sleep();
> >> >
> >> >        // check getRow with multiple versions
> >> >        final Get get = new Get(rowKey);
> >> >        get.setMaxVersions();
> >> >        final Result r = table.get(get);
> >> >        final NavigableMap<byte[], NavigableMap<byte[],
> >> > NavigableMap<Long,
> >> > byte[]>>> map = r.getMap();
> >> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> familyMap
> >> > =
> >> > map.get(family);
> >> >        final NavigableMap<Long, byte[]> versionMap =
> >> > familyMap.get(qualifier);
> >> >        for (final Map.Entry<Long, byte[]> entry :
> versionMap.entrySet())
> >> >        {
> >> >            System.err.println(entry.getKey());
> >> >            System.err.println(Bytes.toString(entry.getValue()));
> >> >        }
> >> >        //        assertTrue(versionMap.size() == 3);
> >> >
> >> >        //        assertTrue(value1 == versionMap.get(ts1));
> >> >        //        assertTrue(value2 == versionMap.get(ts2));
> >> >        //        assertTrue(value3 == versionMap.get(ts3));
> >> >
> >> >        //        table.delete(new Delete(rowKey));
> >> >        //        assertTrue(table.get(get).size() == 0);
> >> >        //        table.close();
> >> >    }
> >> > }
> >> >
> >> >
> >> > On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
> >> > <ta...@gmail.com>wrote:
> >> >
> >> >> Hi Jiajun,
> >> >>
> >> >> Make sure you don't have the same timestamp on every versions of
> puts;
> >> >> try
> >> >> to put Thread.sleep() in your test(?) codes when necessary.
> >> >>
> >> >> You might not want to specify the timestamp by yourself but want to
> let
> >> >> HBase to store appropriate ones.
> >> >>
> >> >> --
> >> >> Tatsuya Kawano (Mr.)
> >> >> Tokyo, Japan
> >> >>
> >> >>
> >> >> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com>
> wrote:
> >> >>
> >> >> > There are test cases for this, the functionality DOES work,
> something
> >> >> > is
> >> >> up...
> >> >> >
> >> >> > Without full code and full descriptions of your tables, debugging
> is
> >> >> > harder than it needs to be.  It's probably a simple typo or
> >> >> > something,
> >> >> > check your code and table descriptions again. Many people rely on
> the
> >> >> > multi version query capabilities and it is very unlikely to be
> broken
> >> >> > in a released version of hbase.
> >> >> >
> >> >> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
> >> >> >>  final List<KeyValue> list = result.list();
> >> >> >>           for (final KeyValue it : list)
> >> >> >>           {
> >> >> >>               System.out.println(Bytes.toString(it.getKey()));
> >> >> >>               System.out.println(Bytes.toString(it.getValue()));
> >> >> >>           }
> >> >> >> I can only get the last version!  why ? Is there any testcase in
> >> >> >> Hbase?
> >> >> >>
> >> >> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com>
> wrote:
> >> >> >>
> >> >> >>> /**
> >> >> >>>   * Create a sorted list of the KeyValue's in this result.
> >> >> >>>   *
> >> >> >>>   * @return The sorted list of KeyValue's.
> >> >> >>>   */
> >> >> >>>  public List<KeyValue> list() {
> >> >> >>>    if(this.kvs == null) {
> >> >> >>>      readFields();
> >> >> >>>    }
> >> >> >>>    return isEmpty()? null: Arrays.asList(sorted());
> >> >> >>>  }
> >> >> >>>
> >> >> >>> I will try it . Thank you very much!
> >> >> >>>
> >> >> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <
> buttler1@llnl.gov>
> >> >> wrote:
> >> >> >>>
> >> >> >>>> Result.list() ?
> >> >> >>>> Putting the hbase source into your IDE of choice (yay Eclipse!)
> is
> >> >> really
> >> >> >>>> helpful
> >> >> >>>>
> >> >> >>>> Dave
> >> >> >>>>
> >> >> >>>>
> >> >> >>>> -----Original Message-----
> >> >> >>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >> >> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >> >> >>>> To: user@hbase.apache.org
> >> >> >>>> Cc: Buttler, David
> >> >> >>>> Subject: Re: I can't get many versions of the specified
> column,but
> >> >> only
> >> >> >>>> get the latest version of the specified column
> >> >> >>>>
> >> >> >>>> Thank you David !
> >> >> >>>>
> >> >> >>>> I alter the table schema as follow:
> >> >> >>>>
> >> >> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
> >> >> >>>>> METHOD
> >> >> =>
> >> >> >>>> 'add'}
> >> >> >>>>
> >> >> >>>> How to iterate over KeyValues?  which method in Result?
> >> >> >>>>
> >> >> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
> >> >> >>>> <bu...@llnl.gov>
> >> >> >>>> wrote:
> >> >> >>>>
> >> >> >>>>> What is your table schema set to?  By default it holds 3
> >> >> >>>>> versions.
> >> >> >>>>> Also, you might iterating over KeyValues instead of using the
> Map
> >> >> since
> >> >> >>>> you
> >> >> >>>>> don't really care about the organization, just the time.
> >> >> >>>>>
> >> >> >>>>> Dave
> >> >> >>>>>
> >> >> >>>>> -----Original Message-----
> >> >> >>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >> >> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >> >> >>>>> To: user@hbase.apache.org
> >> >> >>>>> Cc: Stack
> >> >> >>>>> Subject: Re: I can't get many versions of the specified
> >> >> >>>>> column,but
> >> >> only
> >> >> >>>> get
> >> >> >>>>> the latest version of the specified column
> >> >> >>>>>
> >> >> >>>>> I execute it five times at diffrent time.
> >> >> >>>>>
> >> >> >>>>> //put data by version
> >> >> >>>>>
> >> >> >>>>> final Put p = new Put(key); // key
> >> >> >>>>> final long ts = System.currentTimeMillis();
> >> >> >>>>>      p.add(FAMILY, q1, ts,v1);
> >> >> >>>>>      p.add(FAMILY, q2, ts,v2);
> >> >> >>>>>      p.add(FAMILY, q3, ts,v3);
> >> >> >>>>>     table.put(p);
> >> >> >>>>>
> >> >> >>>>> So I can get five versions ,right?
> >> >> >>>>>
> >> >> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net>
> wrote:
> >> >> >>>>>
> >> >> >>>>>> What do you get for a result?
> >> >> >>>>>>
> >> >> >>>>>> You are only entering a single version of each column, a
> single
> >> >> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
> >> >> >>>>>> FAMILY:q3.
> >> >> >>>>>>
> >> >> >>>>>> St.Ack
> >> >> >>>>>>
> >> >> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com>
> >> >> >>>>>> wrote:
> >> >> >>>>>>> I can't get many versions of the specified column,but only
> get
> >> >> >>>>>>> the
> >> >> >>>>> latest
> >> >> >>>>>>> version of the specified column. Is there anyone  help me?
> >> >> >>>>>>>
> >> >> >>>>>>> //put data by version
> >> >> >>>>>>>
> >> >> >>>>>>> final Put p = new Put(key); // key
> >> >> >>>>>>> final long ts = System.currentTimeMillis();
> >> >> >>>>>>>      p.add(FAMILY, q1, ts,v1);
> >> >> >>>>>>>      p.add(FAMILY, q2, ts,v2);
> >> >> >>>>>>>      p.add(FAMILY, q3, ts,v3);
> >> >> >>>>>>>
> >> >> >>>>>>>     table.put(p);
> >> >> >>>>>>>
> >> >> >>>>>>>
> >> >> >>>>>>> //get all versions of data
> >> >> >>>>>>>
> >> >> >>>>>>> final Get get = new Get(key);
> >> >> >>>>>>>          get.addFamily(FAMILY);
> >> >> >>>>>>>          get.setMaxVersions(10);
> >> >> >>>>>>>          final Result result = htable.get(get);
> >> >> >>>>>>>
> >> >> >>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
> >> >> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >> >> >>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
> >> >> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >> >> >>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
> >> >> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >> >> >>>>>>>                  .iterator();
> >> >> >>>>>>>          while (iterator.hasNext())
> >> >> >>>>>>>          {
> >> >> >>>>>>>              final Entry<byte[], NavigableMap<byte[],
> >> >> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >> >> >>>>>>>
>  System.out.println(Bytes.toString(next.getKey()));
> >> >> >>>>> //family
> >> >> >>>>>>>              for (final Entry<byte[], NavigableMap<Long,
> >> >> >>>>>>> byte[]>>
> >> >> >>>>>>> item : next.getValue().entrySet())
> >> >> >>>>>>>              {
> >> >> >>>>>>>
> >> >> >>>>>>>  System.out.println(Bytes.toString(item.getKey()));
> >> >> >>>>>>>                  for (final Entry<Long, byte[]> _item :
> >> >> >>>>>>> item.getValue().entrySet())
> >> >> >>>>>>>                  {
> >> >> >>>>>>>                      System.out.println(_item.getKey()); //q
> >> >> >>>>>>>
> >> >> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >> >> >>>>>>> //value
> >> >> >>>>>>>                  }
> >> >> >>>>>>>              }
> >> >> >>>>>>>
> >> >> >>>>>>>          }
> >> >> >>>>>>>
> >> >> >>>>>>> --
> >> >> >>>>>>> Thanks & Best regards
> >> >> >>>>>>> jiajun
> >> >> >>>>>>>
> >> >> >>>>>>
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>> --
> >> >> >>>>> Thanks & Best regards
> >> >> >>>>> jiajun
> >> >> >>>>>
> >> >> >>>>
> >> >> >>>>
> >> >> >>>>
> >> >> >>>> --
> >> >> >>>> Thanks & Best regards
> >> >> >>>> jiajun
> >> >> >>>>
> >> >> >>>
> >> >> >>>
> >> >> >>>
> >> >> >>> --
> >> >> >>> Thanks & Best regards
> >> >> >>> jiajun
> >> >> >>>
> >> >> >>>
> >> >> >>
> >> >> >>
> >> >> >> --
> >> >> >> Thanks & Best regards
> >> >> >> jiajun
> >> >> >>
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Thanks & Best regards
> >> > jiajun
> >> >
> >
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
> >
> >
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Ryan Rawson <ry...@gmail.com>.
Does the HTable object have setAutoFlush(false) turned on by any chance?

On Wed, Feb 23, 2011 at 11:22 PM, 陈加俊 <cj...@gmail.com> wrote:
> line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
> familyMap = map.get(family);
> map is null ,
> and strangely  I use r.list() instead,
> final List<KeyValue> list = r.list();
> r is null !
>
>
> 2011/2/24 Ryan Rawson <ry...@gmail.com>
>>
>> Which line is line 89?
>>
>> Also it's preferable to do:
>> assertEquals(3, versionMap.size());
>> vs:
>> assertTrue(versionMap.size() == 3);
>>
>> since the error messages from the former are more descriptive
>> "expected 3 was 2".
>>
>> looking at the code it looks like it should work...
>>
>> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
>> >  This is my test case ,but I get NPE some times .
>> >
>> > java.lang.NullPointerException
>> > at
>> >
>> > com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
>> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> > at
>> >
>> > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> > at
>> >
>> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> > at java.lang.reflect.Method.invoke(Method.java:597)
>> > at
>> >
>> > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>> > at
>> >
>> > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>> > at
>> >
>> > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>> > at
>> >
>> > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>> > at
>> >
>> > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>> > at
>> >
>> > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>> > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> > at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> > at
>> >
>> > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
>> > at
>> >
>> > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>> > at
>> >
>> > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>> > at
>> >
>> > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>> > at
>> >
>> > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>> > at
>> >
>> > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>> >
>> > public class GetRowVersionsTest extends TestCase
>> > {
>> >    private final byte[] family    = Bytes.toBytes("log");
>> >
>> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
>> >
>> >    private final byte[] rowKey    = Bytes.toBytes(1);
>> >
>> >    private final HTable table     =
>> > IDMHBaseConfiguration.getTable(BigTableName.getSite());
>> >
>> >    private final long   ts1       = 1298529542218L;
>> >
>> >    private final long   ts2       = ts1 + 100;
>> >
>> >    private final long   ts3       = ts1 + 100;
>> >
>> >    private final byte[] value1    = Bytes.toBytes("value1");
>> >
>> >    private final byte[] value2    = Bytes.toBytes("value2");
>> >
>> >    private final byte[] value3    = Bytes.toBytes("value3");
>> >
>> >    private void insert(final long ts, final byte[] value) throws
>> > IOException
>> >    {
>> >        final Put put = new Put(rowKey);
>> >        put.add(family, qualifier, ts, value);
>> >        table.put(put);
>> >    }
>> >
>> >    private void sleep()
>> >    {
>> >        try
>> >        {
>> >            Thread.sleep(1000);
>> >        }
>> >        catch (final InterruptedException e)
>> >        {
>> >            e.printStackTrace();
>> >        }
>> >    }
>> >
>> >    @Test
>> >    public void testGetRowMultipleVersions() throws Exception
>> >    {
>> >        insert(ts1, value1);
>> >        sleep();
>> >        insert(ts2, value2);
>> >        sleep();
>> >        insert(ts3, value3);
>> >        sleep();
>> >
>> >        // check getRow with multiple versions
>> >        final Get get = new Get(rowKey);
>> >        get.setMaxVersions();
>> >        final Result r = table.get(get);
>> >        final NavigableMap<byte[], NavigableMap<byte[],
>> > NavigableMap<Long,
>> > byte[]>>> map = r.getMap();
>> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap
>> > =
>> > map.get(family);
>> >        final NavigableMap<Long, byte[]> versionMap =
>> > familyMap.get(qualifier);
>> >        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
>> >        {
>> >            System.err.println(entry.getKey());
>> >            System.err.println(Bytes.toString(entry.getValue()));
>> >        }
>> >        //        assertTrue(versionMap.size() == 3);
>> >
>> >        //        assertTrue(value1 == versionMap.get(ts1));
>> >        //        assertTrue(value2 == versionMap.get(ts2));
>> >        //        assertTrue(value3 == versionMap.get(ts3));
>> >
>> >        //        table.delete(new Delete(rowKey));
>> >        //        assertTrue(table.get(get).size() == 0);
>> >        //        table.close();
>> >    }
>> > }
>> >
>> >
>> > On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano
>> > <ta...@gmail.com>wrote:
>> >
>> >> Hi Jiajun,
>> >>
>> >> Make sure you don't have the same timestamp on every versions of puts;
>> >> try
>> >> to put Thread.sleep() in your test(?) codes when necessary.
>> >>
>> >> You might not want to specify the timestamp by yourself but want to let
>> >> HBase to store appropriate ones.
>> >>
>> >> --
>> >> Tatsuya Kawano (Mr.)
>> >> Tokyo, Japan
>> >>
>> >>
>> >> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com> wrote:
>> >>
>> >> > There are test cases for this, the functionality DOES work, something
>> >> > is
>> >> up...
>> >> >
>> >> > Without full code and full descriptions of your tables, debugging is
>> >> > harder than it needs to be.  It's probably a simple typo or
>> >> > something,
>> >> > check your code and table descriptions again. Many people rely on the
>> >> > multi version query capabilities and it is very unlikely to be broken
>> >> > in a released version of hbase.
>> >> >
>> >> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
>> >> >>  final List<KeyValue> list = result.list();
>> >> >>           for (final KeyValue it : list)
>> >> >>           {
>> >> >>               System.out.println(Bytes.toString(it.getKey()));
>> >> >>               System.out.println(Bytes.toString(it.getValue()));
>> >> >>           }
>> >> >> I can only get the last version!  why ? Is there any testcase in
>> >> >> Hbase?
>> >> >>
>> >> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:
>> >> >>
>> >> >>> /**
>> >> >>>   * Create a sorted list of the KeyValue's in this result.
>> >> >>>   *
>> >> >>>   * @return The sorted list of KeyValue's.
>> >> >>>   */
>> >> >>>  public List<KeyValue> list() {
>> >> >>>    if(this.kvs == null) {
>> >> >>>      readFields();
>> >> >>>    }
>> >> >>>    return isEmpty()? null: Arrays.asList(sorted());
>> >> >>>  }
>> >> >>>
>> >> >>> I will try it . Thank you very much!
>> >> >>>
>> >> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov>
>> >> wrote:
>> >> >>>
>> >> >>>> Result.list() ?
>> >> >>>> Putting the hbase source into your IDE of choice (yay Eclipse!) is
>> >> really
>> >> >>>> helpful
>> >> >>>>
>> >> >>>> Dave
>> >> >>>>
>> >> >>>>
>> >> >>>> -----Original Message-----
>> >> >>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> >> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
>> >> >>>> To: user@hbase.apache.org
>> >> >>>> Cc: Buttler, David
>> >> >>>> Subject: Re: I can't get many versions of the specified column,but
>> >> only
>> >> >>>> get the latest version of the specified column
>> >> >>>>
>> >> >>>> Thank you David !
>> >> >>>>
>> >> >>>> I alter the table schema as follow:
>> >> >>>>
>> >> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
>> >> >>>>> METHOD
>> >> =>
>> >> >>>> 'add'}
>> >> >>>>
>> >> >>>> How to iterate over KeyValues?  which method in Result?
>> >> >>>>
>> >> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David
>> >> >>>> <bu...@llnl.gov>
>> >> >>>> wrote:
>> >> >>>>
>> >> >>>>> What is your table schema set to?  By default it holds 3
>> >> >>>>> versions.
>> >> >>>>> Also, you might iterating over KeyValues instead of using the Map
>> >> since
>> >> >>>> you
>> >> >>>>> don't really care about the organization, just the time.
>> >> >>>>>
>> >> >>>>> Dave
>> >> >>>>>
>> >> >>>>> -----Original Message-----
>> >> >>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> >> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
>> >> >>>>> To: user@hbase.apache.org
>> >> >>>>> Cc: Stack
>> >> >>>>> Subject: Re: I can't get many versions of the specified
>> >> >>>>> column,but
>> >> only
>> >> >>>> get
>> >> >>>>> the latest version of the specified column
>> >> >>>>>
>> >> >>>>> I execute it five times at diffrent time.
>> >> >>>>>
>> >> >>>>> //put data by version
>> >> >>>>>
>> >> >>>>> final Put p = new Put(key); // key
>> >> >>>>> final long ts = System.currentTimeMillis();
>> >> >>>>>      p.add(FAMILY, q1, ts,v1);
>> >> >>>>>      p.add(FAMILY, q2, ts,v2);
>> >> >>>>>      p.add(FAMILY, q3, ts,v3);
>> >> >>>>>     table.put(p);
>> >> >>>>>
>> >> >>>>> So I can get five versions ,right?
>> >> >>>>>
>> >> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
>> >> >>>>>
>> >> >>>>>> What do you get for a result?
>> >> >>>>>>
>> >> >>>>>> You are only entering a single version of each column, a single
>> >> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
>> >> >>>>>> FAMILY:q3.
>> >> >>>>>>
>> >> >>>>>> St.Ack
>> >> >>>>>>
>> >> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com>
>> >> >>>>>> wrote:
>> >> >>>>>>> I can't get many versions of the specified column,but only get
>> >> >>>>>>> the
>> >> >>>>> latest
>> >> >>>>>>> version of the specified column. Is there anyone  help me?
>> >> >>>>>>>
>> >> >>>>>>> //put data by version
>> >> >>>>>>>
>> >> >>>>>>> final Put p = new Put(key); // key
>> >> >>>>>>> final long ts = System.currentTimeMillis();
>> >> >>>>>>>      p.add(FAMILY, q1, ts,v1);
>> >> >>>>>>>      p.add(FAMILY, q2, ts,v2);
>> >> >>>>>>>      p.add(FAMILY, q3, ts,v3);
>> >> >>>>>>>
>> >> >>>>>>>     table.put(p);
>> >> >>>>>>>
>> >> >>>>>>>
>> >> >>>>>>> //get all versions of data
>> >> >>>>>>>
>> >> >>>>>>> final Get get = new Get(key);
>> >> >>>>>>>          get.addFamily(FAMILY);
>> >> >>>>>>>          get.setMaxVersions(10);
>> >> >>>>>>>          final Result result = htable.get(get);
>> >> >>>>>>>
>> >> >>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
>> >> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
>> >> >>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
>> >> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>> >> >>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
>> >> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
>> >> >>>>>>>                  .iterator();
>> >> >>>>>>>          while (iterator.hasNext())
>> >> >>>>>>>          {
>> >> >>>>>>>              final Entry<byte[], NavigableMap<byte[],
>> >> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
>> >> >>>>>>>              System.out.println(Bytes.toString(next.getKey()));
>> >> >>>>> //family
>> >> >>>>>>>              for (final Entry<byte[], NavigableMap<Long,
>> >> >>>>>>> byte[]>>
>> >> >>>>>>> item : next.getValue().entrySet())
>> >> >>>>>>>              {
>> >> >>>>>>>
>> >> >>>>>>>  System.out.println(Bytes.toString(item.getKey()));
>> >> >>>>>>>                  for (final Entry<Long, byte[]> _item :
>> >> >>>>>>> item.getValue().entrySet())
>> >> >>>>>>>                  {
>> >> >>>>>>>                      System.out.println(_item.getKey()); //q
>> >> >>>>>>>
>> >> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
>> >> >>>>>>> //value
>> >> >>>>>>>                  }
>> >> >>>>>>>              }
>> >> >>>>>>>
>> >> >>>>>>>          }
>> >> >>>>>>>
>> >> >>>>>>> --
>> >> >>>>>>> Thanks & Best regards
>> >> >>>>>>> jiajun
>> >> >>>>>>>
>> >> >>>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>> --
>> >> >>>>> Thanks & Best regards
>> >> >>>>> jiajun
>> >> >>>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> --
>> >> >>>> Thanks & Best regards
>> >> >>>> jiajun
>> >> >>>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> --
>> >> >>> Thanks & Best regards
>> >> >>> jiajun
>> >> >>>
>> >> >>>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Thanks & Best regards
>> >> >> jiajun
>> >> >>
>> >>
>> >
>> >
>> >
>> > --
>> > Thanks & Best regards
>> > jiajun
>> >
>
>
>
> --
> Thanks & Best regards
> jiajun
>
>

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
line 89:        final NavigableMap<byte[], NavigableMap<Long, byte[]>>
familyMap = map.get(family);
map is null ,
and strangely  I use r.list() instead,
final List<KeyValue> list = r.list();
r is null !



2011/2/24 Ryan Rawson <ry...@gmail.com>

> Which line is line 89?
>
> Also it's preferable to do:
> assertEquals(3, versionMap.size());
> vs:
> assertTrue(versionMap.size() == 3);
>
> since the error messages from the former are more descriptive
> "expected 3 was 2".
>
> looking at the code it looks like it should work...
>
> On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
> >  This is my test case ,but I get NPE some times .
> >
> > java.lang.NullPointerException
> > at
> >
> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> > at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > at java.lang.reflect.Method.invoke(Method.java:597)
> > at
> >
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> > at
> >
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> > at
> >
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> > at
> >
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> > at
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> > at
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> > at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> > at
> >
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >
> > public class GetRowVersionsTest extends TestCase
> > {
> >    private final byte[] family    = Bytes.toBytes("log");
> >
> >    private final byte[] qualifier = Bytes.toBytes("siteUrl");
> >
> >    private final byte[] rowKey    = Bytes.toBytes(1);
> >
> >    private final HTable table     =
> > IDMHBaseConfiguration.getTable(BigTableName.getSite());
> >
> >    private final long   ts1       = 1298529542218L;
> >
> >    private final long   ts2       = ts1 + 100;
> >
> >    private final long   ts3       = ts1 + 100;
> >
> >    private final byte[] value1    = Bytes.toBytes("value1");
> >
> >    private final byte[] value2    = Bytes.toBytes("value2");
> >
> >    private final byte[] value3    = Bytes.toBytes("value3");
> >
> >    private void insert(final long ts, final byte[] value) throws
> > IOException
> >    {
> >        final Put put = new Put(rowKey);
> >        put.add(family, qualifier, ts, value);
> >        table.put(put);
> >    }
> >
> >    private void sleep()
> >    {
> >        try
> >        {
> >            Thread.sleep(1000);
> >        }
> >        catch (final InterruptedException e)
> >        {
> >            e.printStackTrace();
> >        }
> >    }
> >
> >    @Test
> >    public void testGetRowMultipleVersions() throws Exception
> >    {
> >        insert(ts1, value1);
> >        sleep();
> >        insert(ts2, value2);
> >        sleep();
> >        insert(ts3, value3);
> >        sleep();
> >
> >        // check getRow with multiple versions
> >        final Get get = new Get(rowKey);
> >        get.setMaxVersions();
> >        final Result r = table.get(get);
> >        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> > byte[]>>> map = r.getMap();
> >        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> > map.get(family);
> >        final NavigableMap<Long, byte[]> versionMap =
> > familyMap.get(qualifier);
> >        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
> >        {
> >            System.err.println(entry.getKey());
> >            System.err.println(Bytes.toString(entry.getValue()));
> >        }
> >        //        assertTrue(versionMap.size() == 3);
> >
> >        //        assertTrue(value1 == versionMap.get(ts1));
> >        //        assertTrue(value2 == versionMap.get(ts2));
> >        //        assertTrue(value3 == versionMap.get(ts3));
> >
> >        //        table.delete(new Delete(rowKey));
> >        //        assertTrue(table.get(get).size() == 0);
> >        //        table.close();
> >    }
> > }
> >
> >
> > On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano <tatsuya6502@gmail.com
> >wrote:
> >
> >> Hi Jiajun,
> >>
> >> Make sure you don't have the same timestamp on every versions of puts;
> try
> >> to put Thread.sleep() in your test(?) codes when necessary.
> >>
> >> You might not want to specify the timestamp by yourself but want to let
> >> HBase to store appropriate ones.
> >>
> >> --
> >> Tatsuya Kawano (Mr.)
> >> Tokyo, Japan
> >>
> >>
> >> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com> wrote:
> >>
> >> > There are test cases for this, the functionality DOES work, something
> is
> >> up...
> >> >
> >> > Without full code and full descriptions of your tables, debugging is
> >> > harder than it needs to be.  It's probably a simple typo or something,
> >> > check your code and table descriptions again. Many people rely on the
> >> > multi version query capabilities and it is very unlikely to be broken
> >> > in a released version of hbase.
> >> >
> >> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
> >> >>  final List<KeyValue> list = result.list();
> >> >>           for (final KeyValue it : list)
> >> >>           {
> >> >>               System.out.println(Bytes.toString(it.getKey()));
> >> >>               System.out.println(Bytes.toString(it.getValue()));
> >> >>           }
> >> >> I can only get the last version!  why ? Is there any testcase in
> Hbase?
> >> >>
> >> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:
> >> >>
> >> >>> /**
> >> >>>   * Create a sorted list of the KeyValue's in this result.
> >> >>>   *
> >> >>>   * @return The sorted list of KeyValue's.
> >> >>>   */
> >> >>>  public List<KeyValue> list() {
> >> >>>    if(this.kvs == null) {
> >> >>>      readFields();
> >> >>>    }
> >> >>>    return isEmpty()? null: Arrays.asList(sorted());
> >> >>>  }
> >> >>>
> >> >>> I will try it . Thank you very much!
> >> >>>
> >> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov>
> >> wrote:
> >> >>>
> >> >>>> Result.list() ?
> >> >>>> Putting the hbase source into your IDE of choice (yay Eclipse!) is
> >> really
> >> >>>> helpful
> >> >>>>
> >> >>>> Dave
> >> >>>>
> >> >>>>
> >> >>>> -----Original Message-----
> >> >>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >> >>>> To: user@hbase.apache.org
> >> >>>> Cc: Buttler, David
> >> >>>> Subject: Re: I can't get many versions of the specified column,but
> >> only
> >> >>>> get the latest version of the specified column
> >> >>>>
> >> >>>> Thank you David !
> >> >>>>
> >> >>>> I alter the table schema as follow:
> >> >>>>
> >> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 ,
> METHOD
> >> =>
> >> >>>> 'add'}
> >> >>>>
> >> >>>> How to iterate over KeyValues?  which method in Result?
> >> >>>>
> >> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <buttler1@llnl.gov
> >
> >> >>>> wrote:
> >> >>>>
> >> >>>>> What is your table schema set to?  By default it holds 3 versions.
> >> >>>>> Also, you might iterating over KeyValues instead of using the Map
> >> since
> >> >>>> you
> >> >>>>> don't really care about the organization, just the time.
> >> >>>>>
> >> >>>>> Dave
> >> >>>>>
> >> >>>>> -----Original Message-----
> >> >>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >> >>>>> To: user@hbase.apache.org
> >> >>>>> Cc: Stack
> >> >>>>> Subject: Re: I can't get many versions of the specified column,but
> >> only
> >> >>>> get
> >> >>>>> the latest version of the specified column
> >> >>>>>
> >> >>>>> I execute it five times at diffrent time.
> >> >>>>>
> >> >>>>> //put data by version
> >> >>>>>
> >> >>>>> final Put p = new Put(key); // key
> >> >>>>> final long ts = System.currentTimeMillis();
> >> >>>>>      p.add(FAMILY, q1, ts,v1);
> >> >>>>>      p.add(FAMILY, q2, ts,v2);
> >> >>>>>      p.add(FAMILY, q3, ts,v3);
> >> >>>>>     table.put(p);
> >> >>>>>
> >> >>>>> So I can get five versions ,right?
> >> >>>>>
> >> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
> >> >>>>>
> >> >>>>>> What do you get for a result?
> >> >>>>>>
> >> >>>>>> You are only entering a single version of each column, a single
> >> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a
> FAMILY:q3.
> >> >>>>>>
> >> >>>>>> St.Ack
> >> >>>>>>
> >> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com>
> wrote:
> >> >>>>>>> I can't get many versions of the specified column,but only get
> the
> >> >>>>> latest
> >> >>>>>>> version of the specified column. Is there anyone  help me?
> >> >>>>>>>
> >> >>>>>>> //put data by version
> >> >>>>>>>
> >> >>>>>>> final Put p = new Put(key); // key
> >> >>>>>>> final long ts = System.currentTimeMillis();
> >> >>>>>>>      p.add(FAMILY, q1, ts,v1);
> >> >>>>>>>      p.add(FAMILY, q2, ts,v2);
> >> >>>>>>>      p.add(FAMILY, q3, ts,v3);
> >> >>>>>>>
> >> >>>>>>>     table.put(p);
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>> //get all versions of data
> >> >>>>>>>
> >> >>>>>>> final Get get = new Get(key);
> >> >>>>>>>          get.addFamily(FAMILY);
> >> >>>>>>>          get.setMaxVersions(10);
> >> >>>>>>>          final Result result = htable.get(get);
> >> >>>>>>>
> >> >>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
> >> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >> >>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
> >> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >> >>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
> >> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >> >>>>>>>                  .iterator();
> >> >>>>>>>          while (iterator.hasNext())
> >> >>>>>>>          {
> >> >>>>>>>              final Entry<byte[], NavigableMap<byte[],
> >> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >> >>>>>>>              System.out.println(Bytes.toString(next.getKey()));
> >> >>>>> //family
> >> >>>>>>>              for (final Entry<byte[], NavigableMap<Long,
> byte[]>>
> >> >>>>>>> item : next.getValue().entrySet())
> >> >>>>>>>              {
> >> >>>>>>>
>  System.out.println(Bytes.toString(item.getKey()));
> >> >>>>>>>                  for (final Entry<Long, byte[]> _item :
> >> >>>>>>> item.getValue().entrySet())
> >> >>>>>>>                  {
> >> >>>>>>>                      System.out.println(_item.getKey()); //q
> >> >>>>>>>
> >> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >> >>>>>>> //value
> >> >>>>>>>                  }
> >> >>>>>>>              }
> >> >>>>>>>
> >> >>>>>>>          }
> >> >>>>>>>
> >> >>>>>>> --
> >> >>>>>>> Thanks & Best regards
> >> >>>>>>> jiajun
> >> >>>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>> --
> >> >>>>> Thanks & Best regards
> >> >>>>> jiajun
> >> >>>>>
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>> --
> >> >>>> Thanks & Best regards
> >> >>>> jiajun
> >> >>>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> --
> >> >>> Thanks & Best regards
> >> >>> jiajun
> >> >>>
> >> >>>
> >> >>
> >> >>
> >> >> --
> >> >> Thanks & Best regards
> >> >> jiajun
> >> >>
> >>
> >
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
> >
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Ryan Rawson <ry...@gmail.com>.
Which line is line 89?

Also it's preferable to do:
assertEquals(3, versionMap.size());
vs:
assertTrue(versionMap.size() == 3);

since the error messages from the former are more descriptive
"expected 3 was 2".

looking at the code it looks like it should work...

On Wed, Feb 23, 2011 at 11:07 PM, 陈加俊 <cj...@gmail.com> wrote:
>  This is my test case ,but I get NPE some times .
>
> java.lang.NullPointerException
> at
> com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>
> public class GetRowVersionsTest extends TestCase
> {
>    private final byte[] family    = Bytes.toBytes("log");
>
>    private final byte[] qualifier = Bytes.toBytes("siteUrl");
>
>    private final byte[] rowKey    = Bytes.toBytes(1);
>
>    private final HTable table     =
> IDMHBaseConfiguration.getTable(BigTableName.getSite());
>
>    private final long   ts1       = 1298529542218L;
>
>    private final long   ts2       = ts1 + 100;
>
>    private final long   ts3       = ts1 + 100;
>
>    private final byte[] value1    = Bytes.toBytes("value1");
>
>    private final byte[] value2    = Bytes.toBytes("value2");
>
>    private final byte[] value3    = Bytes.toBytes("value3");
>
>    private void insert(final long ts, final byte[] value) throws
> IOException
>    {
>        final Put put = new Put(rowKey);
>        put.add(family, qualifier, ts, value);
>        table.put(put);
>    }
>
>    private void sleep()
>    {
>        try
>        {
>            Thread.sleep(1000);
>        }
>        catch (final InterruptedException e)
>        {
>            e.printStackTrace();
>        }
>    }
>
>    @Test
>    public void testGetRowMultipleVersions() throws Exception
>    {
>        insert(ts1, value1);
>        sleep();
>        insert(ts2, value2);
>        sleep();
>        insert(ts3, value3);
>        sleep();
>
>        // check getRow with multiple versions
>        final Get get = new Get(rowKey);
>        get.setMaxVersions();
>        final Result r = table.get(get);
>        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
> byte[]>>> map = r.getMap();
>        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
> map.get(family);
>        final NavigableMap<Long, byte[]> versionMap =
> familyMap.get(qualifier);
>        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
>        {
>            System.err.println(entry.getKey());
>            System.err.println(Bytes.toString(entry.getValue()));
>        }
>        //        assertTrue(versionMap.size() == 3);
>
>        //        assertTrue(value1 == versionMap.get(ts1));
>        //        assertTrue(value2 == versionMap.get(ts2));
>        //        assertTrue(value3 == versionMap.get(ts3));
>
>        //        table.delete(new Delete(rowKey));
>        //        assertTrue(table.get(get).size() == 0);
>        //        table.close();
>    }
> }
>
>
> On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano <ta...@gmail.com>wrote:
>
>> Hi Jiajun,
>>
>> Make sure you don't have the same timestamp on every versions of puts; try
>> to put Thread.sleep() in your test(?) codes when necessary.
>>
>> You might not want to specify the timestamp by yourself but want to let
>> HBase to store appropriate ones.
>>
>> --
>> Tatsuya Kawano (Mr.)
>> Tokyo, Japan
>>
>>
>> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com> wrote:
>>
>> > There are test cases for this, the functionality DOES work, something is
>> up...
>> >
>> > Without full code and full descriptions of your tables, debugging is
>> > harder than it needs to be.  It's probably a simple typo or something,
>> > check your code and table descriptions again. Many people rely on the
>> > multi version query capabilities and it is very unlikely to be broken
>> > in a released version of hbase.
>> >
>> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
>> >>  final List<KeyValue> list = result.list();
>> >>           for (final KeyValue it : list)
>> >>           {
>> >>               System.out.println(Bytes.toString(it.getKey()));
>> >>               System.out.println(Bytes.toString(it.getValue()));
>> >>           }
>> >> I can only get the last version!  why ? Is there any testcase in Hbase?
>> >>
>> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:
>> >>
>> >>> /**
>> >>>   * Create a sorted list of the KeyValue's in this result.
>> >>>   *
>> >>>   * @return The sorted list of KeyValue's.
>> >>>   */
>> >>>  public List<KeyValue> list() {
>> >>>    if(this.kvs == null) {
>> >>>      readFields();
>> >>>    }
>> >>>    return isEmpty()? null: Arrays.asList(sorted());
>> >>>  }
>> >>>
>> >>> I will try it . Thank you very much!
>> >>>
>> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov>
>> wrote:
>> >>>
>> >>>> Result.list() ?
>> >>>> Putting the hbase source into your IDE of choice (yay Eclipse!) is
>> really
>> >>>> helpful
>> >>>>
>> >>>> Dave
>> >>>>
>> >>>>
>> >>>> -----Original Message-----
>> >>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
>> >>>> To: user@hbase.apache.org
>> >>>> Cc: Buttler, David
>> >>>> Subject: Re: I can't get many versions of the specified column,but
>> only
>> >>>> get the latest version of the specified column
>> >>>>
>> >>>> Thank you David !
>> >>>>
>> >>>> I alter the table schema as follow:
>> >>>>
>> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD
>> =>
>> >>>> 'add'}
>> >>>>
>> >>>> How to iterate over KeyValues?  which method in Result?
>> >>>>
>> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov>
>> >>>> wrote:
>> >>>>
>> >>>>> What is your table schema set to?  By default it holds 3 versions.
>> >>>>> Also, you might iterating over KeyValues instead of using the Map
>> since
>> >>>> you
>> >>>>> don't really care about the organization, just the time.
>> >>>>>
>> >>>>> Dave
>> >>>>>
>> >>>>> -----Original Message-----
>> >>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
>> >>>>> To: user@hbase.apache.org
>> >>>>> Cc: Stack
>> >>>>> Subject: Re: I can't get many versions of the specified column,but
>> only
>> >>>> get
>> >>>>> the latest version of the specified column
>> >>>>>
>> >>>>> I execute it five times at diffrent time.
>> >>>>>
>> >>>>> //put data by version
>> >>>>>
>> >>>>> final Put p = new Put(key); // key
>> >>>>> final long ts = System.currentTimeMillis();
>> >>>>>      p.add(FAMILY, q1, ts,v1);
>> >>>>>      p.add(FAMILY, q2, ts,v2);
>> >>>>>      p.add(FAMILY, q3, ts,v3);
>> >>>>>     table.put(p);
>> >>>>>
>> >>>>> So I can get five versions ,right?
>> >>>>>
>> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
>> >>>>>
>> >>>>>> What do you get for a result?
>> >>>>>>
>> >>>>>> You are only entering a single version of each column, a single
>> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
>> >>>>>>
>> >>>>>> St.Ack
>> >>>>>>
>> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
>> >>>>>>> I can't get many versions of the specified column,but only get the
>> >>>>> latest
>> >>>>>>> version of the specified column. Is there anyone  help me?
>> >>>>>>>
>> >>>>>>> //put data by version
>> >>>>>>>
>> >>>>>>> final Put p = new Put(key); // key
>> >>>>>>> final long ts = System.currentTimeMillis();
>> >>>>>>>      p.add(FAMILY, q1, ts,v1);
>> >>>>>>>      p.add(FAMILY, q2, ts,v2);
>> >>>>>>>      p.add(FAMILY, q3, ts,v3);
>> >>>>>>>
>> >>>>>>>     table.put(p);
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> //get all versions of data
>> >>>>>>>
>> >>>>>>> final Get get = new Get(key);
>> >>>>>>>          get.addFamily(FAMILY);
>> >>>>>>>          get.setMaxVersions(10);
>> >>>>>>>          final Result result = htable.get(get);
>> >>>>>>>
>> >>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
>> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
>> >>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
>> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>> >>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
>> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
>> >>>>>>>                  .iterator();
>> >>>>>>>          while (iterator.hasNext())
>> >>>>>>>          {
>> >>>>>>>              final Entry<byte[], NavigableMap<byte[],
>> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
>> >>>>>>>              System.out.println(Bytes.toString(next.getKey()));
>> >>>>> //family
>> >>>>>>>              for (final Entry<byte[], NavigableMap<Long, byte[]>>
>> >>>>>>> item : next.getValue().entrySet())
>> >>>>>>>              {
>> >>>>>>>                  System.out.println(Bytes.toString(item.getKey()));
>> >>>>>>>                  for (final Entry<Long, byte[]> _item :
>> >>>>>>> item.getValue().entrySet())
>> >>>>>>>                  {
>> >>>>>>>                      System.out.println(_item.getKey()); //q
>> >>>>>>>
>> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
>> >>>>>>> //value
>> >>>>>>>                  }
>> >>>>>>>              }
>> >>>>>>>
>> >>>>>>>          }
>> >>>>>>>
>> >>>>>>> --
>> >>>>>>> Thanks & Best regards
>> >>>>>>> jiajun
>> >>>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> --
>> >>>>> Thanks & Best regards
>> >>>>> jiajun
>> >>>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> --
>> >>>> Thanks & Best regards
>> >>>> jiajun
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Thanks & Best regards
>> >>> jiajun
>> >>>
>> >>>
>> >>
>> >>
>> >> --
>> >> Thanks & Best regards
>> >> jiajun
>> >>
>>
>
>
>
> --
> Thanks & Best regards
> jiajun
>

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
 This is my test case ,but I get NPE some times .

java.lang.NullPointerException
at
com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

public class GetRowVersionsTest extends TestCase
{
    private final byte[] family    = Bytes.toBytes("log");

    private final byte[] qualifier = Bytes.toBytes("siteUrl");

    private final byte[] rowKey    = Bytes.toBytes(1);

    private final HTable table     =
IDMHBaseConfiguration.getTable(BigTableName.getSite());

    private final long   ts1       = 1298529542218L;

    private final long   ts2       = ts1 + 100;

    private final long   ts3       = ts1 + 100;

    private final byte[] value1    = Bytes.toBytes("value1");

    private final byte[] value2    = Bytes.toBytes("value2");

    private final byte[] value3    = Bytes.toBytes("value3");

    private void insert(final long ts, final byte[] value) throws
IOException
    {
        final Put put = new Put(rowKey);
        put.add(family, qualifier, ts, value);
        table.put(put);
    }

    private void sleep()
    {
        try
        {
            Thread.sleep(1000);
        }
        catch (final InterruptedException e)
        {
            e.printStackTrace();
        }
    }

    @Test
    public void testGetRowMultipleVersions() throws Exception
    {
        insert(ts1, value1);
        sleep();
        insert(ts2, value2);
        sleep();
        insert(ts3, value3);
        sleep();

        // check getRow with multiple versions
        final Get get = new Get(rowKey);
        get.setMaxVersions();
        final Result r = table.get(get);
        final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
byte[]>>> map = r.getMap();
        final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
map.get(family);
        final NavigableMap<Long, byte[]> versionMap =
familyMap.get(qualifier);
        for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
        {
            System.err.println(entry.getKey());
            System.err.println(Bytes.toString(entry.getValue()));
        }
        //        assertTrue(versionMap.size() == 3);

        //        assertTrue(value1 == versionMap.get(ts1));
        //        assertTrue(value2 == versionMap.get(ts2));
        //        assertTrue(value3 == versionMap.get(ts3));

        //        table.delete(new Delete(rowKey));
        //        assertTrue(table.get(get).size() == 0);
        //        table.close();
    }
}


On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano <ta...@gmail.com>wrote:

> Hi Jiajun,
>
> Make sure you don't have the same timestamp on every versions of puts; try
> to put Thread.sleep() in your test(?) codes when necessary.
>
> You might not want to specify the timestamp by yourself but want to let
> HBase to store appropriate ones.
>
> --
> Tatsuya Kawano (Mr.)
> Tokyo, Japan
>
>
> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com> wrote:
>
> > There are test cases for this, the functionality DOES work, something is
> up...
> >
> > Without full code and full descriptions of your tables, debugging is
> > harder than it needs to be.  It's probably a simple typo or something,
> > check your code and table descriptions again. Many people rely on the
> > multi version query capabilities and it is very unlikely to be broken
> > in a released version of hbase.
> >
> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
> >>  final List<KeyValue> list = result.list();
> >>           for (final KeyValue it : list)
> >>           {
> >>               System.out.println(Bytes.toString(it.getKey()));
> >>               System.out.println(Bytes.toString(it.getValue()));
> >>           }
> >> I can only get the last version!  why ? Is there any testcase in Hbase?
> >>
> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:
> >>
> >>> /**
> >>>   * Create a sorted list of the KeyValue's in this result.
> >>>   *
> >>>   * @return The sorted list of KeyValue's.
> >>>   */
> >>>  public List<KeyValue> list() {
> >>>    if(this.kvs == null) {
> >>>      readFields();
> >>>    }
> >>>    return isEmpty()? null: Arrays.asList(sorted());
> >>>  }
> >>>
> >>> I will try it . Thank you very much!
> >>>
> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov>
> wrote:
> >>>
> >>>> Result.list() ?
> >>>> Putting the hbase source into your IDE of choice (yay Eclipse!) is
> really
> >>>> helpful
> >>>>
> >>>> Dave
> >>>>
> >>>>
> >>>> -----Original Message-----
> >>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >>>> To: user@hbase.apache.org
> >>>> Cc: Buttler, David
> >>>> Subject: Re: I can't get many versions of the specified column,but
> only
> >>>> get the latest version of the specified column
> >>>>
> >>>> Thank you David !
> >>>>
> >>>> I alter the table schema as follow:
> >>>>
> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD
> =>
> >>>> 'add'}
> >>>>
> >>>> How to iterate over KeyValues?  which method in Result?
> >>>>
> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov>
> >>>> wrote:
> >>>>
> >>>>> What is your table schema set to?  By default it holds 3 versions.
> >>>>> Also, you might iterating over KeyValues instead of using the Map
> since
> >>>> you
> >>>>> don't really care about the organization, just the time.
> >>>>>
> >>>>> Dave
> >>>>>
> >>>>> -----Original Message-----
> >>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >>>>> To: user@hbase.apache.org
> >>>>> Cc: Stack
> >>>>> Subject: Re: I can't get many versions of the specified column,but
> only
> >>>> get
> >>>>> the latest version of the specified column
> >>>>>
> >>>>> I execute it five times at diffrent time.
> >>>>>
> >>>>> //put data by version
> >>>>>
> >>>>> final Put p = new Put(key); // key
> >>>>> final long ts = System.currentTimeMillis();
> >>>>>      p.add(FAMILY, q1, ts,v1);
> >>>>>      p.add(FAMILY, q2, ts,v2);
> >>>>>      p.add(FAMILY, q3, ts,v3);
> >>>>>     table.put(p);
> >>>>>
> >>>>> So I can get five versions ,right?
> >>>>>
> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
> >>>>>
> >>>>>> What do you get for a result?
> >>>>>>
> >>>>>> You are only entering a single version of each column, a single
> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
> >>>>>>
> >>>>>> St.Ack
> >>>>>>
> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> >>>>>>> I can't get many versions of the specified column,but only get the
> >>>>> latest
> >>>>>>> version of the specified column. Is there anyone  help me?
> >>>>>>>
> >>>>>>> //put data by version
> >>>>>>>
> >>>>>>> final Put p = new Put(key); // key
> >>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>>      p.add(FAMILY, q1, ts,v1);
> >>>>>>>      p.add(FAMILY, q2, ts,v2);
> >>>>>>>      p.add(FAMILY, q3, ts,v3);
> >>>>>>>
> >>>>>>>     table.put(p);
> >>>>>>>
> >>>>>>>
> >>>>>>> //get all versions of data
> >>>>>>>
> >>>>>>> final Get get = new Get(key);
> >>>>>>>          get.addFamily(FAMILY);
> >>>>>>>          get.setMaxVersions(10);
> >>>>>>>          final Result result = htable.get(get);
> >>>>>>>
> >>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >>>>>>>                  .iterator();
> >>>>>>>          while (iterator.hasNext())
> >>>>>>>          {
> >>>>>>>              final Entry<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >>>>>>>              System.out.println(Bytes.toString(next.getKey()));
> >>>>> //family
> >>>>>>>              for (final Entry<byte[], NavigableMap<Long, byte[]>>
> >>>>>>> item : next.getValue().entrySet())
> >>>>>>>              {
> >>>>>>>                  System.out.println(Bytes.toString(item.getKey()));
> >>>>>>>                  for (final Entry<Long, byte[]> _item :
> >>>>>>> item.getValue().entrySet())
> >>>>>>>                  {
> >>>>>>>                      System.out.println(_item.getKey()); //q
> >>>>>>>
> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >>>>>>> //value
> >>>>>>>                  }
> >>>>>>>              }
> >>>>>>>
> >>>>>>>          }
> >>>>>>>
> >>>>>>> --
> >>>>>>> Thanks & Best regards
> >>>>>>> jiajun
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Thanks & Best regards
> >>>>> jiajun
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Thanks & Best regards
> >>>> jiajun
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Thanks & Best regards
> >>> jiajun
> >>>
> >>>
> >>
> >>
> >> --
> >> Thanks & Best regards
> >> jiajun
> >>
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Tatsuya Kawano <ta...@gmail.com>.
Hi Jiajun, 

Make sure you don't have the same timestamp on every versions of puts; try to put Thread.sleep() in your test(?) codes when necessary. 

You might not want to specify the timestamp by yourself but want to let HBase to store appropriate ones. 

--
Tatsuya Kawano (Mr.)
Tokyo, Japan


On Feb 24, 2011, at 11:30 AM, Ryan Rawson <ry...@gmail.com> wrote:

> There are test cases for this, the functionality DOES work, something is up...
> 
> Without full code and full descriptions of your tables, debugging is
> harder than it needs to be.  It's probably a simple typo or something,
> check your code and table descriptions again. Many people rely on the
> multi version query capabilities and it is very unlikely to be broken
> in a released version of hbase.
> 
> On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
>>  final List<KeyValue> list = result.list();
>>           for (final KeyValue it : list)
>>           {
>>               System.out.println(Bytes.toString(it.getKey()));
>>               System.out.println(Bytes.toString(it.getValue()));
>>           }
>> I can only get the last version!  why ? Is there any testcase in Hbase?
>> 
>> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:
>> 
>>> /**
>>>   * Create a sorted list of the KeyValue's in this result.
>>>   *
>>>   * @return The sorted list of KeyValue's.
>>>   */
>>>  public List<KeyValue> list() {
>>>    if(this.kvs == null) {
>>>      readFields();
>>>    }
>>>    return isEmpty()? null: Arrays.asList(sorted());
>>>  }
>>> 
>>> I will try it . Thank you very much!
>>> 
>>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov> wrote:
>>> 
>>>> Result.list() ?
>>>> Putting the hbase source into your IDE of choice (yay Eclipse!) is really
>>>> helpful
>>>> 
>>>> Dave
>>>> 
>>>> 
>>>> -----Original Message-----
>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>>> Sent: Wednesday, February 23, 2011 5:42 PM
>>>> To: user@hbase.apache.org
>>>> Cc: Buttler, David
>>>> Subject: Re: I can't get many versions of the specified column,but only
>>>> get the latest version of the specified column
>>>> 
>>>> Thank you David !
>>>> 
>>>> I alter the table schema as follow:
>>>> 
>>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD =>
>>>> 'add'}
>>>> 
>>>> How to iterate over KeyValues?  which method in Result?
>>>> 
>>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov>
>>>> wrote:
>>>> 
>>>>> What is your table schema set to?  By default it holds 3 versions.
>>>>> Also, you might iterating over KeyValues instead of using the Map since
>>>> you
>>>>> don't really care about the organization, just the time.
>>>>> 
>>>>> Dave
>>>>> 
>>>>> -----Original Message-----
>>>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>>>> Sent: Wednesday, February 23, 2011 5:22 PM
>>>>> To: user@hbase.apache.org
>>>>> Cc: Stack
>>>>> Subject: Re: I can't get many versions of the specified column,but only
>>>> get
>>>>> the latest version of the specified column
>>>>> 
>>>>> I execute it five times at diffrent time.
>>>>> 
>>>>> //put data by version
>>>>> 
>>>>> final Put p = new Put(key); // key
>>>>> final long ts = System.currentTimeMillis();
>>>>>      p.add(FAMILY, q1, ts,v1);
>>>>>      p.add(FAMILY, q2, ts,v2);
>>>>>      p.add(FAMILY, q3, ts,v3);
>>>>>     table.put(p);
>>>>> 
>>>>> So I can get five versions ,right?
>>>>> 
>>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
>>>>> 
>>>>>> What do you get for a result?
>>>>>> 
>>>>>> You are only entering a single version of each column, a single
>>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
>>>>>> 
>>>>>> St.Ack
>>>>>> 
>>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
>>>>>>> I can't get many versions of the specified column,but only get the
>>>>> latest
>>>>>>> version of the specified column. Is there anyone  help me?
>>>>>>> 
>>>>>>> //put data by version
>>>>>>> 
>>>>>>> final Put p = new Put(key); // key
>>>>>>> final long ts = System.currentTimeMillis();
>>>>>>>      p.add(FAMILY, q1, ts,v1);
>>>>>>>      p.add(FAMILY, q2, ts,v2);
>>>>>>>      p.add(FAMILY, q3, ts,v3);
>>>>>>> 
>>>>>>>     table.put(p);
>>>>>>> 
>>>>>>> 
>>>>>>> //get all versions of data
>>>>>>> 
>>>>>>> final Get get = new Get(key);
>>>>>>>          get.addFamily(FAMILY);
>>>>>>>          get.setMaxVersions(10);
>>>>>>>          final Result result = htable.get(get);
>>>>>>> 
>>>>>>>          final NavigableMap<byte[], NavigableMap<byte[],
>>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
>>>>>>>          final Set<Entry<byte[], NavigableMap<byte[],
>>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>>>>>>>          final Iterator<Entry<byte[], NavigableMap<byte[],
>>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
>>>>>>>                  .iterator();
>>>>>>>          while (iterator.hasNext())
>>>>>>>          {
>>>>>>>              final Entry<byte[], NavigableMap<byte[],
>>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
>>>>>>>              System.out.println(Bytes.toString(next.getKey()));
>>>>> //family
>>>>>>>              for (final Entry<byte[], NavigableMap<Long, byte[]>>
>>>>>>> item : next.getValue().entrySet())
>>>>>>>              {
>>>>>>>                  System.out.println(Bytes.toString(item.getKey()));
>>>>>>>                  for (final Entry<Long, byte[]> _item :
>>>>>>> item.getValue().entrySet())
>>>>>>>                  {
>>>>>>>                      System.out.println(_item.getKey()); //q
>>>>>>> 
>>>>>> System.out.println(Bytes.toString(_item.getValue()));
>>>>>>> //value
>>>>>>>                  }
>>>>>>>              }
>>>>>>> 
>>>>>>>          }
>>>>>>> 
>>>>>>> --
>>>>>>> Thanks & Best regards
>>>>>>> jiajun
>>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Thanks & Best regards
>>>>> jiajun
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Thanks & Best regards
>>>> jiajun
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Thanks & Best regards
>>> jiajun
>>> 
>>> 
>> 
>> 
>> --
>> Thanks & Best regards
>> jiajun
>> 

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
I will check my code and table descriptions again. And the test case
is TestGetRowVersions. I
believe that I made a mistake.

2011/2/24 Ryan Rawson <ry...@gmail.com>

> There are test cases for this, the functionality DOES work, something is
> up...
>
> Without full code and full descriptions of your tables, debugging is
> harder than it needs to be.  It's probably a simple typo or something,
> check your code and table descriptions again. Many people rely on the
> multi version query capabilities and it is very unlikely to be broken
> in a released version of hbase.
>
> On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
> >   final List<KeyValue> list = result.list();
> >            for (final KeyValue it : list)
> >            {
> >                System.out.println(Bytes.toString(it.getKey()));
> >                System.out.println(Bytes.toString(it.getValue()));
> >            }
> > I can only get the last version!  why ? Is there any testcase in Hbase?
> >
> > On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:
> >
> >>  /**
> >>    * Create a sorted list of the KeyValue's in this result.
> >>    *
> >>    * @return The sorted list of KeyValue's.
> >>    */
> >>   public List<KeyValue> list() {
> >>     if(this.kvs == null) {
> >>       readFields();
> >>     }
> >>     return isEmpty()? null: Arrays.asList(sorted());
> >>   }
> >>
> >> I will try it . Thank you very much!
> >>
> >> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov>
> wrote:
> >>
> >>> Result.list() ?
> >>> Putting the hbase source into your IDE of choice (yay Eclipse!) is
> really
> >>> helpful
> >>>
> >>> Dave
> >>>
> >>>
> >>> -----Original Message-----
> >>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>> Sent: Wednesday, February 23, 2011 5:42 PM
> >>> To: user@hbase.apache.org
> >>> Cc: Buttler, David
> >>> Subject: Re: I can't get many versions of the specified column,but only
> >>> get the latest version of the specified column
> >>>
> >>> Thank you David !
> >>>
> >>> I alter the table schema as follow:
> >>>
> >>> > alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD
> =>
> >>> 'add'}
> >>>
> >>> How to iterate over KeyValues?  which method in Result?
> >>>
> >>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov>
> >>> wrote:
> >>>
> >>> > What is your table schema set to?  By default it holds 3 versions.
> >>> > Also, you might iterating over KeyValues instead of using the Map
> since
> >>> you
> >>> > don't really care about the organization, just the time.
> >>> >
> >>> > Dave
> >>> >
> >>> > -----Original Message-----
> >>> > From: 陈加俊 [mailto:cjjvictory@gmail.com]
> >>> > Sent: Wednesday, February 23, 2011 5:22 PM
> >>> > To: user@hbase.apache.org
> >>> > Cc: Stack
> >>> > Subject: Re: I can't get many versions of the specified column,but
> only
> >>> get
> >>> > the latest version of the specified column
> >>> >
> >>> > I execute it five times at diffrent time.
> >>> >
> >>> > //put data by version
> >>> >
> >>> >  final Put p = new Put(key); // key
> >>> > final long ts = System.currentTimeMillis();
> >>> >       p.add(FAMILY, q1, ts,v1);
> >>> >       p.add(FAMILY, q2, ts,v2);
> >>> >       p.add(FAMILY, q3, ts,v3);
> >>> >      table.put(p);
> >>> >
> >>> > So I can get five versions ,right?
> >>> >
> >>> > On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
> >>> >
> >>> > > What do you get for a result?
> >>> > >
> >>> > > You are only entering a single version of each column, a single
> >>> > > version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
> >>> > >
> >>> > > St.Ack
> >>> > >
> >>> > > On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> >>> > > > I can't get many versions of the specified column,but only get
> the
> >>> > latest
> >>> > > > version of the specified column. Is there anyone  help me?
> >>> > > >
> >>> > > > //put data by version
> >>> > > >
> >>> > > >  final Put p = new Put(key); // key
> >>> > > > final long ts = System.currentTimeMillis();
> >>> > > >       p.add(FAMILY, q1, ts,v1);
> >>> > > >       p.add(FAMILY, q2, ts,v2);
> >>> > > >       p.add(FAMILY, q3, ts,v3);
> >>> > > >
> >>> > > >      table.put(p);
> >>> > > >
> >>> > > >
> >>> > > > //get all versions of data
> >>> > > >
> >>> > > > final Get get = new Get(key);
> >>> > > >           get.addFamily(FAMILY);
> >>> > > >           get.setMaxVersions(10);
> >>> > > >           final Result result = htable.get(get);
> >>> > > >
> >>> > > >           final NavigableMap<byte[], NavigableMap<byte[],
> >>> > > > NavigableMap<Long, byte[]>>> map = result.getMap();
> >>> > > >           final Set<Entry<byte[], NavigableMap<byte[],
> >>> > > > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >>> > > >           final Iterator<Entry<byte[], NavigableMap<byte[],
> >>> > > > NavigableMap<Long, byte[]>>>> iterator = entrySet
> >>> > > >                   .iterator();
> >>> > > >           while (iterator.hasNext())
> >>> > > >           {
> >>> > > >               final Entry<byte[], NavigableMap<byte[],
> >>> > > > NavigableMap<Long, byte[]>>> next = iterator.next();
> >>> > > >               System.out.println(Bytes.toString(next.getKey()));
> >>> > //family
> >>> > > >               for (final Entry<byte[], NavigableMap<Long,
> byte[]>>
> >>> > > > item : next.getValue().entrySet())
> >>> > > >               {
> >>> > > >
> System.out.println(Bytes.toString(item.getKey()));
> >>> > > >                   for (final Entry<Long, byte[]> _item :
> >>> > > > item.getValue().entrySet())
> >>> > > >                   {
> >>> > > >                       System.out.println(_item.getKey()); //q
> >>> > > >
> >>> > > System.out.println(Bytes.toString(_item.getValue()));
> >>> > > > //value
> >>> > > >                   }
> >>> > > >               }
> >>> > > >
> >>> > > >           }
> >>> > > >
> >>> > > > --
> >>> > > > Thanks & Best regards
> >>> > > > jiajun
> >>> > > >
> >>> > >
> >>> >
> >>> >
> >>> >
> >>> > --
> >>> > Thanks & Best regards
> >>> > jiajun
> >>> >
> >>>
> >>>
> >>>
> >>> --
> >>> Thanks & Best regards
> >>> jiajun
> >>>
> >>
> >>
> >>
> >> --
> >> Thanks & Best regards
> >> jiajun
> >>
> >>
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
> >
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Ryan Rawson <ry...@gmail.com>.
There are test cases for this, the functionality DOES work, something is up...

Without full code and full descriptions of your tables, debugging is
harder than it needs to be.  It's probably a simple typo or something,
check your code and table descriptions again. Many people rely on the
multi version query capabilities and it is very unlikely to be broken
in a released version of hbase.

On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <cj...@gmail.com> wrote:
>   final List<KeyValue> list = result.list();
>            for (final KeyValue it : list)
>            {
>                System.out.println(Bytes.toString(it.getKey()));
>                System.out.println(Bytes.toString(it.getValue()));
>            }
> I can only get the last version!  why ? Is there any testcase in Hbase?
>
> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:
>
>>  /**
>>    * Create a sorted list of the KeyValue's in this result.
>>    *
>>    * @return The sorted list of KeyValue's.
>>    */
>>   public List<KeyValue> list() {
>>     if(this.kvs == null) {
>>       readFields();
>>     }
>>     return isEmpty()? null: Arrays.asList(sorted());
>>   }
>>
>> I will try it . Thank you very much!
>>
>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov> wrote:
>>
>>> Result.list() ?
>>> Putting the hbase source into your IDE of choice (yay Eclipse!) is really
>>> helpful
>>>
>>> Dave
>>>
>>>
>>> -----Original Message-----
>>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>> Sent: Wednesday, February 23, 2011 5:42 PM
>>> To: user@hbase.apache.org
>>> Cc: Buttler, David
>>> Subject: Re: I can't get many versions of the specified column,but only
>>> get the latest version of the specified column
>>>
>>> Thank you David !
>>>
>>> I alter the table schema as follow:
>>>
>>> > alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD =>
>>> 'add'}
>>>
>>> How to iterate over KeyValues?  which method in Result?
>>>
>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov>
>>> wrote:
>>>
>>> > What is your table schema set to?  By default it holds 3 versions.
>>> > Also, you might iterating over KeyValues instead of using the Map since
>>> you
>>> > don't really care about the organization, just the time.
>>> >
>>> > Dave
>>> >
>>> > -----Original Message-----
>>> > From: 陈加俊 [mailto:cjjvictory@gmail.com]
>>> > Sent: Wednesday, February 23, 2011 5:22 PM
>>> > To: user@hbase.apache.org
>>> > Cc: Stack
>>> > Subject: Re: I can't get many versions of the specified column,but only
>>> get
>>> > the latest version of the specified column
>>> >
>>> > I execute it five times at diffrent time.
>>> >
>>> > //put data by version
>>> >
>>> >  final Put p = new Put(key); // key
>>> > final long ts = System.currentTimeMillis();
>>> >       p.add(FAMILY, q1, ts,v1);
>>> >       p.add(FAMILY, q2, ts,v2);
>>> >       p.add(FAMILY, q3, ts,v3);
>>> >      table.put(p);
>>> >
>>> > So I can get five versions ,right?
>>> >
>>> > On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
>>> >
>>> > > What do you get for a result?
>>> > >
>>> > > You are only entering a single version of each column, a single
>>> > > version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
>>> > >
>>> > > St.Ack
>>> > >
>>> > > On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
>>> > > > I can't get many versions of the specified column,but only get the
>>> > latest
>>> > > > version of the specified column. Is there anyone  help me?
>>> > > >
>>> > > > //put data by version
>>> > > >
>>> > > >  final Put p = new Put(key); // key
>>> > > > final long ts = System.currentTimeMillis();
>>> > > >       p.add(FAMILY, q1, ts,v1);
>>> > > >       p.add(FAMILY, q2, ts,v2);
>>> > > >       p.add(FAMILY, q3, ts,v3);
>>> > > >
>>> > > >      table.put(p);
>>> > > >
>>> > > >
>>> > > > //get all versions of data
>>> > > >
>>> > > > final Get get = new Get(key);
>>> > > >           get.addFamily(FAMILY);
>>> > > >           get.setMaxVersions(10);
>>> > > >           final Result result = htable.get(get);
>>> > > >
>>> > > >           final NavigableMap<byte[], NavigableMap<byte[],
>>> > > > NavigableMap<Long, byte[]>>> map = result.getMap();
>>> > > >           final Set<Entry<byte[], NavigableMap<byte[],
>>> > > > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>>> > > >           final Iterator<Entry<byte[], NavigableMap<byte[],
>>> > > > NavigableMap<Long, byte[]>>>> iterator = entrySet
>>> > > >                   .iterator();
>>> > > >           while (iterator.hasNext())
>>> > > >           {
>>> > > >               final Entry<byte[], NavigableMap<byte[],
>>> > > > NavigableMap<Long, byte[]>>> next = iterator.next();
>>> > > >               System.out.println(Bytes.toString(next.getKey()));
>>> > //family
>>> > > >               for (final Entry<byte[], NavigableMap<Long, byte[]>>
>>> > > > item : next.getValue().entrySet())
>>> > > >               {
>>> > > >                   System.out.println(Bytes.toString(item.getKey()));
>>> > > >                   for (final Entry<Long, byte[]> _item :
>>> > > > item.getValue().entrySet())
>>> > > >                   {
>>> > > >                       System.out.println(_item.getKey()); //q
>>> > > >
>>> > > System.out.println(Bytes.toString(_item.getValue()));
>>> > > > //value
>>> > > >                   }
>>> > > >               }
>>> > > >
>>> > > >           }
>>> > > >
>>> > > > --
>>> > > > Thanks & Best regards
>>> > > > jiajun
>>> > > >
>>> > >
>>> >
>>> >
>>> >
>>> > --
>>> > Thanks & Best regards
>>> > jiajun
>>> >
>>>
>>>
>>>
>>> --
>>> Thanks & Best regards
>>> jiajun
>>>
>>
>>
>>
>> --
>> Thanks & Best regards
>> jiajun
>>
>>
>
>
> --
> Thanks & Best regards
> jiajun
>

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
   final List<KeyValue> list = result.list();
            for (final KeyValue it : list)
            {
                System.out.println(Bytes.toString(it.getKey()));
                System.out.println(Bytes.toString(it.getValue()));
            }
I can only get the last version!  why ? Is there any testcase in Hbase?

On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <cj...@gmail.com> wrote:

>  /**
>    * Create a sorted list of the KeyValue's in this result.
>    *
>    * @return The sorted list of KeyValue's.
>    */
>   public List<KeyValue> list() {
>     if(this.kvs == null) {
>       readFields();
>     }
>     return isEmpty()? null: Arrays.asList(sorted());
>   }
>
> I will try it . Thank you very much!
>
> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov> wrote:
>
>> Result.list() ?
>> Putting the hbase source into your IDE of choice (yay Eclipse!) is really
>> helpful
>>
>> Dave
>>
>>
>> -----Original Message-----
>> From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> Sent: Wednesday, February 23, 2011 5:42 PM
>> To: user@hbase.apache.org
>> Cc: Buttler, David
>> Subject: Re: I can't get many versions of the specified column,but only
>> get the latest version of the specified column
>>
>> Thank you David !
>>
>> I alter the table schema as follow:
>>
>> > alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD =>
>> 'add'}
>>
>> How to iterate over KeyValues?  which method in Result?
>>
>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov>
>> wrote:
>>
>> > What is your table schema set to?  By default it holds 3 versions.
>> > Also, you might iterating over KeyValues instead of using the Map since
>> you
>> > don't really care about the organization, just the time.
>> >
>> > Dave
>> >
>> > -----Original Message-----
>> > From: 陈加俊 [mailto:cjjvictory@gmail.com]
>> > Sent: Wednesday, February 23, 2011 5:22 PM
>> > To: user@hbase.apache.org
>> > Cc: Stack
>> > Subject: Re: I can't get many versions of the specified column,but only
>> get
>> > the latest version of the specified column
>> >
>> > I execute it five times at diffrent time.
>> >
>> > //put data by version
>> >
>> >  final Put p = new Put(key); // key
>> > final long ts = System.currentTimeMillis();
>> >       p.add(FAMILY, q1, ts,v1);
>> >       p.add(FAMILY, q2, ts,v2);
>> >       p.add(FAMILY, q3, ts,v3);
>> >      table.put(p);
>> >
>> > So I can get five versions ,right?
>> >
>> > On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
>> >
>> > > What do you get for a result?
>> > >
>> > > You are only entering a single version of each column, a single
>> > > version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
>> > >
>> > > St.Ack
>> > >
>> > > On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
>> > > > I can't get many versions of the specified column,but only get the
>> > latest
>> > > > version of the specified column. Is there anyone  help me?
>> > > >
>> > > > //put data by version
>> > > >
>> > > >  final Put p = new Put(key); // key
>> > > > final long ts = System.currentTimeMillis();
>> > > >       p.add(FAMILY, q1, ts,v1);
>> > > >       p.add(FAMILY, q2, ts,v2);
>> > > >       p.add(FAMILY, q3, ts,v3);
>> > > >
>> > > >      table.put(p);
>> > > >
>> > > >
>> > > > //get all versions of data
>> > > >
>> > > > final Get get = new Get(key);
>> > > >           get.addFamily(FAMILY);
>> > > >           get.setMaxVersions(10);
>> > > >           final Result result = htable.get(get);
>> > > >
>> > > >           final NavigableMap<byte[], NavigableMap<byte[],
>> > > > NavigableMap<Long, byte[]>>> map = result.getMap();
>> > > >           final Set<Entry<byte[], NavigableMap<byte[],
>> > > > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>> > > >           final Iterator<Entry<byte[], NavigableMap<byte[],
>> > > > NavigableMap<Long, byte[]>>>> iterator = entrySet
>> > > >                   .iterator();
>> > > >           while (iterator.hasNext())
>> > > >           {
>> > > >               final Entry<byte[], NavigableMap<byte[],
>> > > > NavigableMap<Long, byte[]>>> next = iterator.next();
>> > > >               System.out.println(Bytes.toString(next.getKey()));
>> > //family
>> > > >               for (final Entry<byte[], NavigableMap<Long, byte[]>>
>> > > > item : next.getValue().entrySet())
>> > > >               {
>> > > >                   System.out.println(Bytes.toString(item.getKey()));
>> > > >                   for (final Entry<Long, byte[]> _item :
>> > > > item.getValue().entrySet())
>> > > >                   {
>> > > >                       System.out.println(_item.getKey()); //q
>> > > >
>> > > System.out.println(Bytes.toString(_item.getValue()));
>> > > > //value
>> > > >                   }
>> > > >               }
>> > > >
>> > > >           }
>> > > >
>> > > > --
>> > > > Thanks & Best regards
>> > > > jiajun
>> > > >
>> > >
>> >
>> >
>> >
>> > --
>> > Thanks & Best regards
>> > jiajun
>> >
>>
>>
>>
>> --
>> Thanks & Best regards
>> jiajun
>>
>
>
>
> --
> Thanks & Best regards
> jiajun
>
>


-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
 /**
   * Create a sorted list of the KeyValue's in this result.
   *
   * @return The sorted list of KeyValue's.
   */
  public List<KeyValue> list() {
    if(this.kvs == null) {
      readFields();
    }
    return isEmpty()? null: Arrays.asList(sorted());
  }

I will try it . Thank you very much!

On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <bu...@llnl.gov> wrote:

> Result.list() ?
> Putting the hbase source into your IDE of choice (yay Eclipse!) is really
> helpful
>
> Dave
>
>
> -----Original Message-----
> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> Sent: Wednesday, February 23, 2011 5:42 PM
> To: user@hbase.apache.org
> Cc: Buttler, David
> Subject: Re: I can't get many versions of the specified column,but only get
> the latest version of the specified column
>
> Thank you David !
>
> I alter the table schema as follow:
>
> > alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD =>
> 'add'}
>
> How to iterate over KeyValues?  which method in Result?
>
> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov> wrote:
>
> > What is your table schema set to?  By default it holds 3 versions.
> > Also, you might iterating over KeyValues instead of using the Map since
> you
> > don't really care about the organization, just the time.
> >
> > Dave
> >
> > -----Original Message-----
> > From: 陈加俊 [mailto:cjjvictory@gmail.com]
> > Sent: Wednesday, February 23, 2011 5:22 PM
> > To: user@hbase.apache.org
> > Cc: Stack
> > Subject: Re: I can't get many versions of the specified column,but only
> get
> > the latest version of the specified column
> >
> > I execute it five times at diffrent time.
> >
> > //put data by version
> >
> >  final Put p = new Put(key); // key
> > final long ts = System.currentTimeMillis();
> >       p.add(FAMILY, q1, ts,v1);
> >       p.add(FAMILY, q2, ts,v2);
> >       p.add(FAMILY, q3, ts,v3);
> >      table.put(p);
> >
> > So I can get five versions ,right?
> >
> > On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
> >
> > > What do you get for a result?
> > >
> > > You are only entering a single version of each column, a single
> > > version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
> > >
> > > St.Ack
> > >
> > > On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> > > > I can't get many versions of the specified column,but only get the
> > latest
> > > > version of the specified column. Is there anyone  help me?
> > > >
> > > > //put data by version
> > > >
> > > >  final Put p = new Put(key); // key
> > > > final long ts = System.currentTimeMillis();
> > > >       p.add(FAMILY, q1, ts,v1);
> > > >       p.add(FAMILY, q2, ts,v2);
> > > >       p.add(FAMILY, q3, ts,v3);
> > > >
> > > >      table.put(p);
> > > >
> > > >
> > > > //get all versions of data
> > > >
> > > > final Get get = new Get(key);
> > > >           get.addFamily(FAMILY);
> > > >           get.setMaxVersions(10);
> > > >           final Result result = htable.get(get);
> > > >
> > > >           final NavigableMap<byte[], NavigableMap<byte[],
> > > > NavigableMap<Long, byte[]>>> map = result.getMap();
> > > >           final Set<Entry<byte[], NavigableMap<byte[],
> > > > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> > > >           final Iterator<Entry<byte[], NavigableMap<byte[],
> > > > NavigableMap<Long, byte[]>>>> iterator = entrySet
> > > >                   .iterator();
> > > >           while (iterator.hasNext())
> > > >           {
> > > >               final Entry<byte[], NavigableMap<byte[],
> > > > NavigableMap<Long, byte[]>>> next = iterator.next();
> > > >               System.out.println(Bytes.toString(next.getKey()));
> > //family
> > > >               for (final Entry<byte[], NavigableMap<Long, byte[]>>
> > > > item : next.getValue().entrySet())
> > > >               {
> > > >                   System.out.println(Bytes.toString(item.getKey()));
> > > >                   for (final Entry<Long, byte[]> _item :
> > > > item.getValue().entrySet())
> > > >                   {
> > > >                       System.out.println(_item.getKey()); //q
> > > >
> > > System.out.println(Bytes.toString(_item.getValue()));
> > > > //value
> > > >                   }
> > > >               }
> > > >
> > > >           }
> > > >
> > > > --
> > > > Thanks & Best regards
> > > > jiajun
> > > >
> > >
> >
> >
> >
> > --
> > Thanks & Best regards
> > jiajun
> >
>
>
>
> --
> Thanks & Best regards
> jiajun
>



-- 
Thanks & Best regards
jiajun

RE: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by "Buttler, David" <bu...@llnl.gov>.
Result.list() ?
Putting the hbase source into your IDE of choice (yay Eclipse!) is really helpful

Dave


-----Original Message-----
From: 陈加俊 [mailto:cjjvictory@gmail.com] 
Sent: Wednesday, February 23, 2011 5:42 PM
To: user@hbase.apache.org
Cc: Buttler, David
Subject: Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Thank you David !

I alter the table schema as follow:

> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD =>
'add'}

How to iterate over KeyValues?  which method in Result?

On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov> wrote:

> What is your table schema set to?  By default it holds 3 versions.
> Also, you might iterating over KeyValues instead of using the Map since you
> don't really care about the organization, just the time.
>
> Dave
>
> -----Original Message-----
> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> Sent: Wednesday, February 23, 2011 5:22 PM
> To: user@hbase.apache.org
> Cc: Stack
> Subject: Re: I can't get many versions of the specified column,but only get
> the latest version of the specified column
>
> I execute it five times at diffrent time.
>
> //put data by version
>
>  final Put p = new Put(key); // key
> final long ts = System.currentTimeMillis();
>       p.add(FAMILY, q1, ts,v1);
>       p.add(FAMILY, q2, ts,v2);
>       p.add(FAMILY, q3, ts,v3);
>      table.put(p);
>
> So I can get five versions ,right?
>
> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
>
> > What do you get for a result?
> >
> > You are only entering a single version of each column, a single
> > version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
> >
> > St.Ack
> >
> > On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> > > I can't get many versions of the specified column,but only get the
> latest
> > > version of the specified column. Is there anyone  help me?
> > >
> > > //put data by version
> > >
> > >  final Put p = new Put(key); // key
> > > final long ts = System.currentTimeMillis();
> > >       p.add(FAMILY, q1, ts,v1);
> > >       p.add(FAMILY, q2, ts,v2);
> > >       p.add(FAMILY, q3, ts,v3);
> > >
> > >      table.put(p);
> > >
> > >
> > > //get all versions of data
> > >
> > > final Get get = new Get(key);
> > >           get.addFamily(FAMILY);
> > >           get.setMaxVersions(10);
> > >           final Result result = htable.get(get);
> > >
> > >           final NavigableMap<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>> map = result.getMap();
> > >           final Set<Entry<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> > >           final Iterator<Entry<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>>> iterator = entrySet
> > >                   .iterator();
> > >           while (iterator.hasNext())
> > >           {
> > >               final Entry<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>> next = iterator.next();
> > >               System.out.println(Bytes.toString(next.getKey()));
> //family
> > >               for (final Entry<byte[], NavigableMap<Long, byte[]>>
> > > item : next.getValue().entrySet())
> > >               {
> > >                   System.out.println(Bytes.toString(item.getKey()));
> > >                   for (final Entry<Long, byte[]> _item :
> > > item.getValue().entrySet())
> > >                   {
> > >                       System.out.println(_item.getKey()); //q
> > >
> > System.out.println(Bytes.toString(_item.getValue()));
> > > //value
> > >                   }
> > >               }
> > >
> > >           }
> > >
> > > --
> > > Thanks & Best regards
> > > jiajun
> > >
> >
>
>
>
> --
> Thanks & Best regards
> jiajun
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
Thank you David !

I alter the table schema as follow:

> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD =>
'add'}

How to iterate over KeyValues?  which method in Result?

On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <bu...@llnl.gov> wrote:

> What is your table schema set to?  By default it holds 3 versions.
> Also, you might iterating over KeyValues instead of using the Map since you
> don't really care about the organization, just the time.
>
> Dave
>
> -----Original Message-----
> From: 陈加俊 [mailto:cjjvictory@gmail.com]
> Sent: Wednesday, February 23, 2011 5:22 PM
> To: user@hbase.apache.org
> Cc: Stack
> Subject: Re: I can't get many versions of the specified column,but only get
> the latest version of the specified column
>
> I execute it five times at diffrent time.
>
> //put data by version
>
>  final Put p = new Put(key); // key
> final long ts = System.currentTimeMillis();
>       p.add(FAMILY, q1, ts,v1);
>       p.add(FAMILY, q2, ts,v2);
>       p.add(FAMILY, q3, ts,v3);
>      table.put(p);
>
> So I can get five versions ,right?
>
> On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:
>
> > What do you get for a result?
> >
> > You are only entering a single version of each column, a single
> > version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
> >
> > St.Ack
> >
> > On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> > > I can't get many versions of the specified column,but only get the
> latest
> > > version of the specified column. Is there anyone  help me?
> > >
> > > //put data by version
> > >
> > >  final Put p = new Put(key); // key
> > > final long ts = System.currentTimeMillis();
> > >       p.add(FAMILY, q1, ts,v1);
> > >       p.add(FAMILY, q2, ts,v2);
> > >       p.add(FAMILY, q3, ts,v3);
> > >
> > >      table.put(p);
> > >
> > >
> > > //get all versions of data
> > >
> > > final Get get = new Get(key);
> > >           get.addFamily(FAMILY);
> > >           get.setMaxVersions(10);
> > >           final Result result = htable.get(get);
> > >
> > >           final NavigableMap<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>> map = result.getMap();
> > >           final Set<Entry<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> > >           final Iterator<Entry<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>>> iterator = entrySet
> > >                   .iterator();
> > >           while (iterator.hasNext())
> > >           {
> > >               final Entry<byte[], NavigableMap<byte[],
> > > NavigableMap<Long, byte[]>>> next = iterator.next();
> > >               System.out.println(Bytes.toString(next.getKey()));
> //family
> > >               for (final Entry<byte[], NavigableMap<Long, byte[]>>
> > > item : next.getValue().entrySet())
> > >               {
> > >                   System.out.println(Bytes.toString(item.getKey()));
> > >                   for (final Entry<Long, byte[]> _item :
> > > item.getValue().entrySet())
> > >                   {
> > >                       System.out.println(_item.getKey()); //q
> > >
> > System.out.println(Bytes.toString(_item.getValue()));
> > > //value
> > >                   }
> > >               }
> > >
> > >           }
> > >
> > > --
> > > Thanks & Best regards
> > > jiajun
> > >
> >
>
>
>
> --
> Thanks & Best regards
> jiajun
>



-- 
Thanks & Best regards
jiajun

RE: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by "Buttler, David" <bu...@llnl.gov>.
What is your table schema set to?  By default it holds 3 versions.
Also, you might iterating over KeyValues instead of using the Map since you don't really care about the organization, just the time.

Dave

-----Original Message-----
From: 陈加俊 [mailto:cjjvictory@gmail.com] 
Sent: Wednesday, February 23, 2011 5:22 PM
To: user@hbase.apache.org
Cc: Stack
Subject: Re: I can't get many versions of the specified column,but only get the latest version of the specified column

I execute it five times at diffrent time.

//put data by version

 final Put p = new Put(key); // key
final long ts = System.currentTimeMillis();
       p.add(FAMILY, q1, ts,v1);
       p.add(FAMILY, q2, ts,v2);
       p.add(FAMILY, q3, ts,v3);
      table.put(p);

So I can get five versions ,right?

On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:

> What do you get for a result?
>
> You are only entering a single version of each column, a single
> version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
>
> St.Ack
>
> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> > I can't get many versions of the specified column,but only get the latest
> > version of the specified column. Is there anyone  help me?
> >
> > //put data by version
> >
> >  final Put p = new Put(key); // key
> > final long ts = System.currentTimeMillis();
> >       p.add(FAMILY, q1, ts,v1);
> >       p.add(FAMILY, q2, ts,v2);
> >       p.add(FAMILY, q3, ts,v3);
> >
> >      table.put(p);
> >
> >
> > //get all versions of data
> >
> > final Get get = new Get(key);
> >           get.addFamily(FAMILY);
> >           get.setMaxVersions(10);
> >           final Result result = htable.get(get);
> >
> >           final NavigableMap<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>> map = result.getMap();
> >           final Set<Entry<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >           final Iterator<Entry<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>>> iterator = entrySet
> >                   .iterator();
> >           while (iterator.hasNext())
> >           {
> >               final Entry<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>> next = iterator.next();
> >               System.out.println(Bytes.toString(next.getKey())); //family
> >               for (final Entry<byte[], NavigableMap<Long, byte[]>>
> > item : next.getValue().entrySet())
> >               {
> >                   System.out.println(Bytes.toString(item.getKey()));
> >                   for (final Entry<Long, byte[]> _item :
> > item.getValue().entrySet())
> >                   {
> >                       System.out.println(_item.getKey()); //q
> >
> System.out.println(Bytes.toString(_item.getValue()));
> > //value
> >                   }
> >               }
> >
> >           }
> >
> > --
> > Thanks & Best regards
> > jiajun
> >
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by 陈加俊 <cj...@gmail.com>.
I execute it five times at diffrent time.

//put data by version

 final Put p = new Put(key); // key
final long ts = System.currentTimeMillis();
       p.add(FAMILY, q1, ts,v1);
       p.add(FAMILY, q2, ts,v2);
       p.add(FAMILY, q3, ts,v3);
      table.put(p);

So I can get five versions ,right?

On Thu, Feb 24, 2011 at 2:06 AM, Stack <st...@duboce.net> wrote:

> What do you get for a result?
>
> You are only entering a single version of each column, a single
> version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
>
> St.Ack
>
> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> > I can't get many versions of the specified column,but only get the latest
> > version of the specified column. Is there anyone  help me?
> >
> > //put data by version
> >
> >  final Put p = new Put(key); // key
> > final long ts = System.currentTimeMillis();
> >       p.add(FAMILY, q1, ts,v1);
> >       p.add(FAMILY, q2, ts,v2);
> >       p.add(FAMILY, q3, ts,v3);
> >
> >      table.put(p);
> >
> >
> > //get all versions of data
> >
> > final Get get = new Get(key);
> >           get.addFamily(FAMILY);
> >           get.setMaxVersions(10);
> >           final Result result = htable.get(get);
> >
> >           final NavigableMap<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>> map = result.getMap();
> >           final Set<Entry<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >           final Iterator<Entry<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>>> iterator = entrySet
> >                   .iterator();
> >           while (iterator.hasNext())
> >           {
> >               final Entry<byte[], NavigableMap<byte[],
> > NavigableMap<Long, byte[]>>> next = iterator.next();
> >               System.out.println(Bytes.toString(next.getKey())); //family
> >               for (final Entry<byte[], NavigableMap<Long, byte[]>>
> > item : next.getValue().entrySet())
> >               {
> >                   System.out.println(Bytes.toString(item.getKey()));
> >                   for (final Entry<Long, byte[]> _item :
> > item.getValue().entrySet())
> >                   {
> >                       System.out.println(_item.getKey()); //q
> >
> System.out.println(Bytes.toString(_item.getValue()));
> > //value
> >                   }
> >               }
> >
> >           }
> >
> > --
> > Thanks & Best regards
> > jiajun
> >
>



-- 
Thanks & Best regards
jiajun

Re: I can't get many versions of the specified column,but only get the latest version of the specified column

Posted by Stack <st...@duboce.net>.
What do you get for a result?

You are only entering a single version of each column, a single
version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.

St.Ack

On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <cj...@gmail.com> wrote:
> I can't get many versions of the specified column,but only get the latest
> version of the specified column. Is there anyone  help me?
>
> //put data by version
>
>  final Put p = new Put(key); // key
> final long ts = System.currentTimeMillis();
>       p.add(FAMILY, q1, ts,v1);
>       p.add(FAMILY, q2, ts,v2);
>       p.add(FAMILY, q3, ts,v3);
>
>      table.put(p);
>
>
> //get all versions of data
>
> final Get get = new Get(key);
>           get.addFamily(FAMILY);
>           get.setMaxVersions(10);
>           final Result result = htable.get(get);
>
>           final NavigableMap<byte[], NavigableMap<byte[],
> NavigableMap<Long, byte[]>>> map = result.getMap();
>           final Set<Entry<byte[], NavigableMap<byte[],
> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
>           final Iterator<Entry<byte[], NavigableMap<byte[],
> NavigableMap<Long, byte[]>>>> iterator = entrySet
>                   .iterator();
>           while (iterator.hasNext())
>           {
>               final Entry<byte[], NavigableMap<byte[],
> NavigableMap<Long, byte[]>>> next = iterator.next();
>               System.out.println(Bytes.toString(next.getKey())); //family
>               for (final Entry<byte[], NavigableMap<Long, byte[]>>
> item : next.getValue().entrySet())
>               {
>                   System.out.println(Bytes.toString(item.getKey()));
>                   for (final Entry<Long, byte[]> _item :
> item.getValue().entrySet())
>                   {
>                       System.out.println(_item.getKey()); //q
>                       System.out.println(Bytes.toString(_item.getValue()));
> //value
>                   }
>               }
>
>           }
>
> --
> Thanks & Best regards
> jiajun
>