1 在Phoenix上建Hbase映射表
在Phoenix可以直接使用建表sql來(lái)建立Hbase表,但是對(duì)于一張已經(jīng)存在Hbase表時(shí)洋魂,我們?nèi)绾卧赑hoenix建議映射表呢?答案是可以直接采用建表語(yǔ)句進(jìn)行啄踊。語(yǔ)句如下:
create table "openapi"."openapi_jingdong_product_stock"(
"uuid" varchar not null primary key,
"info"."create_time" varchar,
"info"."data_date" varchar,
"info"."ware_code" varchar,
"info"."product_code" varchar,
"info"."inve_qty" varchar,
"info"."vender_code" varchar
) column_encoded_bytes=0;
其中:
-
uuid
是Phoenix表的主鍵忧设,對(duì)應(yīng)到Hbase的row key,主鍵字段名可以是任意的颠通; - 其他字段與Hbase表是一一對(duì)應(yīng)的址晕,格式是
列族.列名
,上述代碼中的info
就是列族顿锰,.
后的就是列名
特別注意:Phoenix的表名谨垃、字段名等一般要加雙引號(hào),不加雙引號(hào)將默認(rèn)轉(zhuǎn)換為大寫(xiě)
2 查詢Hbase和Phoenix表結(jié)構(gòu)
由于Hbase是一種非結(jié)構(gòu)化的列式結(jié)構(gòu)數(shù)據(jù)庫(kù)硼控,它的列是可以動(dòng)態(tài)增加的刘陶,而且每一行可以包含的列都是不同的,因此我們無(wú)法在不掃描所有行的情況下確定Hbase所有的列牢撼。
Phoenix提供了一種使用sql方式查詢Hbase數(shù)據(jù)庫(kù)的方式匙隔,但是沒(méi)有類(lèi)似MySQL的describe
命令,如果需要查詢表結(jié)構(gòu)需要借助系統(tǒng)表熏版。hbase的所有表結(jié)構(gòu)都保存在SYSTEM."CATALOG"
表中纷责,我們可以通過(guò)查詢這個(gè)表來(lái)確定Phoenix的表結(jié)構(gòu),查詢語(yǔ)句如下:
select * from SYSTEM."CATALOG" where TABLE_NAME='fact_b2c_crawl_sycm_self_shop_month'
and TABLE_SCHEM='crawl'
3 Phoenix插入數(shù)據(jù)
插入使用upsert
命令撼短,而不是insert
UPSERT INTO TEST VALUES('foo','bar',3);
UPSERT INTO TEST(NAME,ID) VALUES('foo',123);
UPSERT INTO TEST(ID, COUNTER) VALUES(123, 0) ON DUPLICATE KEY UPDATE COUNTER = COUNTER + 1;
UPSERT INTO TEST(ID, MY_COL) VALUES(123, 0) ON DUPLICATE KEY IGNORE;