Thanks for all your valuable replies.
 I tried  VARCHAR 16 BYTES, it goes well.

     SQL>CREATE TABLE EVENT_BYTES (
     v_date timestamp(6) NOT NULL,
     sid varchar(16 BYTES) NOT NULL DEFAULT '',
    uid varchar(16 BYTES) NOT NULL DEFAULT '',
    vid int unsigned NOT NULL ,
    idx tinyint NOT NULL,
    created_at int unsigned NOT NULL ,
    p_id bigint  NOT NULL ,
    category varchar(255) CHARACTER SET UTF8 NOT NULL,
    e_action varchar(255) CHARACTER SET UTF8 NOT NULL,
    label varchar(255) CHARACTER SET UTF8 NOT NULL,
    e_value int NOT NULL,
    is_bounced tinyint NOT NULL DEFAULT 0,
    primary key (sid,v_date desc,uid,vid,idx)
 )
  salt using 4 partitions on (sid,v_date,uid,vid)
  division by (date_trunc('day', v_date))
  HBASE_OPTIONS( DATA_BLOCK_ENCODING = 'FAST_DIFF',
  COMPRESSION='GZ',
  MEMSTORE_FLUSH_SIZE = '1073741824');

--- SQL operation complete.

*But, there is a weird thing, I used the 'varchar(255)' yesterday  and
succeed in create table once, only once(it also get stuck when create the
table in the shell). After that I got the errors when using 'VARCHAR(255)'
 to create table.*

SQL>showddl event;


CREATE TABLE TRAFODION.SEABASE.EVENT
  (
   * V_DATE                           TIMESTAMP(6) NO DEFAULT NOT NULL NOT*
*      DROPPABLE NOT SERIALIZED*
*  , SID                              VARCHAR(255 CHARS) CHARACTER SET UTF8*
*      COLLATE DEFAULT DEFAULT _ISO88591'' NOT NULL NOT DROPPABLE
SERIALIZED*
*  , UID                              VARCHAR(255 CHARS) CHARACTER SET UTF8*
*      COLLATE DEFAULT DEFAULT _ISO88591'' NOT NULL NOT DROPPABLE
SERIALIZED*
*  , VID                              INT UNSIGNED NO DEFAULT NOT NULL NOT*
*      DROPPABLE SERIALIZED*
  , CREATED_AT                       INT UNSIGNED NO DEFAULT NOT NULL NOT
      DROPPABLE SERIALIZED
  , P_ID                             LARGEINT NO DEFAULT NOT NULL NOT
DROPPABLE
      SERIALIZED
  , CATEGORY                         VARCHAR(255 CHARS) CHARACTER SET UTF8
      COLLATE DEFAULT NO DEFAULT NOT NULL NOT DROPPABLE SERIALIZED
  , E_ACTION                         VARCHAR(255 CHARS) CHARACTER SET UTF8
      COLLATE DEFAULT NO DEFAULT NOT NULL NOT DROPPABLE SERIALIZED
  , LABEL                            VARCHAR(255 CHARS) CHARACTER SET UTF8
      COLLATE DEFAULT NO DEFAULT NOT NULL NOT DROPPABLE SERIALIZED
  , E_VALUE                          INT NO DEFAULT NOT NULL NOT DROPPABLE
      SERIALIZED
  , IS_BOUNCED                       SMALLINT DEFAULT 0 NOT NULL NOT
DROPPABLE
      SERIALIZED
  , *PRIMARY KEY (SID ASC, V_DATE DESC, UID ASC, VID ASC)*
  )
  SALT USING 4 PARTITIONS
       ON (SID, V_DATE, UID, VID)
  DIVISION BY (DATE_TRUNC('DAY',V_DATE)
     NAMED AS ("_DIVISION_1_"))
  HBASE_OPTIONS
  (
    DATA_BLOCK_ENCODING = 'FAST_DIFF',
    COMPRESSION = 'GZ',
    MEMSTORE_FLUSH_SIZE = '1073741824'
  )
;

--- SQL operation complete.




Hans Zeller <[email protected]>于2016年8月18日周四 上午1:34写道:

