1、vertica基本操作1.schema1. 如何查看schema?在vsql里面,直接用 dn 可以查看:dbadmin= dn List of schemas 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 | (9 rows)在
2、DBVis里面,在左侧界面就可以看到。执行select语句:select * from schemata;2. 查询用户和schema的信息:SELECT u.user_name, s.schema_name FROM users u LEFT OUTER JOIN schemata s ON u.user_name = s.schema_owner;3. 创建schema,将schema授权给用户。create schema xmm;grant all on schema xmm to xmm;4. 如何查看用户对哪些schema具有操作权限?查询v_catalog架构下的grants表,可
3、以看到授权情况:通过grant all on schema xmm to xmm;语句授权,只能授予usage权限和create权限。如果需要增加其他增删改查等(INSERT*, SELECT*, UPDATE*, DELETE*, REFERENCES*, USAGE*, CREATE*, TRUNCATE*)权限,还需要单独授权:grant insert on schema xmm to xmm;5. 不同的对象拥有的权限。权限如下:对象权限说明schemaUSAGE,CREATEschemaINSERT*,SELECT*, UPDATE*,DELETE*, REFERENCES*,USA
4、GE*, CREATE*, TRUNCATE*ProcedureEXECUTE、EXECUTE*新创建的用户仅对PUBLIC拥有USAGE权限,数据库用户必须为新用户显式授予CREATE权限,并为他们授予各个对象权限,以便新用户可以在public架构中创建或者查找对象。6. 不同的对象操作需要的权限要求表相关的操作:操作必需权限create table对于架构的create权限。如果需要在create table时需要引用序列,需要以下权限: 对于序列架构的usage权限 对于序列对象的select权限drop table对于包含表的架构或者架构所有者的usage权限truncate tabl
5、e对于包含表的架构或者架构所有者的usage权限alter table add/drop/rename/alter clolumn对于包含表的schema的usage权限alter table add/drop constraint对于包含表的schema的usage权限alter table partition(reorganize)对于包含表的schema的usage权限alter table rename对于包含表的架构的usage和create权限alter table set schema对于新schema的create权限;对于旧schema的usage权限select对于表的se
6、lect权限和包含表的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/
7、update/delete权限;包含表的schema的usage权限drop_statistics()对于表的insert/update/delete权限;包含表的schema的usage权限drop_partition()包含表的schema的usage权限投射(projection):这里的投射,其实是起到索引或者视图的作用。操作必需权限create projection对于锚表的select权限;对于包含锚表的schema的usage权限;对于将包含投射的schema的create权限。注意: 如果使用表隐式创建投射,则除了表创建权限以外,无需额外的权限。alter projection
8、 rename对于包含投射的架构的usage和create权限drop projection对于包含投射的schema的usage权限外部过程:操作必需权限create procedure超级用户drop procedure超级用户execute对于过程的execute权限;对于包含该过程的schema的usage权限序列:操作必需权限create sequence对于将包含序列的schema的create权限create table with sequence对于序列的select权限;对于序列架构的usage权限drop sequence对于包含序列或序列所有者的架构的usage权限alt
9、er sequence rename to对于架构的usage和create权限alter sequence set schema对于当前包含序列的schema的usage权限;对于将要包含序列的新schema的create权限currval() nextval()对于序列的select权限;对于包含序列架构的usage权限7. 可以为表中的行或列创建访问策略。有行访问策略和列访问策略。列访问策略:create access policy on 架构名.表名 for column 列名 条件 enable;行访问策略:create access policy 架构名.表名 for rows w
10、here 条件 enable;创建列访问策略可以让不同的用户(角色)运行同一查询并收到不同的结果。在访问策略中指定的条件决定用户是否能够看到策略所限制的数据。具有dbadmin权限的用户,可以启用和禁用表中的单独访问策略。注意点:1. 每个表只能有一个行访问策略。如果以后需要添加更多策略,需要将策略放在单个where谓词中,并使用alter access policy启用新条件。8. 查看数据库角色。select * from roles;2.表1. v_catalog架构下的constraint_columns表,可以看到表列的限制条件,也包括非空(not null)条件。2. 建表语句中,
11、字段类型int可以正常使用,需要用到浮点数时,用numeric()。create table customer(cust_id int,cust_name varchar(10),gender varchar(3) segmented by hash(cust_id) all nodes ksafe;在建表语句中,all nodes必须有,否则会报语法错误。3. oracle里面的rownum 在vertica中不能够使用,部分功能可以使用limit来替换。select * from t limit 6;select projection_schema from projections whe
12、re projection_schema=xmm limit 2;4. 子查询的写法:Oracle里面该语句可以正常执行:select distinct area2code, area2name, dept1code, dept1name from YLDM.T_L1_DM_SUMDATA A where not exists (select 1 from YLEDW.T_L1_EDW_REGIONMAP B where A.AREA2CODE = B.AREA2CODE AND A.DEPT1CODE = B.DEPTCODE AND YEAR = 2012)但是在Vertica中执行会报错
13、如下:Code: 2784, SQL State: 0A000 VerticaVJDBC(2784) ERROR: Correlated subquery could not be flattened as a join解决:将子查询中的AND YEAR = 2012放到子查询外围即可正常执行:select distinct area2code, area2name, dept1code, dept1name from YLDM.T_L1_DM_SUMDATA A where not exists (select 1 from YLEDW.T_L1_EDW_REGIONMAP B where
14、A.AREA2CODE = B.AREA2CODE AND A.DEPT1CODE = B.DEPTCODE )AND YEAR = 20123.projection1. 建表同时指定分布健,那么projection就会立即创建,分布健就是指定的字段,即使以后插入数据projection不变;建表的时候不指定分布键,那么会在插入第一条数据的时候创建projection,而且projection的分布健包含该表所有字段。2. 每个手工创建的projection会自动生成2个子projection。3. 如果某些字段是分布键字段(segment by里面的字段),那么不能修改其数据类型。建表时要是不指定分布键, 那这个表的所有字段都不能修改,因为默认表会把所有字段作为分布键。所以为了以后的修改和存储方便,最好是在建表时直接指定分布键。4.其他操作DBV里面中文字符乱码问题处理:在SQL Commander中,sql语句中如果有中文,显示是口口口。解决办法如下:在Tools-tool Properties-General-Appearance-Fonts-SQL Editor选择PMingLiU,同时把Grid也选择PMingLiU就可以了。如上配置以后,中文就可以正常显示了。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1