[ 
https://issues.apache.org/jira/browse/TRAFODION-2977?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on TRAFODION-2977 started by David Wayne Birdsall.
-------------------------------------------------------
> Trafodion allows creating objects with longer key lengths than HBase supports
> -----------------------------------------------------------------------------
>
>                 Key: TRAFODION-2977
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-2977
>             Project: Apache Trafodion
>          Issue Type: Bug
>          Components: sql-cmp
>    Affects Versions: 2.3
>            Reporter: David Wayne Birdsall
>            Assignee: David Wayne Birdsall
>            Priority: Major
>
> The following illustrates the problem:
> {quote}
> >>create table t0 (c1 char(16777216));
> --- SQL operation complete.
> >>
> >>insert into t0 values ('A');
> --- 1 row(s) inserted.
> >>
> >>create table t1 (c1 char(32768) unique);
> --- SQL operation complete.
> >>
> >>-- next statement fails
> >>insert into t1 values ('A');
> *** ERROR[8448] Unable to access Hbase interface. Call to 
> ExpHbaseInterface::checkAndInsertRow returned error HBASE_ACCESS_ERROR(-706). 
> Cause: java.lang.IllegalArgumentException: Row length 32770 is > 32767
> org.apache.hadoop.hbase.client.Mutation.checkRow(Mutation.java:537)
> org.apache.hadoop.hbase.client.Put.<init>(Put.java:110)
> org.apache.hadoop.hbase.client.Put.<init>(Put.java:68)
> org.apache.hadoop.hbase.client.Put.<init>(Put.java:58)
> org.trafodion.sql.HTableClient.putRow(HTableClient.java:1543)
> org.trafodion.sql.HBaseClient.insertRow(HBaseClient.java:1931).
> --- 0 row(s) inserted.
> >>
> >>create table t2 (c1 char(32768) not null primary key);
> --- SQL operation complete.
> >>
> >>-- next statement fails
> >>insert into t2 values ('A');
> *** ERROR[8448] Unable to access Hbase interface. Call to 
> ExpHbaseInterface::checkAndInsertRow returned error HBASE_ACCESS_ERROR(-706). 
> Cause: java.lang.IllegalArgumentException: Row length 32768 is > 32767
> org.apache.hadoop.hbase.client.Mutation.checkRow(Mutation.java:537)
> org.apache.hadoop.hbase.client.Put.<init>(Put.java:110)
> org.apache.hadoop.hbase.client.Put.<init>(Put.java:68)
> org.apache.hadoop.hbase.client.Put.<init>(Put.java:58)
> org.trafodion.sql.HTableClient.putRow(HTableClient.java:1543)
> org.trafodion.sql.HBaseClient.insertRow(HBaseClient.java:1931).
> --- 0 row(s) inserted.
> >>
> >>create table t3 (c1 char(32768) check (c1!='ZZZZ'));
> --- SQL operation complete.
> >>
> >>insert into t3 values ('A');
> --- 1 row(s) inserted.
> >>
> {quote}
>  
> In the example above, table T1 has an implicit index with a key length 
> greater than 32767. Table T2 has a primary key length greater than 32767. 
> HBase 1.0.0 imposes a limit on key length in the hbase-client module 
> Mutation.java at Put time (as seen in the stack traces). The T0 and T3 
> examples succeed because the long character value occurs in the value part of 
> an HBase KeyValue, not in the key part.
> The behavior above is unfriendly from a user perspective. It would be better 
> to catch the over-long key at CREATE time and raise an error there.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to