问题
I have create the following table:
CREATE TABLE IF NOT EXISTS "events" (
"product.name" VARCHAR(32),
"event.name" VARCHAR(32),
"event.uuid" VARCHAR(32),
CONSTRAINT pk PRIMARY KEY ("event.uuid")
)
Inserting an event:
upsert into "events" ("event.uuid", "event.name", "product.name") values('1', 'click', 'api')
Getting data from HBase shell:
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
No column familty ;-(
From HBase shell, trying to insert data:
hbase(main):021:0> put 'events', '2', 'event:name','buy'
ERROR: Unknown column family! Valid column names: 0:*
Why?
回答1:
A double quoted identifier makes it case sensitive, so if you want both the column family and the column name to be case sensitive, you'll need to surround them each separately in double quotes like this:
CREATE TABLE IF NOT EXISTS "events" (
"product"."name" VARCHAR(32),
"event"."name" VARCHAR(32),
"event"."uuid" VARCHAR(32),
CONSTRAINT pk PRIMARY KEY ("event"."uuid")
)
and then upsert like this:
UPSERT INTO "events" ("event"."uuid", "event"."name", "product"."name")
VALUES ('1', 'click', 'api')
Qualifying the column name with the column family name is not required in the UPSERT statement unless the column name is ambiguous. If you don't need to match the format of existing data, another alternative is to just not double quote anything. Otherwise, for an example, see this FAQ.
FWIW, best place to ask question is on our dev or user mailing lists.
来源:https://stackoverflow.com/questions/34119543/column-family-with-apache-phoenix