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.

HAWQ 官方文档创建filespace,tablespace,database,table的更多相关文章

  1. hawq创建filespace,tablespace,database,table

    使用HAWQ   在HAWQ的使用上跟Greenplum基本就一样一样的了.比如:   1. 创建表空间 #选创建filespace,生成配置文件 [gpadmin@master ~]$ hawq f ...

  2. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  3. Google Android官方文档进程与线程(Processes and Threads)翻译

    android的多线程在开发中已经有使用过了,想再系统地学习一下,找到了android的官方文档,介绍进程与线程的介绍,试着翻译一下. 原文地址:http://developer.android.co ...

  4. 常用SQL_官方文档使用

    SQL语句基础理论 SQL是操作和检索关系型数据库的标准语言,标准SQL语句可用于操作关系型数据库. 5大主要类型: ①DQL(Data Query Language,数据查询语言)语句,主要由于se ...

  5. Sqoop 使用详解(内含对官方文档的解析)

    Sqoop 是 Cloudera 公司创造的一个数据同步工具,现在已经完全开源了. 目前已经是 hadoop 生态环境中数据迁移的首选,另外还有 ali 开发的 DataX 属于同类型工具,由于社区的 ...

  6. Spring Data Commons 官方文档学习

    Spring Data Commons 官方文档学习   -by LarryZeal Version 1.12.6.Release, 2017-07-27 为知笔记版本在这里,带格式. Table o ...

  7. 入门常用SQL及官方文档的使用

    SQL语句基础理论 SQL是操作和检索关系型数据库的标准语言,标准SQL语句可用于操作关系型数据库. 5大主要类型: ①DQL(Data Query Language,数据查询语言)语句,主要由于se ...

  8. [翻译]PyMongo官方文档

    PyMongo官方文档翻译 周煦辰 2016-06-30 这是本人翻译的PyMongo官方文档.现在网上分(抄)享(袭)的PyMongo博客文章很多,一方面这些文章本就是抄袭的,谈不上什么格式美观,另 ...

  9. 【翻译】Django Channels 官方文档 -- Tutorial

    Django Channels 官方文档 https://channels.readthedocs.io/en/latest/index.html 前言: 最近课程设计需要用到 WebSocket,而 ...

随机推荐

  1. docker commit

    不能将挂载的外部volume修改的内容一块commit

  2. lambda可调用对象

    //find_if谓词使用 bool isShorter(const string &s1, const string &sz){ return s1.size() < sz.s ...

  3. 蓝牙固件升级(OTA升级)原理设计

    转:http://blog.csdn.net/yueqian_scut/article/details/50849033 固件空中升级(OTA)与固件二次引导的原理和设计 原创 2016年03月10日 ...

  4. String和StringBuilder、StringBuffer

    Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder String 只读字符串,这里的只读并不是指String类型变量无法被修改,而是指String类 ...

  5. Qt编译器

    有两种,MSVC和MINGW Qt 中有两种方式编译,一种是MinGW ,另一种MSVC. MSVC是指微软的VC编译器: MingGW是指是Minimalist GNU on Windows的缩写. ...

  6. [Python] 弗洛伊德(Floyd)算法求图的直径并记录路径

    相关概念 对于一个图G=(V, E),求图中两点u, v间最短路径长度,称为图的最短路径问题.最短路径中最长的称为图的直径. 其中,求图中确定的某两点的最短路径算法,称为单源最短路径算法.求图中任意两 ...

  7. SpringBoot Mybatis keyProperty和useGeneratedKeys的作用

    在使用mybatis时,常常会出现这种需求: 当主键是自增的情况下,添加一条记录的同时,其主键是不能被使用的(为空),但是有时我们需要该主键,这时我们该如何处理呢?这时我们只需要在其对应xml中加入以 ...

  8. poj 1273 ---&&--- hdu 1532 最大流模板

    最近在换代码布局,因为发现代码布局也可以引起一个人的兴趣这个方法是算法Edmonds-Karp 最短增广路算法,不知道的话可以百度一下,基于Ford-Fulkerson算法的基础上延伸的 其实我不是很 ...

  9. 中安装rackspace private cloud --6 Deployment rpc

    运行ansible playbook安装之前的准备工作: Perform deployment host initial setup Build containers on target hosts ...

  10. java对象流(一)

    注意:字节数组流是可以不用关闭的(字符数组流要不要关闭暂时不清楚). 对象流的读数据和写数据方法分别是writeObject(Object o)和readObject(Object o). Objec ...