一、SQL语言基础知识

1、SQL语句根据其可实现功能,分为以下几类:

1.1 DDL语句:用来创建数据库以及定义其表结构、视图索引等。
关键词有CREATE、DROP、ALTER、RENAME等

1.2 DML语句:对数据库进行增加,更改,删除操作。
关键词有INSERT、UPDATE、DELETE等

1.3 DQL语句:对数据库进行增加,更改,删除操作。
用来对数据库进行查询操作,关键词SELECT

1.4 DCL语句:用于赋予权限以及回收权限等。
关键词GRANT、REVOKE等

1.5 其他:优化和动态管理数据库资源等。
关键词有SHOW、KILL等

2、标识符命名规则
数据库、表、列和别名等对象的名称都称为标识符。

备注

  • 除了上表中注明的限制,数据库、表和列明不应该以空格结尾;
  • 如果标识符是一个限制词或包含特殊字符,必须用反引号 `` 引用它
  • 如果标识符长度超过最大长度限制,数据库、表、列、视图、存储过程的命令将报错,而别名将会截断至256个字符进行显示;
  • 当库名、表名、列明为中文时,最大支持的汉字个数:库名48个汉字 | 表名21个汉字;
    参数gcluster_extend-identi设置为1,即开启创建中文库名、表名、列明的功能(默认为0,不开启)

二、GBase 8a SQLy语法规范

1、用户变量
用户变量的生命周期是会话级的,对其他会话不可见。当用户退出时,此用户的所有用户变量都会自动释放。

  • 用户变量以@开头,不区分大小写:@var_name;
  • 通过SET语法来定义并未变量赋值:SET @var_name=expr[,@var_name=expr]…
  • 通过SELECT语法查看用户变量的值:SELECT @var_name [,@var_name]…


赋给每一个变量的expr值可以是实数、字符串或NULL。如果用户没有对变量初始化,那么它的值就是NULL.

三、GBase 8a 支持的数据类型

数据分类 数据类型
数值型 INTEFER、TINYINT、SMALLINT、BIGINT、DECIMAL、NUMERIC、FLOAT、DOUBLE
字符型 CHAR、VARCHAR、TEXT
日期和时间型 DATE、TIME、DATETIME、TIMESTAMP
二进制类型 BLOB、LONGBLOB

1、数值类型

  • 有效的使用存储空间,尽量使用精确地类型;
  • 严格的数值数据类型(TINYINT,SMALLINT,INT,BIGINT,DECIMAL),以及近似的sh数值数据类型(FLOAT、DOUBLE);
  • DECIMAL(M,D),M是总位数(最大65位),D是小数点后的位数,默认是 DECIMAL(10,0);
类型名称 最小值 最大值 占用字节数
TINYINT -127 127 1
SMALLINT -32767 32767 2
INT(INTEGER) -2147483647 2147483647 4
BIGINT -9223372036854775806 9223372036854775806 8
DECIMAL(M[,D]) -(1E+M-1) (1E+M-1)/(1E+D) 动态计算
FLOAT -3.4E+38 3.4E+38 4
DOUBLE -1.7976931348623157E+308 1.7976931348623157E+308 8

2、字符类型

  • 在实际项目不建议使用char和text类型,建议使用varchar数据类型;
  • TEXT类型不能指定DEFAULT值,仅兼容使用,推荐使用varchar类型;
类型名称 最大长度(字符) 说明
CAHR 255 定长
VARCAHR 10922(utf8) 、16388(gbk) 变长
TEXT 10922 变长

3、日期时间类型

  • DATE:显示格式 YYY-MM-DD;
  • TIME:显示格式 ‘HH:MI:SS’格式(或 HHH:MI:SS 格式);
  • DATETIME:以‘YYYY-MM-DD HH:MI:SS.ffffff’ 格式显示,精确到微秒;
  • TIMESTAMP:仅为了兼容使用,在实际项目中不建议使用,推荐使用DATETIME;
  • 日期格式不同,需类型转换
    – INSERT INTO EMP VALUES(7900,‘JAMES’,‘CLERK’,to_date('3-12-1981','dd-mm-yyyy'));
类型名称 最小值 最大值 格式
DATE 0001-01-01 9999-12-31 YYYY-MM-DD
DATETIME 0001-01-01 00:00:00.000000 9999-12-31 23:59:59 YYYY-MM-DD HH:MI:SS.ffffff
TIME -838:59:59 838:59:59 HHH:MI:SS
TIMESTAMP 1970-01-01 08:00:01 2038-01-01 00:59:59 YYYY-MM-DD HH:MI:SS

