phoenix表操作


 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[]
View Code

然后數據就直接有了.

    使用create table創建的關聯表,如果對表進行了修改,源數據也會改變,同時如果關聯表被刪除,源表也會被刪除。但是視圖就不會,如果刪除視圖,源數據不會發生改變。

 

參考:

淺談Phoenix在HBase中的應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM