2015-12-06 29 views
2

我创建下表:系列列阿帕奇凤凰

CREATE TABLE IF NOT EXISTS "events" (
"product.name" VARCHAR(32), 
"event.name" VARCHAR(32), 
"event.uuid" VARCHAR(32), 
CONSTRAINT pk PRIMARY KEY ("event.uuid") 
) 

插入一个事件:从HBase的外壳

upsert into "events" ("event.uuid", "event.name", "product.name") values('1', 'click', 'api') 

获取数据:

hbase(main):020:0> scan 'events' 
ROW             COLUMN+CELL 
1             column=0:_0, timestamp=1449417795078, value= 
1             column=0:event.name, timestamp=1449417795078, value=click 
1             column=0:product.name, timestamp=1449417795078, value=api 
1 row(s) in 0.0200 seconds 

无柱familty; - (

从HBase外壳尝试插入数据:

hbase(main):021:0> put 'events', '2', 'event:name','buy' 

ERROR: Unknown column family! Valid column names: 0:* 

为什么?

回答

6

双引号的标识符使得它区分大小写的,所以如果你想既列家庭和列名是大小写敏感的,你需要单独包围他们每个在双引号是这样的:

CREATE TABLE IF NOT EXISTS "events" (
    "product"."name" VARCHAR(32), 
    "event"."name" VARCHAR(32), 
    "event"."uuid" VARCHAR(32), 
    CONSTRAINT pk PRIMARY KEY ("event"."uuid") 
) 

然后UPSERT这样的:

UPSERT INTO "events" ("event"."uuid", "event"."name", "product"."name") 
    VALUES ('1', 'click', 'api') 

与列族名的排位赛中列名在UPSERT声明不需要,除非列名不明确。如果你不需要匹配现有数据的格式,另一种选择是不要双引号。否则,例如,请参见this FAQ。

FWIW,问问题的最佳位置在我们的开发人员或用户mailing lists上。

+0

D'oh!我只阅读了https://phoenix.apache.org/language/index.html#column_ref。非常感谢你。 –