4、二进制类型

  • 创建表时,二进制类型列不能有DEFAULT值
  • 查询语句中,二进制类型列不建议用在过滤条件、group by、join条件中;
  • 查询语句中,二进制类型列不支持OLAP函数;
  • 二进制类型列不能创建Hash索引和Hash分布列
类型名称 最大长度(字符)
BLOB 32K
LONGBLOB 64M

5、与其他数据库数据类型对应关系
表中列出的数据类型,当他们出现的时候不需要修改建表SQL语句,GBase 8a可以自动转化为所支持的的数据类型。

四、GBase 8a Cluster DDL --数据库、表管理

1、DDL定义与分布式执行逻辑

  • 数据库定义语言,用于定义和管理数据库中的所有对象的SQL语言;
  • DDL操作影响数据库对象的元数据信息,一条DDL命令会在所有gcluster管理节点和gnode计算节点执行,所有节点保存元数据信息;
对象 对象含义 支持的DDL操作
DATABASE 数据库 CREATE、DROP
TABLE CREATE、ALTER、 DROP、TRUNCATE
VIEW 视图 CREATE、ALTER、 DROP
INDEX 索引 CREATE、ALTER、 DROP

执行逻辑
发起管理节点会将DDL命令下发给gcluster管理节点和gnode计算节点,各节点更新元数据、更新系统表,然后返回结果给发起管理节点。

2、数据库管理

1.1 数据库(database)

  • 按照一定的数据结构来组织、存储和管理数据的仓库;
  • 数据库含有各种成分,包括表、视图、存储过程、自定义函数、索引等;
  • 一个GBase 8a MPP系统中,可以有一个或多个数据库;
  • 数据库物理存储是目录,保存在系统参数datadir指定目录下面;
  • 数据库目录包括metadata(元数据)和sys_tablespace(默认表空间)子目录;
  • gnode节点的sys_tablespace目录下存放具体的列数据文件;

创建数据库:

CREATE DATABASE [IF NOT EXISTS] database_name;

删除数据库:

DROP DATABASE [IF NOT EXISTS] database_name;

指定当前数据库:

USE database_name;

查询现有数据库:

show databases;

查询当前数据库:

select database();

3、表管理
表是关系型数据库中,存储数据的基本架构。表的管理包括创建表、表拷贝、修改表、清空表、删除表等。
在gbase 8a MPP系统中,表对外作为一个整体 内容以表分片在各个节点以列文件形式分布存储。

3.1 表数据有以下性质

  • 每一列数据都是同类型的数据;
  • 不同列有不同的属性名;
  • 列是无序的,左右顺序无关;
  • 行的次序可以变换,跟顺序无关;

3.2 数据模型设计

GBase 8a 集群适用的数据模型包括:

  • 星型;
  • 雪花型;

数据模型设计原则:

  • 大表建成分布表,推荐建成hash分布表;
  • 小表建成复制表;
  • 频繁跟其他表做等值join连接的表(如维度表)建成复制表;

3.3 创建表的语法
创建表:

CREATE [TEMPORARY] TABLE [IF NOT EXITS][database_name.]table_name(column_definition [,column_definition],...) [table_options]

参数说明:
列定义:列名称 数据类型 [NOT NULL | NULL] [DEFAULT default_value] [COMPRESS (数值)] [COMMENT]

表选项:[REPLICATED | DISTRIBUTED BY (‘column_name’)] [COMPRESS (数值型,字符型)] [COMMENT]

  • DEFAULT:指定数据列的默认值。默认值必须为一个常数,不能是一个函数或者一个表达式;
  • COMMENT:指定数据列或表的备注说明。用法:comment ‘备注信息’。可以使用 SHOW CREATE TABLE table_name 和 SHOW FULL COLUMNS FROM table_name 语句来显示备注信息;
  • COMPRESS:指定相关数据类型的压缩方式。数值型:0,1,5;字符型:0,3,5;
    – 0:不压缩; 1:对数值型就行深度压缩;2:对字符型进行深度压缩;5:轻度压缩
    – 表示压缩组合(0,0)、深度压缩(1,3)、轻度压缩(5,5)

3.4 分布表

  • 分布表可以使数据按指定的策略分部存储在不同的主机上,从来实现分布式数据存储和分布式计算,解决大数据存储容量拓展和计算性能拓展的问题。
  • 分布策略:采用hash分布、random分布策略存储数据;
  • 默认创建的表是随机分布表,每个节点上只保留部分表数据;
  • Hash分布表能实现相同数据在同一节点上,实现本地化运算,推荐大表建成hash分布表
    – 例一 随机分布表:
CREATE TABLE t1(a int, b varchar(10),KEY a_key(a) USING HASH GLOBAL);

– 例二 hash分布表:

CREATE TABLE student(stu_no varchar(10),stu_name varchar(200),stu_sex int) DISTRIBUTED BY ('stu_no')`;

3.5 hash分布数据均匀——分布列选择最重要

3.5.1 选择distributed by列字段的原则:

  • 在多表 join 查询时,表中某列经常用于 JOIN 等值关联;
  • 表中该列通常是等值查询的列,并且使用频率很高;
  • 做 group by 操作时,分组字段;
  • 表中重复值较少的列,尽量让数据均匀分布;

3.5.2 被选为distributed by列字段,有如下限制说明:

  • 当前只支持INT、BIGINT、varchar、decimal
  • distributed by 列的值,不允许进行update操作;

3.6 复制表

  • 复制表将会存于各个节点上,且表的名字和数据完全一致;
  • 需要使用REPLICATED关键字来创建复制表;
  • 复制表不用拉表即可实现本地运算,效率高;
  • 一般来说,小表(纬度表)可以被创建成复制表;
  • 一些表频繁参与JOIN查询表也可以被创建成复制表;
    – 举例:
CREATE TABLE t1(a int) `REPLICATED`;

3.7 临时表
使用关键词TEMPORARY,临时表被限制在当前连接中,当连接关闭时,临时表会自动的被删除。临时表可以使随机分布表、hash分布表、复制表中的任意一种类型。

  • 举例:
CREATE `TEMPORARY` TABLE t1(a int) ;

注意事项:

  • 临时表支持除ALTER之外的所有DDL及DML操作;
  • 临时表不能被备份;
  • 临时表支持在当前连接中使用查询结果导出语句导出表中数据;

3.8 表结构和表数据复制

3.8.1 表结构和表数据复制
根据列定义以及投影列创建新的表结构,并将SELECT查询的数据复制到所创建的新表中。不指定目标表的类型时,默认创建随机分布表。
示例:

create table t2 distributed by('fx') `as select` * from t1;
create table t2 replicated `as select` * from t1;
create table t2  `as select` * from t1;
create table t2 `as select` * from t1 `limit 0`;

3.8.2 表结构复制
分为两类:
1、根据列定义以及投影列创建新的表结构。... as select... limit 0
2、只创建表结构,没有表数据(目标表和源表的表类型完全一致)。...like...
– 举例:

create table t2 `like` t1;

3.9 其他表操作语法
重命名表:

RENAME TABLE 原表名 TO 新表名;
ALTER TABLE 元表名 RENAME 新表名;

清空表内容:

TRUNCATE TABLE t;

删除表:

DROP TABLE t1;

五、GBase 8a MPP Cluster DDL 视图和索引

1、视图管理

1.1 介绍

  • 视图是由SELECT语句组成的查询定义的虚拟表
  • 视图跟表不同,表有实际的储存数据,而视图是虚拟表,本身实际上不存储数据。
  • 视图就像一个窗口,引用视图时动态生成,数据来自当前或其他数据库的一个或多个表,或者其他视图。
  • 对视图的查询操作跟表相同。

1.2 作用
简单性:简化用户对数据的理解,简化操作,被经常使用的查询可以被定义为视图。
安全性:通过视图用户只能查询他们所能见到的数据。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上。

1.3 限制
禁止对视图进行insert、update和delete操作。

1.4 视图操作语法

  • 创建视图:
CREATE [OR REPLACE] VIEW [<视图名> [(<列名1>,<列名2>,...)]] AS SELECT...;
  • 修改视图:
ALTER VIEW <视图名>  [(<列名1>,<列名2>,...)] AS SELECT...;
  • 删除视图:
 DROP VIEW [IF EXISTS] <视图名>;

1.5 表和视图查看操作语法
表和视图的查看:

SHOW TABLES [FROM DB_NAME] [LIKE 'pattern'];
DESC table_name;
SHOW CREATE TABLE [database_name.]table_name;
SHOW CREATE VIEW[database_name.]view_name;

示例:

show tables from test like 't%';   --显示以t字母开头的表和视图
desc t1;                            --查看t1表的字段信息
show create table t1;               --查看t1表的建表语句
show create view v_t;               --查看v_t视图的创建语句

2 、索引管理

2.1 介绍

  • 数据库索引是为了提升查询定位效率而对表字段附加的一种标识,避免全表扫描;

  • 索引文件单独存储,GBase 8a 支持三类索引:
    – 智能索引:粗粒度,在DC满块时自动创建智能索引,所有列都有,对用户透明,无需用户手动维护。
    – hash索引:提升等值查询的性能,需用户根据查询列手动创建,会影响数据入库性能。
    – 全文检索:提升文本内容的查询效率,采用全单字索引方式,并且可以保证100%的查询召回率,需要用户手动创建,需特别安装支持全文检索的插件包才能使用全文检索功能。

2.2 hash索引

  • hash索引:提高等值精确查询性能
    – 默认创建GLOBAL的哈希索引,基于整列数据创建索引;
    – 可以基于指定的DC窗口建立分段索引;
    – hash索引文件为独立的文件存储;

  • 创建hash索引的语法有两种形式:

CREATE INDEX index_name ON [vc_name.][database_name.]table_name(column_name) [key_block_size=size_value] USING HASH [GLABOL | key_dc_size=num];
ALTER TABLE [table_name] ADD INDEX index_name(column_name) USING HASH [key_dc_size=num]  [key_block_size=size_value];

-说明:
– key_dc_size:设置按DC窗口大小来建立分段的hash索引文件;
– key_block_size:索引数据按也存储,设置每个数据块占用的页大小,4k~32k之间,为4k的倍数;

2.3 索引操作语法

  • 查看INDEX名称:
    SHOW INDEX FROM [database_name.]table_name;

  • 删除索引的2种语法:
    DROP INDEX <索引名> ON <表名>;
    ALTER TABLE [table_name] DROP INDEX index_name;

  • 限制说明
    BLOB、TEXT 列不能创建HASH索引;
    – 该列数据量较大,但distinct值较少(即重复值较多),也不适合使用HASH索引;
    – 创建索引时,只能指定单列,不能指定多列或创建联合索引;
    – 创建索引会影响加载性能,需慎用;

六、GBase 8a MPP Cluster DML语句

1、DML定义与分布式执行逻辑
用于更新指定的数据,包括插入、修改和删除操作。
执行过程:

  • 发起节点会将DML命令发给gnode计算节点,各计算节点执行DML命令、更新数据,然后返回结果给发起管理节点,DML操作会改变gnode节点的数据;
  • 分布表主分片执行成功,然后链式转发同步到备份分片;

2、INSERT

2.1 原理
从DC尾块新增数据,不影响已入库数据。批量入库性能高于单条入库性能

2.2 插入数据
INSERT语句向表中插入新的行,通常有两种形式:
(1)插入元组的语法:

INSERT [INTO] [database_name.]table_name [(column_name,...)] VALUES ({EXPR | DEFAULT},...),(...),...;

(2)插入查询结果操作语句:

INSERT [INTO] [database_name.]table_name [(column_name,...)] SELECT ...FROM [database_name.]table_name ...;

3、UPDATE
(1)语法格式:

UPDATE [database_name.]table_name `SET` col_name1=expr1[,col_name2=expr2 ...] [WHERE where_definition];

注意:不支持更新distributed by(哈希列)定义列的值。

  • UPDATE:默认全列更新,更新条数较少时,性能较差。

  • 快速UPDATE模式:
    – 快速UPDATE模式,等价于DELETE+INSERT,即先删除符合更新条件的数据,然后再向表的末尾插入需更新的新数据;
    – 快速UPDATE模式,用来提高列存储数据更新操作效率问题;
    – 更新少量数据时,建议使用快速UPDATE模式;
    – 使用SET gbase_fast_update=1;命令打开快速UPDATE模式(默认情况下是关闭的);

4、DELETE

4.1 原理
对删除数据 只标记删除标志,不实际删除数据。

4.2 语法格式

DELETE [FROM] [database_name.]table_name [tbl_alias] [WHERE where_definition];

4.3 空间回收
释放被删除数据文件所占的磁盘空间。

ALTER TABLE [vc_name.][database_name.]tbl_name SHRINK SPACE [FULL] | [FULL BLOCK_REUSE_RATIO=num];

参数说明:

  • 文件级回收:不指定FULL关键字时以文件为单位,只有当这个数据文件涉及的数据都被删除后,才能回收该文件所占用的磁盘空间;
  • 行级回收:指定FULL关键字,则按删除的行进行空间回收;有效行的顺序跟回收前保持一致,效率较低;
  • 块级(DC)回收:指定FULL BLOCK_REUSE_RATIO=num表示当每个数据包(DataCell)中有效数据占比低于该设置值时,DC进行空间回收。DC重新整合成新的数据文件,无法保证有效行的顺序跟回收前一致。
ALTER TABLE t1 SHRINK SPACE FULL BLOCK_REUSE_RATIO=30;

5、DML语句使用说明

DML 原理 说明
INSERT 从DC尾块新增数据,不影响已入库的数据;批量入库性能高于单挑入库性能; 支持标准sql语法及拓展写法;
UPDATE 全列更新;快速更新(delete+insert) ;参数gbase_fast_update控制 不支持更新distributed by 定义列的值;不支持多表数据的同时更新,但是可以进行多表关联操作,但是只能更新其中一张表的数据;
DELETE 做删除标记不实际删除数据,使用ALTER TABLE…SHRINK SPACE释放空间 不支持多表批量删除,例如:DELETE FROM t1,t2; 支持多表关联删除,但是只能删除其中一张表的数据;例如;DELETE a FROM a,b WHERE a.sid=b.sid;

七、GBase 8a MPP Cluster DQL语句

1、SELETE语句基础知识
1.1 语法格式:

SELECT [ ALL | DISTINCT ] <列表达式>,...
FROM <表名>,...
[ WHERE <条件表达式> ]
[ GROUP BY <列名>,...[ HAVING <条件表达式> ] ]
[ ORDER BY <列名> [ASC | DESC ],...]
[ LIMIT { [offset,] row_count | row_count OFFSET offset} ]
[ INTO OUTFILE 'file_name' <导出选项> ];
  • 查询中用到的关键词主要包含六个,编写顺序依次为:
    select -> from -> where -> group by -> having ->order by

  • SQL Select 语句完整执行顺序:
    – from子句用于组装来自不同数据源的数据;
    – where子句用于根据指定的条件对记录行进行筛选;
    – group by子句用于将数据划分为多个分组;
    – 使用聚集函数进行计算;
    – having子句用于筛选分组;
    – order by子句用于对结果集进行排序;

1.2 运算符

查询类别 运算符
算数 +,-,*,/,div,%,mod
比较 =,>,>=,<,<=,!=,<>
范围 BETWEEN…AND…,NOT BETWEEN…AND…
集合 IN,NOT IN
空值判断 IS NULL,IS NOT NULL
字符匹配 LIKE,NOT LIKE,REGEXP,RELIKE
逻辑运算 NOT,!,AND,&&,OR,II,XOR

2、JOIN表关联语句

  • 若一个查询同时涉及两个及以上的表,则需要连接查询;
  • 关系数据库的强大处理能力正是源于各种形式的连接查询,能够将不同表的数据按一定条件连接在一起;
  • SQL提供的连接查询分为内连接(inner join)和外连接(outer join)两大类型:
    – 内连接将两个表连接在一起的条件称为连接谓词(Join Predicate)或连接条件
    – 内连接只返回两个表中与连接谓词匹配的行,不匹配的行不会被输出
    – 外连接可以将左表或右表中不匹配的行输出
    – 外连接分为左外连接(left outer join)、右外连接(right outer join)和完全外连接(full outer join)



    全连接等价于左外连接 UNION右外连接。

:实际编写SQL中,尽量少用全连接,避免结果集过大导致性能变慢。

2.1 多表连接查询说明

  • 多表关联时,基于代价进行优化,内关联跟表书写顺序无关;
  • where条件从右往左顺序执行 ,建议把返回结果集小的表条件写到最后;
  • 使用explain…在线查询SELETE语句执行计划;

3、UNION集合查询
3.1 应用
如果两个或多个SELECT语句的结构相似,则可以用UNIONUNION ALL把这些SELECT语句合并起来

3.2 UNION和UNION ALL的区别

  • UNION:对连个结果集进行并集操作,不包括重复行;
  • UNION ALL:对两个结果集进行并集操作,包括重复行,不进行排序;
  • 如果结果集没重复数据,建议使用UNION ALL代替UNION,性能更好;

4、总结
编写高效SQL语句

  • 避免生产环境使用select *,减少投影列;
  • 数据量大时,group by、order by会很费时,建议将hash分布列写在第一个位置;
  • 使用where条件提前过滤数据,减少join的运算;
  • 使用limit减少物化的结果集条数;
  • 在做多表查询时应注意字段名称的唯一性;如果不唯一,则要明确表名;
  • 内连接比外连接效率高,连接查询所使用的字段最好是hash分布键;
  • 注意笛卡尔积问题;

八、GBase 8a MPP Cluster常用系统函数

1、数学函数

  • round:按位四舍五入(个位为0位,往左为负往右为正,然后对此位四舍五入)
  • truncate:按位截取(以小数点为界:负数往左截取,正数往右截取)

2、日期时间函数

函数 功能
NOW,SYSDATE,CURRENT 当前日期与当前时间
YEAR,MONTH,DAY,WEEKDAY 取指定表达式中的年、月、日、星期
LAST_DAY 去月份日期的最后一天
TO_DAYS 返回日期date对应的天数(从年份0开始的天数)
DATE_FORMAT 依照FORMAT字符串格式化日期值
ADD_MONTHS、PERIOD_DIFF(P1,P2) 取表达式几个月后的值、月份之差 ;返回值是日期时间类型
DATE_ADD、DATE_SUB、DATEDIFF 日期加法、减法、日期相差天数


(1)建议使用now()函数

  • sysdate()f返回的是此函数执行时的时间;
  • now()返回的是SQL语句执行时的时间;

3、字符串处理函数

函数 功能
LOWER,LCASE,UPPER 转换字符串大小写
REPLACE 替换字符串中指定的字符串
ASSCII 取ASSCII值
CONCAT,II 字符串连接
SUBSTRING,LEFT,RIGHT 字符串截取
INSTR 取字符串位置
NVL 替换NULL值
TRIM,LTRIM,RTRIM 去除字符串中前后特定字符
LENGTH,CHAR_LENGTH 取字符串长度

  • length求字符串长度,其中中文字符每个字符占3个长度;

3.1 CASE用法
(1)格式1:

CASE value
WHEN [compare-value] THEN result
[ WHEN [compare-value] THEN result...]
[ELSE result] END;

(2)格式2:

CASE WHEN
[condition] THEN result
[ WHEN [condition] THEN result...]
[ELSE result] END;

4、数据转换函数

函数 功能
CAST、CONVERT 数据类型转换
CONV 不同数字进制间的转换
TO_NUMBER 字符串string转化成数值
TO_CHAR 日期转化为字符串
TO_DATE 字符串string格式化成format类型的日期

5、注意

函数尽量使用在上,这样函数就会只执行一次,还能利用智能索引。

九、GBase 8a MPP Cluster DCL语句

DCL数据控制语言:是对数据访问权进行控制的指令,他可以控制特定用户对库、表、存储程序、用户自定义函数等数据库对象的控制权。由GRANT和REVOKE两个指令组成。

1、用户USER
用户用于登录数据库,新建用户默认只有登录数据库的权限。

(1)创建用户

create user admin identified by 'admin';

(2)修改用户名

rename user admin to new_user;

(3)修改密码

set passward for new_user=password('newadmin');

(4)删除用户

drop user new_user;

1.1 user支持如下几种方式的书写

  • 任何主机:user@’%’
  • 主机:user@‘localhost’
  • 网段:user@‘192.168.0.0’
  • ip地址:user@‘192.168.10.6’
  • 不写主机与user@’%'等价:user

2、用户组 ROLE
(1)ROLE:

  • 角色相当于用户组,把有相同权限的用户组成一个组,用于批量授权;
  • 用户只需要修改组的权限,该组下所有用户的权限都将发生改变,便于对拥有相同权限用户进行管理;

(2)具体SQL语句:

  • 创建用户组Role:
create role role1,role2;
  • 删除用户组Role:
drop role role1;

3、权限管理——GRANT、REVOKE

  • 为用户赋权:
grant select on db1.t1 to user1;
  • 收回用户权限:
revoke select on db1.t1 to user1;
  • 为用户组Role赋权:
grant all on db2.* to role1;
  • 回收用户组Role权限
recoke all on db2.* to role1;
  • 将用户组Role权限赋予用户:
grant  role1 to user1 [with admin option]
  • 向用户回收用户组Role权限:
revoke  role1 from user1

3.1 特别说明

  • ALL是一个特殊权限,它是把GRANT OPTION之外的所有权限赋予指定用户。
  • 加载或导出数据需要FILE权限,权限需单独设置:
grant FILE on *.* to role1;
  • 为用户赋予优先级权限:
grant usage on *.* to user_name with task_priority priority_value;

注:priority_value的取值范围为0~3。数字越大优先级越高,缺省为0。

  • 查看用户或用户组权限:
show grants for user/role;
  • 查看用户和组的关联信息:
select * from gbase.role_edges;

4、多VC下用户操作VC

  • 多VC的虚拟集群环境下,用户和用户组是全局统一的。

  • 为用户设置默认VC:
    – 给用户设置DEFAULT_VC权限后,用户连接集群时就默认登录到该VC;
    – 建议给每个用户都设置默认VC;
    – 设置默认DEFAULT_VC的命令;

set default_vc for user = vc_name;
  • 切换当前VC语法:
use vc vc_name;

设置root用户的默认VC:
5、多VC下用户权限管理
(1)把访问多VC下的库/表/列…授权给USER。
授权方式如下:

GRANT ALL ON *.* TO USER1;
GRANT ALL ON VC2.DB.* TO USER1;
GRANT ALL ON VC2.DB.TABLE TO USER1;

(2)把USER在多VC下的库/表/列…权限收回。
收回方式如下:

REVOKE ALL ON *.* TO USER1;
REVOKE ALL ON VC2.DB.* TO USER1;
REVOKE ALL ON VC2.DB.TABLE TO USER1;

十、GBase 8a MPP Cluster DCL系统表

1、4个系统库

  • 系统库在每个gcluster节点、gnode节点上都存在;
  • 系统库里的系统表所查询到的信息大多是本地信息;
    – Information_schema
    – performance_schema
    – gbase
    – gclusterdb

(1) Information_schema库:
库内表为系统视图(MEMORY引擎表,只读),在查询时通过检索扫描相关文件获取集群的元数据信息,如库或表的名称、列的数据类型、访问权限、数据加载结果及状态信息、资源信息等;

(2)performance_schema库
与Information_schema库相似,库内表为系统视图,区别在于performance_schema用于监控数据库本地运行时的信息,包括运行状态信息、磁盘、内存使用情况等;

(3)gbase库:
gbase库内的系统表为GsSYS引擎表,存储用户及权限、审计日志、函数/存储过程、UDF及引擎插件等信息;

(4)gclusterdb库:
gclusterdb库的系统表为express引擎表,主要为dual、数据重分布、kaflka-consumer流数据处理、temporary临时表对应的物理映射表等系统表(部分系统表在使用相关功能时才生成);

2、查询系统信息方法

(1)元数据信息
Information_schema系统库信息查询示例:

  • 查询VC虚拟集群
select * from information_schema.vc;
-- 或者
show vcs;
  • 查询数据库
select schema_name as `Database` from information_schema.schemata;
-- 或者
show databases;
  • 查询某个库所有表和视图
select table_name,table_type from information_schema.tables where table_schema='test';
-- 或者
show tables from test like 't%';
  • 查询某个表中的列
select column_name,data_type,is_nullable,column_default from information_schema.columns where table_name='sales' and table_schema='test';
-- 或者
show columns from test.t;
  • 查询存储过程和自定义函数
select routine_schema,routine_name,routine_type from information_schema.routines;
-- 或者
show create procedure p_demo; //查看创建存储过程的语句
  • 查询索引信息
select table_name,index_name,seq_in_index,column_name,index_type from information_schema.statistics where table_schema='test';
-- 或者
show index from test.t;

(2)节点使用磁盘空间
performance_schema系统库示例:

  • 查询当前节点gcluster层磁盘空间使用信息
select * from performance_schema.disk_usage_info;
  • 查询集群某节点的gcluster层和gnode层磁盘信息空间使用情况
select * from performance_schema.cluster_disk_usage_info where host='vm1';


(3)用户、用户组
gbase系统库示例:

  • 查询数据库中的用户
select user from gbase.user;
  • 查询数据库中的用户与用户组role的关联关系
select * from gbase.role_edges \G;
  • 如何查看哪些表是复制表,哪些是hash分布表,分布键是哪列?
select dbname,tbname,isreplicate,hash_column from gbase.table_distribution where dbname='库名' and tbname like '表名';
show create table '表名';
  • 如何判断分布表数据有没有倾斜?
select * from information_schema.cluster_table_segments where table_schema='库名' and table_name='表名';

cluster_table_segments:记录每个分片的数据占用磁盘空间信息

  • 如何查询表的总条数
select count(*) from '表名';
select table_schema,table_name,table_rows/2,storage_size/2 from performance_schema.tables where table_schema='库名' and table_name='表名';

table_rows:为表所有分片的条数的和,当表分片有一个副本时,是表条数的2倍;当表分片有两个副本时,是表条数的3倍。

  • 显示8a集群的系统变量值:
select * from information_schema.global_variables where variable_name like 'pattern';
show variables [ like 'pattern'];
  • 设置系统变量值
set [global | session] <variablename> = value;

– global 全局变量值改变,只对新的session会话起作用。
– session 默认为会话变量,可不写。

  • 查询8a集群的默认压缩模式信息:
show global variables like '%compress%';
select * from information_schema.global_variables where variable_name like '%compress%';

(4)运行线程查询和管理

  • 终止正在运行的线程(SQL语句):
kill [connection | query] thread_id;

– connection 参数:用于终止指定的thread_id线程,默认参数。
– query参数:中止连接当前执行的语句,但是不中止该连接本身。

  • 暂停正在运行的线程:
pause thread_id;
  • 继续已暂停的线程:
continue thread_id;

(6)当前系统信息等

  • 使用系统函数,查看当前系统信息:
version();       --返回当前8a系统版本
vc();           --返回当前vc名字
database();     --返回当前数据库名字
user();         --返回当前用户名
charset(str);   --返回字符串参数使用的字符集
  • 使用use切换当前VC/数据库
use vc vc1;
use test;

GBase 8a MPP Cluster SQL基础相关推荐

  1. DEV01-GBase 8a MPP Cluster SQL 编码进阶篇

    GBase 8a MPP Cluster SQL 编码进阶篇 一.概述: 二.常用内置函数 (一)函数体系 (二)内置函数的基本概念: (三)内置函数的使用位置: (四)内置函数概览 (五)数学函数 ...

  2. GBase 8a MPP Cluster技术先进性

    GBase 8a MPP Cluster作为行业内最先进的MPP数据库分析,从产品成熟性.稳定性.高可用性.高可靠性和高安全性方面具有以下优势,整理如下. 1)低硬件成本:完全使用X86架构的PC S ...

  3. GBase 8a MPP Cluster 产品简介

    1 GBase 8a MPP Cluster 产品简介 产品简介 南大通用大规模分布式并行数据库集群系统,简称:GBase 8a MPP Cluster, 它是在 GBase 8a 列存储数据库基础上 ...

  4. DEV05 GBase 8a MPP Cluster 数据库性能优化

    GBase 8a MPP Cluster 数据库性能优化 一.数据库为何要优化 (一)从 DBA 角度谈数据库为何要优化 (二)数据库产品的选型: (三)从 DE(开发工程师)角度谈数据库为何要优化 ...

  5. GBase 8a MPP Cluster 认证培训资料汇总

    一.课前准备: <GBase 8a MPP Cluster GDCA 认证培训课前准备> https://blog.csdn.net/wiserhowe/article/details/1 ...

  6. GBase 8a MPP Cluster 维护-日志篇

    日志介绍 1.1 关于日志 日志描述 GBase 8a MPP Cluster 集群不同的日志保存路径不同,主要日志分类见下表详细日 志查看参见附录日志参考. 表 :日志分类说明 日志类型 日志描述 ...

  7. 【GBASE】南大通用GBase 8a MPP Cluster技术特点

    GBase 8a MPP Cluster 具有多样化的平台选择.与时俱进的逻辑架构.海量数据高效存储.海量数据高速加载.海量数据高性能分析.弹性服务器资源伸缩.完善的系统资源管理.多级别的高可用.跨数 ...

  8. E01 GBase 8a MPP Cluster V95 安装和卸载

    GBase 8a MPP Cluster V95 安装和卸载 一.集群节点环境设计 二.安装前准备工作 三.集群的安装 1.在集群所有节点上创建DBA用户 2.在集群所有节点上创建安装目录并授权 3. ...

  9. GBase 8a MPP Cluster GDCA 认证培训课前准备

    GBase 8a MPP Cluster GDCA 认证培训课前准备 一. GBase 数据库软件获取 1. GBase 8a 数据库安装包.企业管理器和手册下载 二. 自己完成操作系统环境准备 (一 ...

最新文章

  1. 操作无法完成.键入的打印机名不正确,或者指定的打印机没有连接到服务器上.有关详细信息,请单帮助...
  2. Nat. Commun | 预测RNA-蛋白质结合偏好的深度学习框架
  3. Qt学习之路_1(安装及首次体验)
  4. HDU5900 QSC and Master(区间DP + 最小费用最大流)
  5. jvm参数调优堆的初始和最大值一定要一致
  6. spring boot 的使用(一)
  7. ARTetris-AR版俄罗斯方块的源码解析
  8. qml入门学习(六):Component组件
  9. [ 数据集 ] MINIST 数据集介绍
  10. SQL Server 2008 R2安装步骤示例
  11. 九型人格:四、The TRAGIC ROMANTIC 悲情浪漫者 - 我若不是独特的,就没有人会爱我
  12. 转 导入视频格式问题(QuickTime player)
  13. 一个k8s集群——跨云服务器部署
  14. php phpmailer 发送邮件
  15. 基于傅里叶变换的电力测频算法
  16. 神经网络预测股价python talib_用机器学习来预测股价(代码+文档)——2018年iNTUtion决赛大作!...
  17. 为什么要配置Java环境变量以及Java环境变量的配置
  18. Python数据分析训练营——Python基础语法
  19. 八年级上学期计算机教学计划,八年级上学期劳技教学计划
  20. 解决,电脑开机显示正在准备自动修复,正在诊断你的电脑 问题

热门文章

  1. LeetCode第一题两数之和
  2. 百度被黑了,百度被真相曝光
  3. 跳转物联平台,登录失败问题
  4. 非线性方程求根——牛顿迭代法
  5. 【逻辑漏洞技巧拓展】————3、逻辑漏洞之密码重置
  6. 2021Java高级面试题总结:java程序员优秀简历模板
  7. 车载通信与导航(一):V2V概述
  8. java cookie路径_路径问题以及cookie详解
  9. 记前谷歌台湾区总经理– 张成秀
  10. 《查令十字街84号》读后感