phoenix表操作
進入命令行,這是sqlline.py 配置到path環境變量的情況下
sqlline.py localhost
如果要退出命令行:!q 或者 !quit
3.4.1 創建表
CREATE TABLE IF NOT EXISTS us_population ( state CHAR(2) NOT NULL, city VARCHAR NOT NULL, population BIGINT CONSTRAINT my_pk PRIMARY KEY (state, city));
UPSERT INTO us_population (state, city, population) values ('NY','New York',8143197); UPSERT INTO us_population (state, city, population) values ('CA','Los Angeles',3844829);
在phoenix中,默認情況下,表名等會自動轉換為大寫,若要小寫,使用雙引號,如"us_population"。
3.4.2 顯示所有表
!tables
退出命令行
!quit
具體語法參照官網
https://phoenix.apache.org/language/index.html#upsert_select
3.5 phoenix表映射
默認情況下,直接在hbase中創建的表,通過phoenix是查看不到的,如圖1和圖2,US_POPULATION是在phoenix中直接創建的,而test是在hbase中直接創建的,默認情況下,在phoenix中是查看不到test的。
圖1 phoenix命令行中查看所有表
如果需要在phoenix中操作直接在hbase中創建的表,則需要在phoenix中進行表的映射。映射方式有兩種:視圖映射和表映射。
hbase 中test的表結構如下,兩個列簇name、company.
Rowkey |
name |
company |
||
empid |
firstname |
lastname |
name |
address |
3.5.1 hbase命令行中創建表
$ cd /home/hadoop/hbase/bin
$ ./hbase shell 進入hbase命令行
create 'test','name','company' 創建表,如下圖
下面的視圖映射和表映射均基於該表。
3.5.2 視圖映射(不推薦)
Phoenix創建的視圖是只讀的,所以只能用來做查詢,無法通過視圖對源數據進行修改等操作。而且相比於直接創建映射表,視圖的查詢效率會低,原因是:創建映射表的時候,Phoenix會在表中創建一些空的鍵值對,這些空鍵值對的存在可以用來提高查詢效率。
1)創建視圖
create view"test"(empid varchar primarykey,"name"."firstname" varchar,"name"."lastname"varchar,"company"."name" varchar,"company"."address"varchar);
2)刪除視圖
drop view "test";
3.5.3 表映射
使用Apache Phoenix創建對HBase的表映射,有兩種方法:
1) 當HBase中表已存在,創建同名表和結構即可
2)當HBase中不存在,可以直接使用create table指令創建需要的表,並且在創建指令中可以根據需要對HBase表結構進行顯示的說明。
第1)種情況下,如在之前的基礎上已經存在了表,則表映射的語句如下:
create table "HBASE_BMDA5"("SS5" varchar primary key , "info"."NodeType" INTEGER , "info"."NodeName" varchar, "info"."IsWarehouse" INTEGER, "info"."IsAssetUser" INTEGER);
ps1.主鍵可以任意指定字符串,不可加列族在前,如::: "SS" varchar primary key (正確), "info"."SS" varchar primary key(錯誤)
ps2:如果phoenix里同時存在"TEST"表,和"test"表,如果要查小寫的“test表,表名必須加引號,即select * from "test",如果不加引號,則算是查大寫的TEST表
ps3.類型

INTEGER java.lang.Integer -2147483648 to 2147483647 (4 byte ) UNSIGNED_INT java.lang.Integer 0 to 2147483647 (4 byte ) BIGINT java.lang.Long -9223372036854775807 to 9223372036854775807 8 byte UNSIGNED_LONG java.lang.Long 0 to 9223372036854775807 TINYINT java.lang.Byte -128 to 127 1 byte UNSIGNED_TINYINT java.lang.Byte 0 to 127 1 byte SMALLINT java.lang.Short -32768 to 32767 2 byte UNSIGNED_SMALLINT java.lang.Short 0 to 32767 2 byte FLOAT java. lang.Float -3.402823466 E + 38 to 3.402823466 E + 38 4 byte UNSIGNED_FLOAT java.lang.Float -3.402823466 E + 38 to 3.402823466 E + 38 4 byte DOUBLE java.lang.Double -1.7976931348623158 E+308 to 1.7976931348623158 E+308 8 byte UNSIGNED_DOUBLE java.lang.Double 0 to 1.7976931348623158 E + 308 8 byte DECIMAL java.math.BigDecimal 38 digits BOOLEAN java.lang.Boolean TIME java.sql.Time DATE java.sql.Date TIMESTAMP java.sql.Timestamp UNSIGNED_TIME java.sql.Time UNSIGNED_DATE java.sql.Date UNSIGNED_TIMESTAMP java.sql.Timestamp VARCHAR( precisionInt ) java.lang.String CHAR ( precisionInt ) java.lang.String BINARY ( precisionInt ) byte[] VARBINARY byte[]
然后數據就直接有了.
使用create table創建的關聯表,如果對表進行了修改,源數據也會改變,同時如果關聯表被刪除,源表也會被刪除。但是視圖就不會,如果刪除視圖,源數據不會發生改變。
參考: