Vertica 常用命令

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 01:06   28   0

基于列存储的数据库,相对于传统的基于行的数据库,它更适合在数据仓库存储方面发挥特长。基于列存储的数据库的优点:
a)、对于聚集操作,比如求sum,明显基于列存储的要比基于行存储的快;
b)、对于update操作,不须接触其他列值;
c)、基于行存储的数据库在查询每行记录的多个列值更高效的条件是,row-size比较小,这样一次磁盘读取就可以获取整行;
d)、基于行存储的数据库在insert一行的时候相对更高效,毕竟可一次写入一个连续空间,即一次single disk seek。
从实际情况上来看,基于行存储的数据库更适合OLTP(联机事务处理系统),基于列存储的数据库更适合OLAP(联机分析处理系统),比如数据仓库。除此之外,同一列必定是同一类型大小,基于列存储的数据库更容易使用高效的存储方式,与之相对,基于行存储的数据库则只能采用随机方式处理列值了。

Vertica数据库的设计特点是:
a)、它是基于列的存储结构,提高了连续的record处理的性能,但是在一般事务中增加了对单独record进行update和delete的开销;
b)、“单独”更新(out-of-place updates)和混合存储结构,提高了查询、插入的性能,但增加了update和delete的开销;
c)、压缩,减少存储开销和IO带宽开销;
d)、完全无共享架构,降低对共享资源的系统竞争。
Vertica数据库运行在基于Linux的网格服务器上,目前应用于Amazon Elastic Compute Cloud的数据库管理系统。

常用命令如下:

一、进入vertica的sql环境:vsql -d dbname -w passwd
在vertica的sql环境下获取帮助 dbname=>\h

二、(1)查询用户:select * from v_catalog.users;
(2)查询schema:select * from schemata;
注:vertica中,某个schema必须附属于某个用户(user),查询用户和schema信息:
SELECT u.user_name, s.schema_name
FROM users u LEFT OUTER JOIN schemata s ON u.user_name = s.schema_owner

三、创建用户和schema:
(1)创建一个用户:create user dev_test identified by 'test';
(2)基于某个用户创建schema:create schema if not exists test authorization dev_test;
(3)重命名(备份用)dataname数据库为 dataname_bak:alter schema dataname rename to dataname_bak;
(4)删除dataname库:drop schema dataname cascade;

三、赋权:
(1)一个schema上的权限赋给另一个用户:GRANT USAGE ON SCHEMA dbname_dw TO dev_test;
(2)把对某个表的操作的权限赋给另一个用户:GRANT ALL ON TABLE tw_re_pm_cell_all_cell_h to dev_test;
(3)从某个用户收回对某个schema的使用权限:revoke all on SCHEMA dbname_dw from dev_test;
(4)从某个用户收回对某个表的使用权限:revoke all on table fct_flux_se_flux_flow_whole_ana_d from dev_test;

三、序列:
(1)查询系统中的序列:select * from sequences;
(2)创建序列:
简单语法:CREATE SEQUENCE sq1 MAXVALUE 5000 START 1;
标准语法:CREATE SEQUENCE [[db-name.]schema.]sequence_name
... [ INCREMENT [ BY ] positive_or_negative ]
... [ MINVALUE minvalue | NO MINVALUE ]
... [ MAXVALUE maxvalue | NO MAXVALUE ]
... [ START [ WITH ] start ]
... [ CACHE cache ]
... [ CYCLE | NO CYCLE ]

(3)1、使用序列:SELECT NEXTVAL('my_seq');
SELECT CURRVAL('my_seq');
注:一个新创建还没有使用过的序列,必须首先执行NEXTVAL,然后才能执行CURRVAL。

2、在INSERT语句里使用序列:INSERT INTO customer VALUES ('Hawkins' ,'John', 072753, NEXTVAL('my_seq'));
3、在INSERT语句里把序列作为默认值:
CREATE TABLE eND (3.1067, 2.0), '999999999999999999.00'))

-- 产生随机数
1、RANDOM()
RANDOM has no arguments. Its result is a FLOAT8 data type

SELECT RANDOM();
random
-------------------
0.211625560652465
(1 row)


2、RANDOMINT
Returns a uniformly-distributed integer I, where 0 <= I < N, where N <= MAX_INT8. That is, RANDOMINT(N) returns one of the N integers from 0 through N-1.

RANDOMINT ( N )

Example:
In the following example, the result is an INT8, which is >= 0 and < N. In this case, INT8 is randomly chosen from the set {0,1,2,3,4}.
SELECT RANDOMINT(5);
randomint
----------
3
(1 row)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP