HAWQ 官方文檔建立filespace,tablespace,database,table

1.建立Filespace

建立Filespace必須是數據庫超級用戶( You must be a database superuser to create a filespace.)
首先建立一個filespace的配置文件:

[hadoop@hadoop hawq]$ hawq filespace -o hawqfilespace_config  #生成配置文件,只要配置了環境變量命令能夠在任何目錄下運行
Enter a name for this filespace
> testfs    #輸入filespace的名稱
Enter replica num for filespace. If 0, default replica num is used (default=3)
>     #設置副本個數

Please specify the DFS location for the filespace (for example: localhost:9000/fs)
location> localhost:9000/testfs #輸入建立這個filespace文件在HDFS上的位置,最終會生成目錄:localhost:9000/testfs/testfs
20170401:10:23:39:133234 hawqfilespace:hadoop:hadoop-[INFO]:-[created]
20170401:10:23:39:133234 hawqfilespace:hadoop:hadoop-[INFO]:-
To add this filespace to the database please run the command:
   hawqfilespace --config /home/hadoop/note/hawq/hawqfilespace_config

[hadoop@hadoop hawq]$ cat /home/hadoop/note/hawq/hawqfilespace_config    #能夠查看下配置文件的內容
filespace:testfs
fsreplica:3
dfs_url::localhost:9000/testfs[hadoop@hadoop hawq]$
[hadoop@hadoop hawq]$ hawq filespace --config /home/hadoop/note/hawq/hawqfilespace_config    #使用命令進行建立
Reading Configuration file: '/home/hadoop/note/hawq/hawqfilespace_config'

CREATE FILESPACE testfs ON hdfs
('localhost:9000/testfs/testfs') WITH (NUMREPLICA = 3);
20170401:10:25:29:133433 hawqfilespace:hadoop:hadoop-[INFO]:-Connecting to database
20170401:10:25:29:133433 hawqfilespace:hadoop:hadoop-[INFO]:-Filespace "testfs" successfully created    #建立成功
[hadoop@hadoop hawq]$

經過瀏覽器查看咱們咱們剛纔生成的目錄:
http://localhost:50070/explorer.html#/testfs/testfs

建立filespace成功,可使用命令基於配置文件再次建立:
[hadoop@hadoop hawq]$ hawq filespace -c hawqfilespace_config


2.建立表空間
hadoop=# CREATE TABLESPACE testts FILESPACE testfs; #建立表空間並指定文件空間
CREATE TABLESPACE
能夠查看剛纔建立的表空間
hadoop=# \db
         List of tablespaces
    Name     | Owner  | Filespae Name
-------------+--------+---------------
 dfs_default | hadoop | dfs_system
 pg_default  | hadoop | pg_system
 pg_global   | hadoop | pg_system
 testts      | hadoop | testfs        #建立表空間及對應的文件空間
(4 rows)

可使用以下命令將表空間的訪問權限授予某個用戶,前提是該用戶已經存在
=# GRANT CREATE ON TABLESPACE fastspace TO admin;

建立一張表並指定表空間
hadoop=# CREATE TABLE foo(i int) TABLESPACE testts;
CREATE TABLE
注意:數據庫下的表並不必定與庫在同一個表空間。
表空間和表是一對多的關係,一個模式下的表能夠分佈在多個表空間下;
一個數據庫下有能夠有多個模式,一個模式只屬於一個數據庫。模式在GP中也被稱爲Namespace,不一樣數據庫之間的模式沒有關係,能夠重名。
一個文件空間能夠有多個表空間,一個表空間只屬於一個文件空間,文件空間和角色之間沒有關係。
除了文件空間以外,其餘的權限管理都是經過角色來實現,在這些層次結構中,用戶必須對上一層有訪問權限纔可以訪問該層的內容。

若是在建立數據庫或表時沒有指定表空間,會使用默認的表空間,已可使用以下命令設置某個表空間爲默認表空間:
SET default_tablespace = space1;
CREATE TABLE foo(i int);

查看已經存在的表空間和文件空間:
每一個HAWQ系統默認存在的表空間
    pg_global:用於共享系統目錄。
    pg_default:默認的表空間,默認的存在的數據庫template1和tmplate0使用這個表空間。
這些表空間使用的是系統默認的文件空間 pg_system,數據存放目錄是在初始化是建立的。

能夠查看錶空間的定義信息:
hadoop=# SELECT spcname AS tblspc, fsname AS filespc,
          fsedbid AS seg_dbid, fselocation AS datadir
   FROM   pg_tablespace pgts, pg_filespace pgfs,
          pg_filespace_entry pgfse
   WHERE  pgts.spcfsoid=pgfse.fsefsoid
          AND pgfse.fsefsoid=pgfs.oid
   ORDER BY tblspc, seg_dbid;
查詢結果:
   tblspc    |  filespc   | seg_dbid |                    datadir                     
-------------+------------+----------+------------------------------------------------
 dfs_default | dfs_system |        0 | hdfs://localhost:9000/hawq_default
 testts      | testfs     |        0 | hdfs://{replica=3}localhost:9000/testfs/testfs
(2 rows)

hadoop=#

移除表空間和文件空間:
    刪除表空間:hadoop=# DROP TABLESPACE testts ;
             刪除表空間必須是 tablespace owner或者superuser;
             刪除表空間間前必須先刪除該表空間下的全部對象;
    刪除Filespace:hadoop=# DROP FILESPACE testfs;
             只有superuser能夠刪除文件空間;
             刪除文件空間不能有與之關聯的表空間;


3.建立和管理數據庫(Creating and Managing Databases )

建立數據庫:
template1=# CREATE DATABASE testdb WITH TABLESPACE=hawqts; #指定存儲表空間爲hawqts,若是不指定則使用默認表空噶進
CREATE DATABASE

可使用客戶端程序建立數據庫:
$ createdb -h localhost -p 5432 mydatabase #這裏的主機名和端口號必須和master節點的主機名和端口對應

可使用clone的方式根據模板建立數據庫:
=# CREATE DATABASE <new_dbname> WITH TEMPLATE template0;

顯示全部的databases
可使用 \l 或使用=# SELECT datname FROM pg_database;
使用第二種方式須要是 superuser

修改數據庫
可使用ALTER DATABASE 修改數據庫的owner或name等屬性
可使用ALTER DATABASE 修改數據庫默認配置,例如修改search_path
=# ALTER DATABASE mydatabase SET search_path TO myschema, public, pg_catalog;
要修改數據庫必須是owner of database or superuser

刪除數據庫
使用 DROP DATABASE 命令能夠刪除數據庫,即刪除數據庫的system catalog和刪除磁盤上的數據文件。
在刪除前須要鏈接tmplate1或者其餘數據庫
=# \c template1
=# DROP DATABASE mydatabase;

可使用客戶端程序刪除數據庫:
$ dropdb -h hmaster -p 5432 mydatabase

注意:刪除數據庫不能撤銷。


4.建立和管理Schema

hadoop=# CREATE SCHEMA myschema;
CREATE SCHEMA

在訪問schema中的對象時(Table,View,Index,Sequence,Function),能夠前邊帶上schema名稱來作相同對象名稱的區分。
例如訪問數據表:
=> SELECT * FROM myschema.mytable;

在建立Schema時能夠指定所屬用戶:
hadoop=# CREATE SCHEMA ownby_schema AUTHORIZATION dbuser;
CREATE SCHEMA
hadoop=# \dn
       List of schemas
        Name        | Owner  
--------------------+--------
 hawq_toolkit       | hadoop
 information_schema | hadoop
 myschema           | hadoop
 ownby_schema       | dbuser
 pg_aoseg           | hadoop
 pg_bitmapindex     | hadoop
 pg_catalog         | hadoop
 pg_toast           | hadoop
 public             | hadoop
(9 rows)

在建立具體object(table,views...)時若是沒有指定schema,則使用默認schema:public

Schema的查找路徑
在訪問對象時若是沒有指定schema,則會使用默認的查找路徑;
能夠設置查找路徑search_path來修改默認的查找路徑,能夠同時指定多個schema

hadoop=# ALTER DATABASE postgres SET search_path TO myschema,public,pg_catalog;
ALTER DATABASE
指定後在訪問對象時會按照查找路徑的配置順序查找object;

查看當前數據庫的Schema
=> SELECT current_schema();

查看當前的查找路徑
=> SHOW search_path;

刪除Schema
hadoop=# DROP SCHEMA ownby_schema ;
DROP SCHEMA
在刪除schema時schema中必須爲空才能刪除,可使用CASECADE的方式刪除schema同時刪除包含的對象:
=> DROP SCHEMA myschema CASCADE;


5.建立和管理Tables

選擇合適的列類型:
CHAR,VARCHAR,TEXT均可以應用於string,一般狀況使用TEXT,VARCHAR要好於CHAR。

在存儲numberic類型數據時,選取的類型越大越浪費空間 BININT > INT > SMALLINT

在使用JOIN 等關聯或條件查詢時儘可能將字段類型保持一致,類型轉換會增長沒必要要的系統負擔。

Check Constraints

=> CREATE TABLE products
     ( product_no integer,
       name text,
       price numeric CHECK (price > 0) ); #限制價格大於0

=> CREATE TABLE products
     ( product_no integer NOT NULL,   #非空限制
       name text NOT NULL,
       price numeric );

Foreign Keys

Foreign keys are not supported. You can declare them, but referential integrity is not enforced.

Foreign key constraints specify that the values in a column or a group of columns must match the values appearing in some row of another table to maintain referential integrity between two related tables. Referential integrity checks cannot be enforced between the distributed table segments of a HAWQ database.










html

相關文章
相關標籤/搜索