华为云用户手册

  • 示例3 关于包含信息约束(Informational Constraint)HDFS外表的相关操作。 创建含有信息约束(Informational Constraint)的HDFS外表。 1 2 3 4 5 6 7 8 9 10 CREATE FOREIGN TABLE ft_region ( R_REGIONKEY int, R_NAME TEXT, R_COMMENT TEXT , primary key (R_REGIONKEY) not enforced) SERVER hdfs_server OPTIONS(format 'orc', encoding 'utf8', foldername '/user/hive/warehouse/mppdb.db/region_orc11_64stripe') DISTRIBUTE BY roundrobin; 查看region表是否有信息约束索引: 1 2 3 4 5 6 7 8 9 10 11 SELECT relname,relhasindex FROM pg_class WHERE oid='ft_region'::regclass; relname | relhasindex ------------------------+------------- ft_region | f (1 row) SELECT conname, contype, consoft, conopt, conindid, conkey FROM pg_constraint WHERE conname ='ft_region_pkey'; conname | contype | consoft | conopt | conindid | conkey ----------------+---------+---------+--------+----------+-------- ft_region_pkey | p | t | t | 0 | {1} (1 row) 删除信息约束: 1 2 3 4 5 6 ALTER FOREIGN TABLE ft_region DROP CONSTRAINT ft_region_pkey RESTRICT; SELECT conname, contype, consoft, conindid, conkey FROM pg_constraint WHERE conname ='ft_region_pkey'; conname | contype | consoft | conindid | conkey ---------+---------+---------+----------+-------- (0 rows) 添加一个唯一信息约束: 1 ALTER FOREIGN TABLE ft_region ADD CONSTRAINT constr_unique UNIQUE(R_REGIONKEY) NOT ENFORCED; 删除唯一信息约束: 1 2 3 4 5 6 ALTER FOREIGN TABLE ft_region DROP CONSTRAINT constr_unique RESTRICT; SELECT conname, contype, consoft, conindid, conkey FROM pg_constraint WHERE conname ='constr_unique'; conname | contype | consoft | conindid | conkey ---------+---------+---------+----------+-------- (0 rows) 添加一个唯一信息约束: 1 2 3 4 5 6 7 ALTER FOREIGN TABLE ft_region ADD CONSTRAINT constr_unique UNIQUE(R_REGIONKEY) NOT ENFORCED disable query optimization; SELECT relname,relhasindex FROM pg_class WHERE oid='ft_region'::regclass; relname | relhasindex ------------------------+------------- ft_region | f (1 row) 删除唯一信息约束: 1 ALTER FOREIGN TABLE ft_region DROP CONSTRAINT constr_unique CASCADE;
  • 示例2 通过HDFS只写外表,将TPC-H benchmark测试数据表region中的数据导出至HDFS文件系统的/user/hive/warehouse/mppdb.db/regin_orc/目录下。 创建HDFS SERVER,对应的foreign data wrapper为HDFS_FDW或者DFS_FDW,同示例一。 创建HDFS只写外表。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE FOREIGN TABLE ft_wo_region ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT ) SERVER hdfs_server OPTIONS ( FORMAT 'orc', encoding 'utf8', FOLDERNAME '/user/hive/warehouse/mppdb.db/regin_orc/' ) WRITE ONLY; 通过只写外表向HDFS文件系统写入数据。 1 INSERT INTO ft_wo_region SELECT * FROM region;
  • 注意事项 HDFS外表与OBS外表分为只读外表和只写外表,只读外表用于查询操作,只写外表可以将 GaussDB (DWS)中的数据导出到分布式文件系统中。 此方式支持ORC、TEXT、 CS V、CARBONDATA、PARQUET和JSON格式的导入查询,OBS外表支持ORC、CSV和TEXT格式的导出。HDFS外表仅支持ORC格式的导出。 该方式需要用户手动创建外部服务器,具体请参见CREATE SERVER。 若手动创建Server时指定foreign data wrapper为HDFS_FDW或者DFS_FDW,创建只读外表时需DISTRIBUTE BY子句指定分布方式。
  • 功能描述 在当前数据库创建一个HDFS或OBS外表,用来访问存储在HDFS或者OBS分布式集群文件系统上的结构化数据。也可以导出ORC格式数据到HDFS或者OBS上。 数据存储在OBS:数据存储和计算分离,集群存储成本低,存储量不受限制,并且集群可以随时删除,但计算性能取决于OBS访问性能,相对HDFS有所下降,建议在数据计算不频繁场景下使用。 数据存储在HDFS:数据存储和计算不分离,集群成本较高,计算性能高,但存储量受磁盘空间限制,删除集群前需将数据导出保存,建议在数据计算频繁场景下使用。 实时数仓(单机部署)暂不支持HDFS外表。 实时数仓(单机部署)8.2.0及以上集群版本支持OBS外表,但需要指定Server的foreign data wrapper为DFS_FDW。
  • 语法格式 创建外表。 1 2 3 4 5 6 7 8 9 10 11 12 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name [ { [CONSTRAINT constraint_name] NULL | [CONSTRAINT constraint_name] NOT NULL | column_constraint [...]} ] | table_constraint [, ...]} [, ...] ] ) SERVER server_name OPTIONS ( { option_name ' value ' } [, ...] ) [ {WRITE ONLY | READ ONLY}] DISTRIBUTE BY {ROUNDROBIN | REPLICATION} [ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ; 其中column_constraint为: 1 2 3 [CONSTRAINT constraint_name] {PRIMARY KEY | UNIQUE} [NOT ENFORCED [ENABLE QUERY OPTIMIZATION | DISABLE QUERY OPTIMIZATION] | ENFORCED] 其中table_constraint为: 1 2 3 [CONSTRAINT constraint_name] {PRIMARY KEY | UNIQUE} (column_name) [NOT ENFORCED [ENABLE QUERY OPTIMIZATION | DISABLE QUERY OPTIMIZATION] | ENFORCED]
  • 信息约束(Informational Constraint) 在GaussDB(DWS)中,数据的约束完全由使用者保证,数据源数据能够严格遵守某种信息约束条件,能够加速对已经具有这种约束特征数据的查询。目前外表不支持索引,所以采取使用Informational Constraint信息优化Plan,提高查询性能。 建立外表信息约束的约束条件: 只有用户保证表中的其中一列的非空值具有唯一性时才可以建立Informational Constraint,否则查询结果将与期望值不同。 GaussDB(DWS)的Informational Constraint只支持PRIMARY KEY和UNIQUE两种约束。 GaussDB(DWS)的Informational Constraint支持NOT ENFORCED属性,不支持ENFORCED属性。 一个表上的多列可以分别建立UNIQUE类型的Informational Constraint,但是PRIMARY KEY一个表中只能建立一个。 一个表的一列上可以建立多个Informational Constraint(由于一个列上有多个约束和一个的作用一致,所以不建议一个列上建立多个Informational Constraint),但是Primary Key类型只能建立一个。 不支持COMMENT。 不支持多列组合约束。 ORC格式只写外表不支持同一个集群不同CN向同一外表并发导出。 ORC格式只写外表的目录,只能用于GaussDB(DWS)的单个外表的导出目录,不能用于多个外表,并且其他组件不能向此目录写入其他文件。
  • 示例1 在HDFS通过HIVE导入TPC-H benchmark测试数据表part表及region表。part表的文件路径为/user/hive/warehouse/partition.db/part_4,region表的文件路径为/user/hive/warehouse/mppdb.db/region_orc11_64stripe/。 创建HDFS_Server,对应的foreign data wrapper为HDFS_FDW或者DFS_FDW。 1 CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000',hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop',type'HDFS'); 在可选项options里面写入了HDFS集群对应的NameNode的IP地址及端口号。具体端口号请在 MRS -HDFS服务配置中搜索参数“dfs.namenode.rpc.port”查看。本示例假设端口号为25000。 ‘10.10.0.100:25000,10.10.0.101:25000’中列出了两组NameNode的地址及端口号,分别表示HDFS的主NameNode及备NameNode,这里推荐使用该种主备方式填写。两组参量中间使用“,”进行分割。 创建HDFS外表。表关联的HDFS server为hdfs_server,表ft_region对应的HDFS服务器上的文件格式为‘orc’,在HDFS文件系统上对应的文件目录为'/user/hive/warehouse/mppdb.db/region_orc11_64stripe/'。 创建不包含分区列的HDFS外表: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE FOREIGN TABLE ft_region ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT ) SERVER hdfs_server OPTIONS ( FORMAT 'orc', encoding 'utf8', FOLDERNAME '/user/hive/warehouse/mppdb.db/region_orc11_64stripe/' ) DISTRIBUTE BY roundrobin; 创建包含分区列的HDFS外表: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE FOREIGN TABLE ft_part ( p_partkey int, p_name text, p_mfgr text, p_brand text, p_type text, p_size int, p_container text, p_retailprice float8, p_comment text ) SERVER hdfs_server OPTIONS ( FORMAT 'orc', encoding 'utf8', FOLDERNAME '/user/hive/warehouse/partition.db/part_4' ) DISTRIBUTE BY roundrobin PARTITION BY (p_mfgr) AUTOMAPPED; GaussDB(DWS)支持2种文件指定方式:通过关键字filenames指定和通过foldername指定。推荐通过使用foldername进行指定。关键字distribute指定了表ft_region的存储分布方式。 查看创建的外表: 1 2 3 4 5 6 7 8 9 10 11 SELECT * FROM pg_foreign_table WHERE ftrelid='ft_region'::regclass; ftrelid | ftserver | ftwriteonly | ftoptions ---------+----------+-------------+------------------------------------------------------------------------------ 16510 | 16509 | f | {format=orc,foldername=/user/hive/warehouse/mppdb.db/region_orc11_64stripe/} (1 row) select * from pg_foreign_table where ftrelid='ft_part'::regclass; ftrelid | ftserver | ftwriteonly | ftoptions ---------+----------+-------------+------------------------------------------------------------------ 16513 | 16509 | f | {format=orc,foldername=/user/hive/warehouse/partition.db/part_4} (1 row)
  • 示例 创建外表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
  • 参数概览 创建外表语法提供了多个参数,常用参数分类如下。 必需参数 table_name column_name type_name SERVER gsmpp_server access_key secret_access_key OPTIONS参数 外表的数据源位置参数 location 临时安全凭证参数(8.2.0及以上集群版本支持) security_token 数据格式参数 format header(仅支持CSV格式) delimiter quote(仅支持CSV格式) escape (仅支持CSV格式) null noescaping(仅支持TEXT格式) encoding eol bom(仅支持CSV格式) 容错性参数 fill_missing_fields ignore_extra_data compatible_illegal_chars obs_null_file PER NODE REJECT LIMIT 'val... LOG INTO error_table_name WITH error_table_name 性能优化参数 file_split_threshold(仅支持TEXT格式)
  • 注意事项 这种方式仅支持TEXT和CSV格式,并且需要额外指定OBS连接信息。对于OBS上的ORC、CARBONDATA、PARQUET等格式数据,不适用这种方式,请参考CREATE FOREIGN TABLE (SQL on OBS or Hadoop)。 创建的外表分为只读外表(READ ONLY)和只写外表(WRITE ONLY)。缺省为只读外表。数据导入集群时,请将外表设为READ ONLY;导出时,请设为WRITE ONLY。 外表由命令执行者所有; OBS外表不需要显式指定分布方式,默认支持ROUNDROBIN分布方式; 所创建外表只对信息约束(Informational Constraint)约束生效。 OBS导入导出数据时,不支持中文路径。
  • 语法格式 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'] ;
  • 示例 创建外表customer_ft,用来以TEXT格式导入GDS服务器10.10.123.234上的数据: 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 CREATE FOREIGN TABLE customer_ft ( c_customer_sk integer , c_customer_id char(16) , c_current_cdemo_sk integer , c_current_hdemo_sk integer , c_current_addr_sk integer , c_first_shipto_date_sk integer , c_first_sales_date_sk integer , c_salutation char(10) , c_first_name char(20) , c_last_name char(30) , c_preferred_cust_flag char(1) , c_birth_day integer , c_birth_month integer , c_birth_year integer , c_birth_country varchar(20) , c_login char(13) , c_email_address char(50) , c_last_review_date char(10) ) SERVER gsmpp_server OPTIONS ( location 'gsfs://10.10.123.234:5000/customer1*.dat', FORMAT 'TEXT' , DELIMITER '|', encoding 'utf8', mode 'Normal') READ ONLY; 创建外表foreign_HR_staffS_ft,用来以TEXT格式导入GDS服务器192.168.0.90和192.168.0.91上的数据,导入过程错误信息将记录到err_HR_staffS中。本次数据导入允许出现的数据格式错误个数为2。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE FOREIGN TABLE foreign_HR_staffS_ft ( staff_ID NUMBER(6) , FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4) ) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5000/* | gsfs://192.168.0.91:5000/*', format 'TEXT', delimiter E'\x08', null '',reject_limit '2') WITH err_HR_staffS_ft; 建立外表,用来以CSV格式导入input_data目录下存放在各个节点名文件下的所有文件。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE FOREIGN TABLE foreign_HR_staffS_ft1 ( staff_ID NUMBER(6) , FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4) ) SERVER gsmpp_server OPTIONS (location 'file:///input_data/*', format 'csv', quote E'\x08', mode 'private', delimiter ',') WITH err_HR_staffS_ft1; 建立外表,用来以CSV格式导出数据到output_data目录下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE FOREIGN TABLE foreign_HR_staffS_ft2 ( staff_ID NUMBER(6) , FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4) ) SERVER gsmpp_server OPTIONS (location 'file:///output_data/', format 'csv', quote E'\x08', delimiter '|', header 'on') WRITE ONLY;
  • 参数概览 创建外表语法提供了多个参数,常用参数分类如下。 必需参数 table_name column_name type_name SERVER gsmpp_server OPTIONS可选参数 外表的数据源位置参数location 数据格式参数 format header(仅支持CSV,FIXED格式) fileheader(仅支持CSV,FIXED格式) out_filename_prefix delimiter quote(仅支持CSV格式) escape(仅支持CSV格式) null noescaping(仅支持TEXT格式) encoding dataencoding (仅支持latin1数据库) eol conflict_delimiter file_type auto_create_pipe del_pipe gds_compress preserve_blanks(仅支持FIXED格式) 容错性参数 fill_missing_fields ignore_extra_data reject_limit compatible_illegal_chars replace_illegal_chars 性能参数 file_sequence 可选参数 WITH error_table_name LOG INTO error_table_name REMOTE LOG 'name' PER NODE REJECT LIMIT 'value'
  • 语法格式 1 2 3 4 5 6 7 8 9 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name POSITION(offset,length) | LIKE source_table } [, ...] ] ) SERVER gsmpp_server OPTIONS ( { option_name ' value ' } [, ...] ) [ { WRITE ONLY | READ ONLY }] [ WITH error_table_name | LOG INTO error_table_name] [REMOTE LOG 'name'] [PER NODE REJECT LIMIT 'value'] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ];
  • 示例 创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK): 1 CREATE DATABASE music ENCODING 'GBK' template = template0; 创建数据库music2,并指定所有者为jim: 1 CREATE DATABASE music2 OWNER jim; 用模板template0创建数据库music3,并指定所有者为jim: 1 CREATE DATABASE music3 OWNER jim TEMPLATE template0; 创建兼容ORA格式的数据库: 1 CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'ORA';
  • 语法格式 1 2 3 4 5 6 7 8 9 CREATE DATABASE database_name [ [ WITH ] { [ OWNER [=] user_name ] | [ TEMPLATE [=] template ] | [ ENCODING [=] encoding ] | [ LC_COLLATE [=] lc_collate ] | [ LC_CTYPE [=] lc_ctype ] | [ DBCOMPATIBILITY [=] compatibility_type ] | [ CONNECTION LIMIT [=] connlimit ]}[...] ];
  • 示例 为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 注释。
  • 示例 创建一个分区表: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE tpcds.inventory_p1 ( INV_DATE_SK INTEGER NOT NULL, INV_ITEM_SK INTEGER NOT NULL, INV_WAREHOUSE_SK INTEGER NOT NULL, INV_QUANTITY_ON_HAND INTEGER ) DISTRIBUTE BY HASH(INV_ITEM_SK) PARTITION BY RANGE(INV_DATE_SK) ( PARTITION P1 VALUES LESS THAN(2451179), PARTITION P2 VALUES LESS THAN(2451544), PARTITION P3 VALUES LESS THAN(2451910), PARTITION P4 VALUES LESS THAN(2452275), PARTITION P5 VALUES LESS THAN(2452640), PARTITION P6 VALUES LESS THAN(2453005), PARTITION P7 VALUES LESS THAN(MAXVALUE) ); 创建索引ds_inventory_p1_index1。 1 CREATE INDEX ds_inventory_p1_index1 ON tpcds.inventory_p1 (INV_ITEM_SK) LOCAL; 对表tpcds.inventory_p1进行聚集: 1 CLUSTER tpcds.inventory_p1 USING ds_inventory_p1_index1; 对分区p3进行聚集: 1 CLUSTER tpcds.inventory_p1 PARTITION (p3) USING ds_inventory_p1_index1; 对数据库中可以进行聚集的表进聚集: 1 CLUSTER;
  • 功能描述 根据一个索引对表进行聚簇排序。 CLUSTER指示GaussDB(DWS)基于索引名指定的索引来聚簇由表名指定的表。索引名指定的索引必须已经定义在指定表上。 当对一个表聚簇后,该表将基于索引信息进行物理排序。聚簇是一次性操作:当表被更新之后, 更改的内容不会被聚簇。也就是说,系统不会试图按照索引顺序对新的存储内容及更新记录进行重新聚簇。 在对一个表聚簇之后,GaussDB(DWS)会记录在哪个索引上建立了聚簇。 形式CLUSTER table_name会使用前面所用的同一个索引对表重新聚簇。用户也可以用CLUSTER或ALTER TABLE的SET WITHOUT CLUSTER形式把索引设置为可用于后续的聚簇操作或清除任何之前的设置。 不含参数的CLUSTER会将当前用户所拥有的数据库中的先前做过聚簇的所有表重新聚簇,如果是系统管理员调用,则是所有已被聚簇过的表。 在对一个表进行聚簇的时候,会在其上请求一个ACCESS EXCLUSIVE锁。这样就避免了在CLUSTER完成之前对此表执行其它的操作(包括读写)。
  • 注意事项 只有行存B-tree索引支持CLUSTER操作。 如果用户只是随机访问表中的行,那么表中数据的实际存储顺序是无关紧要的。但是, 如果对某些数据的访问多于其它数据,而且有一个索引将这些数据分组, 那么使用CLUSTER会有所帮助。如果从一个表中请求一定索引范围的值, 或者是一个索引值对应多行,CLUSTER也会有助于应用,因为如果索引标识出第一匹配行所在的存储页,所有其它行也可能已经在同一个存储页里了,这样便节省了磁盘访问的时间,加速了查询。 在聚簇过程中,系统先创建一个按照索引顺序建立的表的临时拷贝,同时也建立表上的每个索引的临时拷贝。因此,需要磁盘上有足够的剩余空间, 至少是表大小和索引大小的和。 由于CLUSTER会记忆聚集信息,可以在第一次的时候手工对表进行聚簇,然后设置一个类似VACUUM的时间,这样就可以周期地自动对表进行聚簇操作。 因为优化器记录着有关表的排序的统计,所以建议在新近聚簇的表上运行ANALYZE。否则,优化器可能会选择很差劲的查询规划。 CLUSTER不允许在事务中执行。 对表执行CLUSTER操作时会触发表重建(表重建过程中会先把数据转储到一个新的数据文件中,重建完成之后会删除原始文件),当表比较大时,重建会消耗较多的磁盘空间。当磁盘空间不足时,要谨慎对待大表CLUSTER操作,防止触发集群只读。
  • 语法格式 对一个表进行聚簇排序。 1 CLUSTER [ VERBOSE ] table_name [ USING index_name ]; 对一个分区进行聚簇排序。 1 CLUSTER [ VERBOSE ] table_name PARTITION ( partition_name ) [ USING index_name ]; 对已做过聚簇的表重新进行聚簇。 1 CLUSTER [ VERBOSE ];
  • 注意事项 不允许对一个已关闭的游标再做任何操作。 一个不再使用的游标应该尽早关闭。 当创建游标的事务用COMMIT或ROLLBACK终止之后,每个不可保持的已打开游标都隐含关闭。 当创建游标的事务通过ROLLBACK退出之后,每个可以保持的游标都将隐含关闭。 当创建游标的事务成功提交,可保持的游标将保持打开,直到执行一个明确的CLOSE或者客户端断开。 GaussDB(DWS)没有明确打开游标的OPEN语句,因为一个游标在使用CURSOR命令定义的时候就打开了。可以通过查询系统视图pg_cursors看到所有可用的游标。
  • 示例 删除数据库template1在dn1和dn2节点上的连接。 1 CLEAN CONNECTION TO NODE (dn1,dn2) FOR DATABASE template1; 删除用户jack在dn1节点上的连接。 1 CLEAN CONNECTION TO NODE (dn1) TO USER jack; 删除在数据库gaussdb上的所有连接。 1 CLEAN CONNECTION TO ALL FORCE FOR DATABASE gaussdb;
  • 参数说明 CHECK 仅在节点列表为TO ALL时可以指定。如果指定该参数,会在清理连接之前检查数据库是否被其他会话连接访问。此参数主要用于DROP DATABASE之前的连接访问检查,如果发现有其他会话连接,则将报错并停止删除数据库。 FORCE 仅在节点列表为TO ALL时可以指定,如果指定该参数,所有和指定dbname和username相关的线程都会收到SIGTERM信号,然后被强制关闭。 COORDINATOR ( nodename [, ... ] ) | NODE ( nodename [, ... ] ) | ALL 删除指定节点上的连接。有三种场景: 删除指定CN上的连接。 删除指定DN上的连接。 删除所有节点上的连接,包括CN和DN。 取值范围:可替换其中的nodename为已存在的节点名。 dbname 删除指定数据库上的连接。如果不指定,则删除所有数据库的连接。 取值范围:已存在数据库名。 username 删除指定用户上的连接。如果不指定,则删除所有用户的连接。 取值范围:已存在的用户。 参数dbname和username必须至少指定一个。
  • 参数说明 IF EXISTS 使用这个选项,如果视图不存在时不会产生错误,仅有会有一个提示信息。 view_name 视图名称,可以用模式修饰。 取值范围:字符串,符合标识符命名规范。 column_name 可选的名字列表,视图的字段名。如果没有给出,字段名取自查询中的字段名。 取值范围:字符串,符合标识符命名规范。 SET/DROP DEFAULT 设置或删除一个列的缺省值,该参数暂无实际意义。 new_owner 视图新所有者的用户名称。 new_name 视图的新名称。 new_schema 视图的新模式。 view_option_name [ = view_option_value ] 该子句为视图指定一个可选的参数。 目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。 取值范围:boolean类型,TRUE、FALSE。 REBUILD 该子句用于视图解耦,可使用已保存的原始语句重新创建视图,恢复依赖关系。REBUILD注意事项如下: 重建视图会从当前视图开始,依次向后级联刷新与其关联的所有视图,如果其依赖的前向视图也为不可用状态,会触发自动重建。 不支持对有依赖关系的临时表及临时视图的解耦DROP,可以对没有依赖关系的临时视图进行REBUILD操作。 支持视图模式名称及视图名称的修改,REBUILD按照最新的名称重建,但是query部分保留原始定义。 基表字段类型仅支持大类(字符型、数字型、时间类型等)范围内的修改;当基表添加字段时,视图不会置为无效,且定义不变。 无效视图备份时以注释形式导出,恢复时需要自行手动处理。 GUC参数view_independent设置为on时,支持视图自动重建。 以下场景会触发上层级联视图无效: DROP TABLE/VIEW RENAME TABLE/VIEW ALTER TABLE DROP COLUMN ALTER TABLE CHANGE/ALTER COLUMN TYPE ALTER TABLE CHANGE/ALTER COLUMN NAME ALTER TABLE/VIEW NAMESPACE ALTER TABLE/VIEW RENAME ONLY 控制视图重建的范围,只重建视图及其所依赖的视图。当view_independent设置为on时,此功能可正常使用。
  • 示例 修改视图名称: 1 ALTER VIEW tpcds.customer_details_view_v1 RENAME TO customer_details_view_v2; 修改视图名称,新视图名前带有原视图所在的schema名: 1 ALTER VIEW tpcds.customer_details_view_v1 RENAME TO tpcds.customer_details_view_v2; 修改视图所属schema: 1 ALTER VIEW tpcds.customer_details_view_v2 SET schema public; 重建视图: 1 ALTER VIEW public.customer_details_view_v2 REBUILD; 重建依赖视图: 1 ALTER VIEW ONLY public.customer_details_view_v2 REBUILD;
  • 语法格式 设置视图列的默认值。 1 2 ALTER VIEW [ IF EXISTS ] view_name ALTER [ COLUMN ] column_name SET DEFAULT expression; 取消列视图列的默认值。 1 2 ALTER VIEW [ IF EXISTS ] view_name ALTER [ COLUMN ] column_name DROP DEFAULT; 修改视图的所有者。 1 2 ALTER VIEW [ IF EXISTS ] view_name OWNER TO new_owner; 重命名视图,支持新视图名前带有原视图所在的schema名,不支持同时修改schema名。 1 2 3 4 ALTER VIEW [ IF EXISTS ] view_name RENAME TO new_name; ALTER VIEW [ IF EXISTS ] view_name RENAME TO schema.new_name; 设置视图的所属模式。 1 2 ALTER VIEW [ IF EXISTS ] view_name SET SCHEMA new_schema; 设置视图的选项。 1 2 ALTER VIEW [ IF EXISTS ] view_name SET ( { view_option_name [ = view_option_value ] } [, ... ] ); 重置视图的选项。 1 2 ALTER VIEW [ IF EXISTS ] view_name RESET ( view_option_name [, ... ] );
共100000条