-user, +dev

I’d like to take a pass at updating our secondary index docs with the next
level of details. Understanding data layout is important when designing an
HBase schema, so I think users will generally be interested in how
secondary indexes do that.

Can someone point me in the direction of where the index data edits are
created in code? I spent some time looking around but it’s not obvious to
me. I’m looking at the 4.14.1-hbase-1.4 tag.

Thanks,
Nick

On Mon, May 13, 2019 at 3:49 PM Nick Dimiduk <ndimi...@gmail.com> wrote:

> Hi Pedro,
>
> Indeed, some restrictions do apply :)
>
> I’ve been experimenting with a local index, apologies for not mentioning
> that initially. Though it seems the same restrictions apply either way.
> What’s not obvious to the user is how the VARBINARY value ends up as a
> non-trailing element in the rowkey — looking at the DDL, it seems perfectly
> legal. I eventually found Rajeshbabu’s presentation from 2017 [0], which
> includes some concrete details on slide 7. From his slide, I see that the
> primary key columns are appended, thus making the VARBINARY non-trailing.
>
> Thanks,
> Nick
>
> [0]:
>
> https://www.slideshare.net/rajeshbabuchintaguntla/local-secondary-indexes-in-apache-phoenix
>
> On Mon, May 13, 2019 at 3:10 PM Pedro Boado <pedro.bo...@gmail.com> wrote:
>
>> Hi,
>>
>> Indexes in Phoenix are implemented using an additional HBase table, and
>> the index key fields are serialized as HBase table key.
>>
>> So same limitations apply to varbinary and varchar when used as index
>> columns: they can only be used as the last column in the index key.
>>
>> Cheers,
>> Pedro.
>>
>> On Mon, 13 May 2019, 22:19 Nick Dimiduk, <ndimi...@gmail.com> wrote:
>>
>>> Hello,
>>>
>>> I'm experimenting with a new data model using secondary indices and
>>> stumbled into a surprise. My understanding is that arrays and VARBINARY are
>>> permitted in rowkeys so long as they are the trailing rowkey member. Why is
>>> this schema definition is not permitted?
>>>
>>> CREATE TABLE IF NOT EXISTS t
>>> (
>>>   a VARCHAR NOT NULL,
>>>   b VARBINARY
>>>   CONSTRAINT pk PRIMARY KEY (a)
>>> );
>>> CREATE INDEX IF NOT EXISTS t_index ON t(b) INCLUDE (a);
>>>
>>> > Error: ERROR 1005 (42J03): The VARBINARY/ARRAY type can only be used
>>> as the last part of a multi-part row key. columnName=T_INDEX.0:B
>>> (state=42J03,code=1005)
>>>
>>> I get the same error when adding an additional, non-null column to the
>>> index definition.
>>>
>>> CREATE TABLE IF NOT EXISTS t
>>> (
>>>   a VARCHAR NOT NULL,
>>>   b VARCHAR NOT NULL,
>>>   c VARBINARY
>>>   CONSTRAINT pk PRIMARY KEY (a, b)
>>> )
>>> ;
>>> CREATE INDEX IF NOT EXISTS t_index ON t(b, c) INCLUDE (a);
>>>
>>> > Error: ERROR 1005 (42J03): The VARBINARY/ARRAY type can only be used
>>> as the last part of a multi-part row key. columnName=T_INDEX.0:C
>>> (state=42J03,code=1005)
>>>
>>> This is apache-phoenix-4.14.1-HBase-1.4.
>>>
>>> Thanks,
>>> Nick
>>>
>>

Reply via email to