vertica基本操作.docx
《vertica基本操作.docx》由会员分享,可在线阅读,更多相关《vertica基本操作.docx(8页珍藏版)》请在冰豆网上搜索。
![vertica基本操作.docx](https://file1.bdocx.com/fileroot1/2022-10/7/5576fbbe-2e88-4e74-8c7f-50592cb83963/5576fbbe-2e88-4e74-8c7f-50592cb839631.gif)
vertica基本操作
1.schema
1.如何查看schema?
在vsql里面,直接用\dn可以查看:
dbadmin=>\dn
Listofschemas
Name|Owner|Comment
------------+---------+---------
v_internal|dbadmin|
v_catalog|dbadmin|
v_monitor|dbadmin|
public|dbadmin|
v_txtindex|dbadmin|
v_idol|dbadmin|
ylods|dbadmin|
yledw|dbadmin|
yldm|dbadmin|
(9rows)
在DBVis里面,在左侧界面就可以看到。
执行select语句:
select*fromschemata;
2.查询用户和schema的信息:
SELECTu.user_name,s.schema_name
FROMusersu
LEFTOUTERJOINschematas
ONu.user_name=s.schema_owner;
3.创建schema,将schema授权给用户。
createschemaxmm;
grantallonschemaxmmtoxmm;
4.如何查看用户对哪些schema具有操作权限?
查询v_catalog架构下的grants表,可以看到授权情况:
通过grantallonschemaxmmtoxmm;语句授权,只能授予usage权限和create权限。
如果需要增加其他增删改查等(INSERT*,SELECT*,UPDATE*,DELETE*,REFERENCES*,USAGE*,CREATE*,TRUNCATE*)权限,还需要单独授权:
grantinsertonschemaxmmtoxmm;
5.不同的对象拥有的权限。
权限如下:
对象
权限
说明
schema
USAGE,CREATE
schema
INSERT*,SELECT*,UPDATE*,DELETE*,REFERENCES*,USAGE*,CREATE*,TRUNCATE*
Procedure
EXECUTE、EXECUTE*
新创建的用户仅对PUBLIC拥有USAGE权限,数据库用户必须为新用户显式授予CREATE权限,并为他们授予各个对象权限,以便新用户可以在public架构中创建或者查找对象。
6.不同的对象操作需要的权限要求
表相关的操作:
操作
必需权限
createtable
对于架构的create权限。
如果需要在createtable时需要引用序列,需要以下权限:
●对于序列架构的usage权限
●对于序列对象的select权限
droptable
对于包含表的架构或者架构所有者的usage权限
truncatetable
对于包含表的架构或者架构所有者的usage权限
altertableadd/drop/rename/alterclolumn
对于包含表的schema的usage权限
altertableadd/dropconstraint
对于包含表的schema的usage权限
altertablepartition(reorganize)
对于包含表的schema的usage权限
altertablerename
对于包含表的架构的usage和create权限
altertablesetschema
对于新schema的create权限;对于旧schema的usage权限
select
对于表的select权限和包含表的schema的usage权限
insert
对于表的insert权限和包含表的schema的usage权限
delete
对于表的delete权限和包含表的schema的usage权限
update
对于表的update权限和包含表的schema的usage权限
references
表中的references权限,可创建引用此表的外键约束。
需要对于包含被约束表和外键源的schema的usage权限。
analyze_statistics()
对于表的insert/update/delete权限;包含表的schema的usage权限
analyze_histogram()
对于表的insert/update/delete权限;包含表的schema的usage权限
drop_statistics()
对于表的insert/update/delete权限;包含表的schema的usage权限
drop_partition()
包含表的schema的usage权限
投射(projection):
这里的投射,其实是起到索引或者视图的作用。
操作
必需权限
createprojection
对于锚表的select权限;
对于包含锚表的schema的usage权限;
对于将包含投射的schema的create权限。
注意:
如果使用表隐式创建投射,则除了表创建权限以外,无需额外的权限。
alterprojectionrename
对于包含投射的架构的usage和create权限
dropprojection
对于包含投射的schema的usage权限
外部过程:
操作
必需权限
createprocedure
超级用户
dropprocedure
超级用户
execute
对于过程的execute权限;
对于包含该过程的schema的usage权限
序列:
操作
必需权限
createsequence
对于将包含序列的schema的create权限
createtablewithsequence
对于序列的select权限;
对于序列架构的usage权限
dropsequence
对于包含序列或序列所有者的架构的usage权限
altersequencerenameto
对于架构的usage和create权限
altersequencesetschema
对于当前包含序列的schema的usage权限;对于将要包含序列的新schema的create权限
currval()nextval()
对于序列的select权限;对于包含序列架构的usage权限
7.可以为表中的行或列创建访问策略。
有行访问策略和列访问策略。
列访问策略:
createaccesspolicyon架构名.表名forcolumn列名条件enable;
行访问策略:
createaccesspolicy架构名.表名forrowswhere条件enable;
创建列访问策略可以让不同的用户(角色)运行同一查询并收到不同的结果。
在访问策略中指定的条件决定用户是否能够看到策略所限制的数据。
具有dbadmin权限的用户,可以启用和禁用表中的单独访问策略。
注意点:
1.每个表只能有一个行访问策略。
如果以后需要添加更多策略,需要将策略放在单个where谓词中,并使用alteraccesspolicy启用新条件。
8.查看数据库角色。
select*fromroles;
2.表
1.v_catalog架构下的constraint_columns表,可以看到表列的限制条件,也包括非空(notnull)条件。
2.建表语句中,字段类型int可以正常使用,需要用到浮点数时,用numeric()。
createtablecustomer(
cust_idint,
cust_namevarchar(10),
gendervarchar(3)
)
segmentedbyhash(cust_id)
allnodesksafe;
在建表语句中,allnodes必须有,否则会报语法错误。
3.oracle里面的rownum在vertica中不能够使用,部分功能可以使用limit来替换。
select*fromtlimit6;
selectprojection_schemafromprojectionswhereprojection_schema='xmm'limit2;
4.子查询的写法:
Oracle里面该语句可以正常执行:
selectdistinctarea2code,area2name,dept1code,dept1name
fromYLDM.T_L1_DM_SUMDATAA
wherenotexists(select1
fromYLEDW.T_L1_EDW_REGIONMAPB
whereA.AREA2CODE=B.AREA2CODE
ANDA.DEPT1CODE=B.DEPTCODE
ANDYEAR>=2012)
但是在Vertica中执行会报错如下:
[Code:
2784,SQLState:
0A000][Vertica][VJDBC](2784)ERROR:
Correlatedsubquerycouldnotbeflattenedasajoin
解决:
将子查询中的ANDYEAR>=2012放到子查询外围即可正常执行:
selectdistinctarea2code,area2name,dept1code,dept1name
fromYLDM.T_L1_DM_SUMDATAA
wherenotexists(select1
fromYLEDW.T_L1_EDW_REGIONMAPB
whereA.AREA2CODE=B.AREA2CODE
ANDA.DEPT1CODE=B.DEPTCODE
)
ANDYEAR>=2012
3.projection
1.建表同时指定分布健,那么projection就会立即创建,分布健就是指定的字段,即使以后插入数据projection不变;建表的时候不指定分布键,那么会在插入第一条数据的时候创建projection,而且projection的分布健包含该表所有字段。
2.每个手工创建的projection会自动生成2个子projection。
3.如果某些字段是分布键字段(segmentby里面的字段),那么不能修改其数据类型。
建表时要是不指定分布键,那这个表的所有字段都不能修改,因为默认表会把所有字段作为分布键。
所以为了以后的修改和存储方便,最好是在建表时直接指定分布键。
4.其他操作
DBV里面中文字符乱码问题处理:
在SQLCommander中,sql语句中如果有中文,显示是‘口口口’。
解决办法如下:
在Tools->toolProperties->General->Appearance->Fonts->SQLEditor选择PMingLiU,同时把Grid也选择PMingLiU就可以了。
如上配置以后,中文就可以正常显示了。