> Hi,
>
> Another thing you can do is to specify the limit in the VARCHAR in bytes,
> not in characters. If you can do that and if you normally store 1, 2 or 3
> byte characters in the key, that could be more efficient. When specifying
> the limit in characters, every UTF-8 character uses the maximum length of 4
> bytes in the key.
>
> For example, change
>
> VARCHAR(256) CHARACTER SET UTF8
>
>
> to
>
> VARCHAR(256 BYTES) CHARACTER SET UTF8   -- when storing ASCII data only
>
>
> or
>
> VARCHAR(768 BYTES) CHARACTER SET UTF8   -- to store up to 255 Chinese
> characters
>
>
> Oracle uses similar syntax.
>
> Thanks,
>
> Hans
>
> On Wed, Aug 17, 2016 at 7:28 AM, Eric Owhadi <[email protected]>
> wrote:
>
>> Hi Qiao and Ming,
>>
>> I am wondering if it is not related to the max size of keys in bytes. I
>> recall having seen it in the code, but would not bet that it was around 2K?
>>
>> Varchar in UTF8 stored as key is very wide because had to be stored
>> explode.
>>
>> When using columns in PK, VARCHAR is not a good choice, as the data will
>> always be present padded with blank up to the max size. So all classical
>> benefits of varchar (of not consuming space when string is small) is
>> actually not achieved when column is part of PK.
>>
>> Would you consider using CHAR instead of varchar? And would you consider
>> a different character set than UTF8 that is wide when stored exploded for
>> the columns used as PK?
>>
>>
>>
>> Also Qiao, if you are looking for performance, I don’t know if you are
>> aware of Trafodion’s Aligned Format feature, but with such a long PK, I
>> believe it will be of great help for your use case?
>>
>> Basically it allows storing the whole row as a single hbase cell, making
>> repetition of key for storing each column in single cell less of an issue.
>>
>>
>>
>>
>>
>> Hope this helps,
>>
>> Regards,
>> Eric
>>
>>
>>
>>
>>
>> *From:* Liu, Ming (Ming) [mailto:[email protected]]
>> *Sent:* Wednesday, August 17, 2016 9:13 AM
>> *To:* [email protected]
>> *Subject:* RE: create table failed
>>
>>
>>
>> Hi, Qiao,
>>
>>
>>
>> This is a defect, would you please help to file a JIRA?
>>
>>
>>
>> I can reproduce it, will make some investigation on this issue.
>>
>>
>>
>> One workaround for you is to change the DDL a little:
>>
>>   uid VARCHAR(255) to VARCHAR(254)
>>
>>
>>
>> Hope it works for you.
>>
>>
>>
>> Thanks,
>>
>> Ming
>>
>>
>>
>> *From:* 乔彦克 [mailto:[email protected] <[email protected]>]
>> *Sent:* Wednesday, August 17, 2016 6:23 PM
>> *To:* [email protected]
>> *Subject:* create table failed
>>
>>
>>
>> Hi,all
>>
>> Now I've got new problems. Since I have date in my columns, I want to try
>> the division feature of trafodion.
>>
>> I use the bellow sql to create tables, but only get these errors
>>
>>  "**** ERROR[29157] There was a problem reading from the server*
>>
>> **** ERROR[29160] The message header was not long enough*
>>
>> **** ERROR[29157] There was a problem reading from the server*
>>
>> **** ERROR[29160] The message header was not long enough*".
>>
>> can someone help me or show me error, many thanks.
>>
>>
>>
>> sql:
>>
>> "CREATE TABLE page (
>>
>>   sid varchar(255) CHARACTER SET UTF8 NOT NULL DEFAULT '',
>>
>>   v_date timestamp(6) NOT NULL,
>>
>>   uid varchar(255)  CHARACTER SET UTF8 NOT NULL,
>>
>>   vid int unsigned NOT NULL,
>>
>>   stime int unsigned NOT NULL,
>>
>>   etime int unsigned NOT NULL,
>>
>>   pid bigint  NOT NULL,
>>
>>   cnum int unsigned NOT NULL DEFAULT 0,
>>
>>   enum int unsigned NOT NULL DEFAULT 0,
>>
>>  primary key (sid,v_date desc,uid,vid)
>>
>> )
>>
>> salt using 4 partitions on (sid,v_date,uid,vid)
>>
>> division by (date_trunc('day', v_date))
>>
>> HBASE_OPTIONS( DATA_BLOCK_ENCODING = 'FAST_DIFF',
>>
>> COMPRESSION='GZ',
>>
>> MEMSTORE_FLUSH_SIZE = '1073741824');"
>>
>>
>>
>> Any reply is appreciated!
>>
>> Thank you.
>>
>> Qiao
>>
>
>

Reply via email to