You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by jing wang <ha...@gmail.com> on 2012/08/24 04:37:38 UTC
hbase many-to-many design
Hi 'user',
This is a many-to-many question, I also infer the hbase design FAQ,
http://wiki.apache.org/hadoop/Hbase/FAQ_Design.
What I want to do is desinging a 'user' table, incluing 'user' basic
infomations(columnFamily1), and team-name 'user' joined in(columnFamily2),
When a user join in a new Team, I want to update the 'user' table to
add a column to 'columnFamily2'. So when getting the user , I get all the
team-names the user join in.
Yet I don't want to put duplicate records, known as multi-versions,
each user has only one record.
What should I do?
Any advice will be appreciated!
Thanks & Best Regards
Mike
Re: hbase many-to-many design
Posted by jing wang <ha...@gmail.com>.
Hi Sonal,
Thanks again.I have got a misunderstanding of Column-oriented Hbase.
Said by Abhishek, solving my problem
*You can add a new column unannounced. This means your current 'put' does
not have to recall which other columns are already present in the row or
for that matter, in the table. You just issue a put command as if it was
your first one, and the column will be added.
Unlike rdbms, There are no update or alter table commands You need to
execute to add a new column.* *
If the column you are adding already existed,then a new version of value
you put, is stored.*
Thanks,
Mike
2012/8/24 Sonal Goyal <so...@gmail.com>
> Sorry, is this what you want? I created a table with two column families. I
> added one row and column family cf1 with qualifier team1. Then I added new
> team cf1 with qualifier team2.
>
> hbase(main):001:0> create 'multi','cf1','cf2'
> 0 row(s) in 1.6240 seconds
>
> hbase(main):002:0> put 'multi','row1','cf1:team1','firstTeam'
> 0 row(s) in 0.0880 seconds
>
> hbase(main):003:0> scan 'multi'
> ROW COLUMN+CELL
>
> row1 column=cf1:team1, timestamp=1345783824219,
> value=firstTeam
> 1 row(s) in 0.0540 seconds
>
> hbase(main):004:0> put 'multi','row1','cf1:team2','secondTeam'
> 0 row(s) in 0.0060 seconds
>
> hbase(main):005:0> scan 'multi'
> ROW COLUMN+CELL
>
> row1 column=cf1:team1, timestamp=1345783824219,
> value=firstTeam
> row1 column=cf1:team2, timestamp=1345783846821,
> value=secondTea
> m
>
> 1 row(s) in 0.0250 seconds
>
>
> Best Regards,
> Sonal
> Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
> Nube Technologies <http://www.nubetech.co>
>
> <http://in.linkedin.com/in/sonalgoyal>
>
>
>
>
>
> On Fri, Aug 24, 2012 at 10:03 AM, jing wang <happygodwithwang@gmail.com
> >wrote:
>
> > Hi Sonal,
> >
> > Thanks for your reply.
> > How to add a new column to the existing columnFamily?The method I want
> > to try is using 3 steps, first get the record, construct a new put, using
> > the reocrd's( getted before) columnFamily2, then delete the old record in
> > Hbase, finally put the new constructed 'put' into Hbase.I really don't
> > think this is a good way.
> > if another 'put', including a new column is put to Hbase, this is a
> > 'update' action or another version?
> > Would you please give me some reference for adding a column to a row?
> >
> > Thanks & Best Regards
> > Mike
> >
> >
> > 2012/8/24 Sonal Goyal <so...@gmail.com>
> >
> > > If you are you adding a new column to the team column family, I dont
> > think
> > > multi version comes into picture. Multi Versioning is saving copies of
> > > values of a particular cell, but you are creating a new cell within the
> > > same row.
> > >
> > >
> > > Best Regards,
> > > Sonal
> > > Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
> > > Nube Technologies <http://www.nubetech.co>
> > >
> > > <http://in.linkedin.com/in/sonalgoyal>
> > >
> > >
> > >
> > >
> > >
> > > On Fri, Aug 24, 2012 at 8:07 AM, jing wang <happygodwithwang@gmail.com
> > > >wrote:
> > >
> > > > Hi 'user',
> > > >
> > > > This is a many-to-many question, I also infer the hbase design
> > FAQ,
> > > > http://wiki.apache.org/hadoop/Hbase/FAQ_Design.
> > > > What I want to do is desinging a 'user' table, incluing 'user'
> > basic
> > > > infomations(columnFamily1), and team-name 'user' joined
> > > in(columnFamily2),
> > > > When a user join in a new Team, I want to update the 'user'
> table
> > to
> > > > add a column to 'columnFamily2'. So when getting the user , I get all
> > the
> > > > team-names the user join in.
> > > > Yet I don't want to put duplicate records, known as
> > multi-versions,
> > > > each user has only one record.
> > > > What should I do?
> > > >
> > > > Any advice will be appreciated!
> > > >
> > > >
> > > > Thanks & Best Regards
> > > > Mike
> > > >
> > >
> >
>
Re: hbase many-to-many design
Posted by Sonal Goyal <so...@gmail.com>.
Sorry, is this what you want? I created a table with two column families. I
added one row and column family cf1 with qualifier team1. Then I added new
team cf1 with qualifier team2.
hbase(main):001:0> create 'multi','cf1','cf2'
0 row(s) in 1.6240 seconds
hbase(main):002:0> put 'multi','row1','cf1:team1','firstTeam'
0 row(s) in 0.0880 seconds
hbase(main):003:0> scan 'multi'
ROW COLUMN+CELL
row1 column=cf1:team1, timestamp=1345783824219,
value=firstTeam
1 row(s) in 0.0540 seconds
hbase(main):004:0> put 'multi','row1','cf1:team2','secondTeam'
0 row(s) in 0.0060 seconds
hbase(main):005:0> scan 'multi'
ROW COLUMN+CELL
row1 column=cf1:team1, timestamp=1345783824219,
value=firstTeam
row1 column=cf1:team2, timestamp=1345783846821,
value=secondTea
m
1 row(s) in 0.0250 seconds
Best Regards,
Sonal
Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
Nube Technologies <http://www.nubetech.co>
<http://in.linkedin.com/in/sonalgoyal>
On Fri, Aug 24, 2012 at 10:03 AM, jing wang <ha...@gmail.com>wrote:
> Hi Sonal,
>
> Thanks for your reply.
> How to add a new column to the existing columnFamily?The method I want
> to try is using 3 steps, first get the record, construct a new put, using
> the reocrd's( getted before) columnFamily2, then delete the old record in
> Hbase, finally put the new constructed 'put' into Hbase.I really don't
> think this is a good way.
> if another 'put', including a new column is put to Hbase, this is a
> 'update' action or another version?
> Would you please give me some reference for adding a column to a row?
>
> Thanks & Best Regards
> Mike
>
>
> 2012/8/24 Sonal Goyal <so...@gmail.com>
>
> > If you are you adding a new column to the team column family, I dont
> think
> > multi version comes into picture. Multi Versioning is saving copies of
> > values of a particular cell, but you are creating a new cell within the
> > same row.
> >
> >
> > Best Regards,
> > Sonal
> > Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
> > Nube Technologies <http://www.nubetech.co>
> >
> > <http://in.linkedin.com/in/sonalgoyal>
> >
> >
> >
> >
> >
> > On Fri, Aug 24, 2012 at 8:07 AM, jing wang <happygodwithwang@gmail.com
> > >wrote:
> >
> > > Hi 'user',
> > >
> > > This is a many-to-many question, I also infer the hbase design
> FAQ,
> > > http://wiki.apache.org/hadoop/Hbase/FAQ_Design.
> > > What I want to do is desinging a 'user' table, incluing 'user'
> basic
> > > infomations(columnFamily1), and team-name 'user' joined
> > in(columnFamily2),
> > > When a user join in a new Team, I want to update the 'user' table
> to
> > > add a column to 'columnFamily2'. So when getting the user , I get all
> the
> > > team-names the user join in.
> > > Yet I don't want to put duplicate records, known as
> multi-versions,
> > > each user has only one record.
> > > What should I do?
> > >
> > > Any advice will be appreciated!
> > >
> > >
> > > Thanks & Best Regards
> > > Mike
> > >
> >
>
Re: hbase many-to-many design
Posted by jing wang <ha...@gmail.com>.
Hi Abhishek,
Got it. Thank you very much.
Thanks & Best Regards
Mike
2012/8/24 Pamecha, Abhishek <ap...@x.com>
> Hi Jong
>
> You can add a new column unannounced. This means your current 'put' does
> not have to recall which other columns are already present in the row or
> for that matter, in the table. You just issue a put command as if it was
> your first one, and the column will be added.
>
> Unlike rdbms, There are no update or alter table commands You need to
> execute to add a new column.
>
> If the column you are adding already existed,then a new version of value
> you put, is stored.
>
> Thanks
> Abhishek
>
>
> i Sent from my iPad with iMstakes
>
> On Aug 23, 2012, at 21:34, "jing wang" <ha...@gmail.com> wrote:
>
> > Hi Sonal,
> >
> > Thanks for your reply.
> > How to add a new column to the existing columnFamily?The method I want
> > to try is using 3 steps, first get the record, construct a new put, using
> > the reocrd's( getted before) columnFamily2, then delete the old record in
> > Hbase, finally put the new constructed 'put' into Hbase.I really don't
> > think this is a good way.
> > if another 'put', including a new column is put to Hbase, this is a
> > 'update' action or another version?
> > Would you please give me some reference for adding a column to a row?
> >
> > Thanks & Best Regards
> > Mike
> >
> >
> > 2012/8/24 Sonal Goyal <so...@gmail.com>
> >
> >> If you are you adding a new column to the team column family, I dont
> think
> >> multi version comes into picture. Multi Versioning is saving copies of
> >> values of a particular cell, but you are creating a new cell within the
> >> same row.
> >>
> >>
> >> Best Regards,
> >> Sonal
> >> Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
> >> Nube Technologies <http://www.nubetech.co>
> >>
> >> <http://in.linkedin.com/in/sonalgoyal>
> >>
> >>
> >>
> >>
> >>
> >> On Fri, Aug 24, 2012 at 8:07 AM, jing wang <happygodwithwang@gmail.com
> >>> wrote:
> >>
> >>> Hi 'user',
> >>>
> >>> This is a many-to-many question, I also infer the hbase design FAQ,
> >>> http://wiki.apache.org/hadoop/Hbase/FAQ_Design.
> >>> What I want to do is desinging a 'user' table, incluing 'user'
> basic
> >>> infomations(columnFamily1), and team-name 'user' joined
> >> in(columnFamily2),
> >>> When a user join in a new Team, I want to update the 'user' table
> to
> >>> add a column to 'columnFamily2'. So when getting the user , I get all
> the
> >>> team-names the user join in.
> >>> Yet I don't want to put duplicate records, known as multi-versions,
> >>> each user has only one record.
> >>> What should I do?
> >>>
> >>> Any advice will be appreciated!
> >>>
> >>>
> >>> Thanks & Best Regards
> >>> Mike
> >>>
> >>
>
Re: hbase many-to-many design
Posted by "Pamecha, Abhishek" <ap...@x.com>.
Hi Jong
You can add a new column unannounced. This means your current 'put' does not have to recall which other columns are already present in the row or for that matter, in the table. You just issue a put command as if it was your first one, and the column will be added.
Unlike rdbms, There are no update or alter table commands You need to execute to add a new column.
If the column you are adding already existed,then a new version of value you put, is stored.
Thanks
Abhishek
i Sent from my iPad with iMstakes
On Aug 23, 2012, at 21:34, "jing wang" <ha...@gmail.com> wrote:
> Hi Sonal,
>
> Thanks for your reply.
> How to add a new column to the existing columnFamily?The method I want
> to try is using 3 steps, first get the record, construct a new put, using
> the reocrd's( getted before) columnFamily2, then delete the old record in
> Hbase, finally put the new constructed 'put' into Hbase.I really don't
> think this is a good way.
> if another 'put', including a new column is put to Hbase, this is a
> 'update' action or another version?
> Would you please give me some reference for adding a column to a row?
>
> Thanks & Best Regards
> Mike
>
>
> 2012/8/24 Sonal Goyal <so...@gmail.com>
>
>> If you are you adding a new column to the team column family, I dont think
>> multi version comes into picture. Multi Versioning is saving copies of
>> values of a particular cell, but you are creating a new cell within the
>> same row.
>>
>>
>> Best Regards,
>> Sonal
>> Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
>> Nube Technologies <http://www.nubetech.co>
>>
>> <http://in.linkedin.com/in/sonalgoyal>
>>
>>
>>
>>
>>
>> On Fri, Aug 24, 2012 at 8:07 AM, jing wang <happygodwithwang@gmail.com
>>> wrote:
>>
>>> Hi 'user',
>>>
>>> This is a many-to-many question, I also infer the hbase design FAQ,
>>> http://wiki.apache.org/hadoop/Hbase/FAQ_Design.
>>> What I want to do is desinging a 'user' table, incluing 'user' basic
>>> infomations(columnFamily1), and team-name 'user' joined
>> in(columnFamily2),
>>> When a user join in a new Team, I want to update the 'user' table to
>>> add a column to 'columnFamily2'. So when getting the user , I get all the
>>> team-names the user join in.
>>> Yet I don't want to put duplicate records, known as multi-versions,
>>> each user has only one record.
>>> What should I do?
>>>
>>> Any advice will be appreciated!
>>>
>>>
>>> Thanks & Best Regards
>>> Mike
>>>
>>
Re: hbase many-to-many design
Posted by jing wang <ha...@gmail.com>.
Hi Sonal,
Thanks for your reply.
How to add a new column to the existing columnFamily?The method I want
to try is using 3 steps, first get the record, construct a new put, using
the reocrd's( getted before) columnFamily2, then delete the old record in
Hbase, finally put the new constructed 'put' into Hbase.I really don't
think this is a good way.
if another 'put', including a new column is put to Hbase, this is a
'update' action or another version?
Would you please give me some reference for adding a column to a row?
Thanks & Best Regards
Mike
2012/8/24 Sonal Goyal <so...@gmail.com>
> If you are you adding a new column to the team column family, I dont think
> multi version comes into picture. Multi Versioning is saving copies of
> values of a particular cell, but you are creating a new cell within the
> same row.
>
>
> Best Regards,
> Sonal
> Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
> Nube Technologies <http://www.nubetech.co>
>
> <http://in.linkedin.com/in/sonalgoyal>
>
>
>
>
>
> On Fri, Aug 24, 2012 at 8:07 AM, jing wang <happygodwithwang@gmail.com
> >wrote:
>
> > Hi 'user',
> >
> > This is a many-to-many question, I also infer the hbase design FAQ,
> > http://wiki.apache.org/hadoop/Hbase/FAQ_Design.
> > What I want to do is desinging a 'user' table, incluing 'user' basic
> > infomations(columnFamily1), and team-name 'user' joined
> in(columnFamily2),
> > When a user join in a new Team, I want to update the 'user' table to
> > add a column to 'columnFamily2'. So when getting the user , I get all the
> > team-names the user join in.
> > Yet I don't want to put duplicate records, known as multi-versions,
> > each user has only one record.
> > What should I do?
> >
> > Any advice will be appreciated!
> >
> >
> > Thanks & Best Regards
> > Mike
> >
>
Re: hbase many-to-many design
Posted by Sonal Goyal <so...@gmail.com>.
If you are you adding a new column to the team column family, I dont think
multi version comes into picture. Multi Versioning is saving copies of
values of a particular cell, but you are creating a new cell within the
same row.
Best Regards,
Sonal
Crux: Reporting for HBase <https://github.com/sonalgoyal/crux>
Nube Technologies <http://www.nubetech.co>
<http://in.linkedin.com/in/sonalgoyal>
On Fri, Aug 24, 2012 at 8:07 AM, jing wang <ha...@gmail.com>wrote:
> Hi 'user',
>
> This is a many-to-many question, I also infer the hbase design FAQ,
> http://wiki.apache.org/hadoop/Hbase/FAQ_Design.
> What I want to do is desinging a 'user' table, incluing 'user' basic
> infomations(columnFamily1), and team-name 'user' joined in(columnFamily2),
> When a user join in a new Team, I want to update the 'user' table to
> add a column to 'columnFamily2'. So when getting the user , I get all the
> team-names the user join in.
> Yet I don't want to put duplicate records, known as multi-versions,
> each user has only one record.
> What should I do?
>
> Any advice will be appreciated!
>
>
> Thanks & Best Regards
> Mike
>