1 在Phoenix上建Hbase映射表
在Phoenix可以直接使用建表sql來建立Hbase表,但是對于一張已經存在Hbase表時,我們如何在Phoenix建議映射表呢?答案是可以直接采用建表語句進行。語句如下:
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表的主鍵,對應到Hbase的row key,主鍵字段名可以是任意的; - 其他字段與Hbase表是一一對應的,格式是
列族.列名,上述代碼中的info就是列族,.后的就是列名
特別注意:Phoenix的表名、字段名等一般要加雙引號,不加雙引號將默認轉換為大寫
2 查詢Hbase和Phoenix表結構
由于Hbase是一種非結構化的列式結構數(shù)據(jù)庫,它的列是可以動態(tài)增加的,而且每一行可以包含的列都是不同的,因此我們無法在不掃描所有行的情況下確定Hbase所有的列。
Phoenix提供了一種使用sql方式查詢Hbase數(shù)據(jù)庫的方式,但是沒有類似MySQL的describe命令,如果需要查詢表結構需要借助系統(tǒng)表。hbase的所有表結構都保存在SYSTEM."CATALOG"表中,我們可以通過查詢這個表來確定Phoenix的表結構,查詢語句如下:
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;