云服务器内容精选

  • 示例 创建基表,并向基表插入数据: 1 2 CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH(a); INSERT INTO t1 SELECT x,x FROM generate_series(1,10) x; 创建默认BUILD IMMEDIATE方式的物化视图: 1 CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM t1; 创建指定列存方式的物化视图: 1 CREATE MATERIALIZED VIEW mv2 WITH(orientation = column) AS SELECT * FROM t1; 创建手动按需刷新的物化视图: 1 CREATE MATERIALIZED VIEW mv3 BUILD DEFERRED REFRESH ON DEMAND AS SELECT * FROM t1; 创建指定刷新时间的物化视图: 1 CREATE MATERIALIZED VIEW mv4 BUILD DEFERRED REFRESH START WITH(trunc(sysdate)) EVERY (interval ‘1 day’) AS SELECT * FROM t1;
  • 注意事项 物化视图的基表可以是行存表、列存表、hstore表、分区表或者指定某个分区、外表,不支持包含临时表(包括全局临时表、volatile临时表和普通临时表),不支持冷热表、不支持对自动分区表指定分区。 物化视图禁止INSERT/UPDATE/MERGE INTO/DELETE对数据进行修改。 物化视图执行一次将结果并保存,每次查询结果是一致的。BUILD IMMEDIATE或REFRESH后,物化视图可以查询出正确结果。 物化视图不能通过语法指定Node Group。支持物化视图的基表指定Node Group创建,物化视图会继承基表NodeGroup信息创建,需要多个基表的NodeGroup相同。 创建物化视图时需要schema的CREATE权限和基表或列的SELECT权限。 查询物化视图需要物化视图的SELECT权限。 刷新需要物化视图的INSERT和基表或列的SELECT权限。 物化视图支持ANALYZE/VACUUM/ALTER/DROP等细粒度权限。 物化视图支持with grant option的权限传递操作。 物化视图不支持更高级别的安全控制,如果基表存在行级访问控制、脱敏策略或owner为私有用户等限制SELECT权限的场景,则禁止创建物化视图;如果已存在物化视图,基表增加RLS、脱敏策略或修改owner为私有用户,则物化视图可以执行查询,但无法刷新。
  • 语法格式 1 2 3 4 5 6 7 CREATE MATERIALIZED VIEW [view_name] [ ( column_name [, ...] ) ] {{ BUILD { DEFERRED | IMMEDIATE }| { REFRESH { COMPLETE }{ ON DEMAND }|{ START WITH (timestmaptz) | EVERY (interval) }…}…| { ENABLE | DISABLE } QUERY REWRITE}| { WITH ( { storage_parameter = value } [, ... ] ) }| { DISTRIBUTE BY { HASH (column [ , ... ]) | ROUNDROBIN | REPLICATION }] AS query
  • 参数说明 BUILD DEFERRED | IMMEDIATE IMMEDIATE表示创建物化视图时即包含最新数据。 DEFERRED表示创建物化视图时需要等到第一次refresh时才会包含数据。 REFRESH 指定物化视图的刷新方式。 创建物化视图后,物化视图中的数据只反映创建时刻基表的状态。当基表中的数据发生变化时,需要通过刷新物化视图(REFRESH MATERIALIZED VIEW)更新物化视图中的数据。 目前只支持COMPLETE全量刷新这一种刷新方式。执行物化视图定义的查询语句并更新物化视图。 刷新触发方式。 ON DEMAND:手动按需刷新。 START WITH (timestamptz) | EVERY (interval):定时刷新。START WITH指定首次刷新时间,EVERY 指定刷新间隔,根据指定的时间定时刷新。 ENABLE | DISABLE QUERY REWRITE 是否支持查询重写。默认不支持。 在指定ENABLE QUERY REWRITE时,需要设置GUC参数 mv_rewrite_rule才能启用物化视图查询重写功能。 查询重写是指在对基表进行查询时, 如果基表上创建有物化视图,数据库系统自动判断是否可以使用物化视图中的预计算结果处理查询。 如果可以使用某个物化视图,会直接从该物化视图读取预计算结果,起到加速查询的作用。 WITH ( { storage_parameter = value } [, ... ] ) ORIENTATION 指定表数据的存储方式,即行存方式、列存方式,该参数设置成功后就不再支持修改。 取值范围: ROW,表示表的数据将以行式存储。 行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。 COLUMN,表示表的数据将以列式存储。 列存储适合于 数据仓库 业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少。 默认值:由GUC参数default_orientation决定。 row表示创建行存表。 column表示创建列存表。 column enabledelta表示创建开启delta表的列存表。 物化视图不支持的存储类型:分区表、h-store表、外表、时序表。 enable_foreign_table_query_rewrite 指定是否允许包含外表的物化视图进行查询重写,需要与ENABLE QUERY REWRITE一起使用。 外表数据有变化,物化视图无法感知。如果需要对包含外表的物化视图使用查询重写功能,需要指定此选项。 取值范围: on,允许包含外表的物化视图进行查询重写。 off,不允许包含外表的物化视图进行查询重写。 默认值:off DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 取值范围: REPLICATION:表的每一行存在所有数据节点(DN)中,即每个数据节点都有完整的表数据。 ROUNDROBIN:表的每一行被轮番地发送给各个DN,因此数据会被均匀地分布在各个DN中。(ROUNDROBIN仅8.1.2及以上版本支持) HASH:对指定的列进行Hash,通过映射,把数据分布到指定DN。 默认值:由参数default_distribution_mode决定。 AS query 基于query的结果创建物化视图。
  • 示例 创建表: 1 2 3 4 5 6 7 8 9 10 CREATE TABLE IF NOT EXISTS CUSTOMER ( C_CUSTKEY BIGINT NOT NULL CONSTRAINT C_CUSTKEY_pk PRIMARY KEY , C_NAME VARCHAR(25) , C_ADDRESS VARCHAR(40) , C_NATIONKEY INT , C_PHONE CHAR(15) , C_ACCTBAL DECIMAL(15,2) ) DISTRIBUTE BY HASH(C_CUSTKEY); 为customer.c_customer_sk列加注释: 1 COMMENT ON COLUMN customer.C_CUSTKEY IS 'Primary key of customer demographics table.'; 创建视图: 1 CREATE OR REPLACE VIEW customer_details_view AS SELECT * FROM CUSTOMER; 为customer_details_view视图加注释: 1 COMMENT ON VIEW customer_details_view IS 'View of customer detail'; 为customer表加注释: 1 COMMENT ON TABLE customer IS 'This is my table';
  • 注意事项 每个对象只存储一条注释,因此要修改对象的注释,对同一个对象发出一条新的COMMENT命令即可。要删除注释,在文本字符串的位置写上NULL即可。当删除对象时,注释自动被删除掉。 目前注释浏览没有安全机制:任何连接到数据库上的用户都可以看到所有该数据库对象的注释。共享对象(比如数据库、角色、表空间)的注释是全局存储的,连接到任何数据库的任何用户都可以看到它们。因此,不要在注释里存放与安全有关的敏感信息。 对大多数对象来说,只有对象的所有者可以设置注释。角色没有所有者,所以COMMENT ON ROLE命令仅可以由系统管理员对系统管理员角色执行,有CREATE ROLE权限的角色也可以为非系统管理员角色设置注释。系统管理员可以对所有对象进行注释。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 COMMENT ON { AGGREGATE agg_name (agg_type [, ...] ) | CAST (source_type AS target_type) | COLLATION object_name | COLUMN { table_name.column_name | view_name.column_name } | CONSTRAINT constraint_name ON table_name | CONVERSION object_name | DATABASE object_name | DOMAIN object_name | EXTENSION object_name | FOREIGN DATA WRAPPER object_name | FOREIGN TABLE object_name | FUNCTION function_name ( [ {[ argmode ] [ argname ] argtype} [, ...] ] ) | INDEX object_name | LARGE OBJECT large_object_oid | OPERATOR operator_name (left_type, right_type) | OPERATOR CLASS object_name USING index_method | OPERATOR FAMILY object_name USING index_method | [ PROCEDURAL ] LANGUAGE object_name | ROLE object_name | RULE rule_name ON table_name | SCHEMA object_name | SERVER object_name | TABLE object_name | TABLESPACE object_name | TEXT SEARCH CONFIGURATION object_name | TEXT SEARCH DICTIONARY object_name | TEXT SEARCH PARSER object_name | TEXT SEARCH TEMPLATE object_name | TYPE object_name | VIEW object_name } IS 'text';
  • 参数说明 agg_name 聚集函数的名称。 agg_type 聚集函数参数的类型。 source_type 类型转换的源数据类型。 target_type 类型转换的目标数据类型。 object_name 对象名。 table_name.column_name/view_name.column_name 定义/修改注释的列名称。前缀可加表名称或者视图名称。 constraint_name 定义/修改注释的表约束的名称。 table_name 表的名称。 function_name 定义/修改注释的函数名称。 argmode,argname,argtype 函数参数的模式、名称、类型。 large_object_oid 定义/修改注释的大对象的OID值。 operator_name 操作符名称。 left_type,right_type 操作参数的数据类型(可以用模式修饰)。当前置或者后置操作符不存在时,可以增加NONE选项。 text 注释。
  • 示例 为customer.c_customer_sk列加注释: 1 COMMENT ON COLUMN customer.c_customer_sk IS 'Primary key of customer demographics table.'; 为tpcds.customer_details_view_v2视图加注释: 1 COMMENT ON VIEW tpcds.customer_details_view_v2 IS 'View of customer detail'; 为customer表加注释: 1 COMMENT ON TABLE customer IS 'This is my table';
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 COMMENT ON { AGGREGATE agg_name (agg_type [, ...] ) | CAST (source_type AS target_type) | COLLATION object_name | COLUMN { table_name.column_name | view_name.column_name } | CONSTRAINT constraint_name ON table_name | CONVERSION object_name | DATABASE object_name | DOMAIN object_name | EXTENSION object_name | FOREIGN DATA WRAPPER object_name | FOREIGN TABLE object_name | FUNCTION function_name ( [ {[ argmode ] [ argname ] argtype} [, ...] ] ) | INDEX object_name | LARGE OBJECT large_object_oid | OPERATOR operator_name (left_type, right_type) | OPERATOR CLASS object_name USING index_method | OPERATOR FAMILY object_name USING index_method | [ PROCEDURAL ] LANGUAGE object_name | ROLE object_name | RULE rule_name ON table_name | SCHEMA object_name | SERVER object_name | TABLE object_name | TABLESPACE object_name | TEXT SEARCH CONFIGURATION object_name | TEXT SEARCH DICTIONARY object_name | TEXT SEARCH PARSER object_name | TEXT SEARCH TEMPLATE object_name | TYPE object_name | VIEW object_name } IS 'text';
  • 注意事项 每个对象只存储一条注释,因此要修改对象的注释,对同一个对象发出一条新的COMMENT命令即可。要删除注释,在文本字符串的位置写上NULL即可。当删除对象时,注释自动被删除掉。 目前注释浏览没有安全机制:任何连接到数据库上的用户都可以看到所有该数据库对象的注释。共享对象(比如数据库、角色、表空间)的注释是全局存储的,连接到任何数据库的任何用户都可以看到它们。因此,不要在注释里存放与安全有关的敏感信息。 对大多数对象来说,只有对象的所有者可以设置注释。角色没有所有者,所以COMMENT ON ROLE命令仅可以由系统管理员对系统管理员角色执行,有CREATE ROLE权限的角色也可以为非系统管理员角色设置注释。系统管理员可以对所有对象进行注释。
  • 参数说明 agg_name 聚集函数的名称。 agg_type 聚集函数参数的类型。 source_type 类型转换的源数据类型。 target_type 类型转换的目标数据类型。 object_name 对象名。 table_name.column_name/view_name.column_name 定义/修改注释的列名称。前缀可加表名称或者视图名称。 constraint_name 定义/修改注释的表约束的名称。 table_name 表的名称。 function_name 定义/修改注释的函数名称。 argmode,argname,argtype 函数参数的模式、名称、类型。 large_object_oid 定义/修改注释的大对象的OID值。 operator_name 操作符名称。 left_type,right_type 操作参数的数据类型(可以用模式修饰)。当前置或者后置操作符不存在时,可以增加NONE选项。 text 注释。
  • 参数概览 创建外表语法提供了多个参数,常用参数分类如下。 必需参数 table_name column_name type_name SERVER gsmpp_server access_key secret_access_key OPTIONS参数 外表的数据源位置参数 location 临时安全凭证参数(8.2.0及以上集群版本支持) security_token 数据格式参数 format header(仅支持 CS V格式) delimiter quote(仅支持CSV格式) escape (仅支持CSV格式) null noescaping(仅支持TEXT格式) encoding eol bom(仅支持CSV格式) 容错性参数 fill_missing_fields ignore_extra_data compatible_illegal_chars PER NODE REJECT LIMIT 'val... LOG INTO error_table_name WITH error_table_name 性能优化参数 file_split_threshold(仅支持TEXT格式)
  • 示例 创建外表OBS_ft,用来以txt格式导入OBS上指定的对象数据到row_tbl表中: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 DROP FOREIGN TABLE IF EXISTS OBS_ft; NOTICE: foreign table "obs_ft" does not exist, skipping DROP FOREIGN TABLE CREATE FOREIGN TABLE OBS_ft( a int, b int)SERVER gsmpp_server OPTIONS (location 'obs://gaussdbcheck/obs_ddl/test_case_data/txt_obs_informatonal_test001',format 'text',encoding 'utf8',chunksize '32', encrypt 'on',AC CES S_KEY 'access_key_value_to_be_replaced',SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced',delimiter E'\x08') read only; CREATE FOREIGN TABLE DROP TABLE row_tbl; DROP TABLE CREATE TABLE row_tbl( a int, b int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE INSERT INTO row_tbl select * from OBS_ft; INSERT 0 3
  • 语法格式 1 2 3 4 5 6 7 8 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( { column_name type_name [column_constraint ] | LIKE source_table | table_constraint [, ...]} [, ...] ) SERVER server_name OPTIONS ( { option_name ' value ' } [, ...] ) [ { WRITE ONLY | READ ONLY }] [ WITH error_table_name | LOG INTO error_table_name] [PER NODE REJECT LIMIT 'value'] ;