华为云用户手册

  • 包年/包月资源 对于包年/包月计费模式的资源,例如CodeArts Repo的包年/包月套餐,用户在购买时会一次性付费,服务将在到期后自动停止使用。 如果在计费周期内不再使用包年/包月 代码托管服务 ,您可以执行退订操作。代码托管服务套餐、存储容量扩展支持退订。系统将根据资源是否属于五天无理由退订、是否使用代金券和折扣券等条件返还一定金额到您的账户。详细的退订规则请参见云服务退订规则概览。 如果您已开启“自动续费”功能,为避免继续产生费用,请在自动续费扣款日(默认为到期前7日)之前关闭自动续费。
  • 统一包年/包月代码托管服务的到期日 统一到期日是指通过续费将包年/包月实例的到期日统一固定为一个月的某一天。 如果您购买的代码托管服务套餐、存储容量扩展的到期日不同,可以将到期日统一设置到固定一个日期,便于日常管理和续费。 资源A的到期日为04月17日,如续费一个月,续费至统一到期日后的到期时间为06月01日。设置统一到期日的实际续费时长=当前续费时长(1个月)+续费至统一到期日需要补齐的时长(05月16日~06月01日,14天)。 资源B的到期日为05月08日,如续费一个月,续费至统一到期日后的到期时间为07月01日。设置统一到期日的实际续费时长=当前续费时长(1个月)+续费至统一到期日需要补齐的时长(05月08日~07月01日,24天)。 更多关于统一到期日的规则请参见如何设置统一到期日。
  • 资源扩展续费 当您的代码仓存储用量已达上限,代码托管服务首页会提示您进行存储容量扩容。单击“扩容”,即可跳转到“购买CodeArts资源扩展”页面,单击“续费”,根据下表填写参数。 当您的代码托管存储容量到达上限,您需选择资源扩展续费。 表1 资源扩展说明 类型 说明 计费模式 默认为“包年/包月”,不可选。 区域 选择代码仓库所在区域。如“北京一”。 产品 选择“存储扩展”。 存储容量 购买10GB起购,步长10GB,最大1000GB。 购买时长 您可选择1-9个月、1年、2年、3年。购买周期越长,折扣越大。 自动续费 根据自己的需求选择是否勾选自动续费。
  • 续费方式 CodeArts Repo包年/包月套餐续费相关功能如表1所示。 表1 续费方式 功能 说明 手动续费 CodeArts Repo包年/包月套餐从购买到被自动删除之前,您可以随时在CodeArts Repo控制台为代码托管服务续费,以延长代码托管服务的使用时间。 自动续费 开通自动续费后,代码托管服务会在每次到期前自动续费,避免因忘记手动续费而导致资源被自动删除。 在使用CodeArts Repo包年/包月套餐生命周期的不同阶段,您可以根据需要选择一种方式进行续费,具体如图1所示。 图1 代码托管服务生命周期 代码托管服务从购买到到期前,处于正常运行阶段,资源状态为“运行中”。 到期后,资源状态变为“已过期”。 到期未续费时,代码托管服务首先会进入宽限期,宽限期到期后仍未续费,资源状态变为“已冻结”。 当您处于冻结状态,将会冻结仓库。详情请参考仓库冻结功能约束。 超过宽限期仍未续费将进入保留期,如果保留期内仍未续费,资源或数据将被自动删除。 华为云根据客户等级定义了不同客户的宽限期和保留期时长。 在代码托管服务到期前均可开通自动续费,到期前7日凌晨3:00首次尝试自动续费,如果扣款失败,每天凌晨3:00尝试一次,直至代码托管服务到期或者续费成功。到期前7日自动续费扣款是系统默认配置,您也可以根据需要修改此扣款日。
  • 计费示例 假设您在2023/03/08 15:50:04购买了代码托管服务基础版套餐。购买时长为一个月,并在到期前手动续费1个月,则: 第一个计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59。 第二个计费周期为:2023/04/08 23:59:59 ~ 2023/05/08 23:59:59。 您需要为每个计费周期预先付费,资源扩展计费公式为单价*用户数*购买时长。
  • 代码托管存储容量扩展 表1 代码托管存储容量扩展 计费方式 包年/包月 适用场景 当您购买的CodeArts套餐资源存储容量不满足实际使用需求时,可购买存储容量扩展。 计费项 存储容量。 购买限制 购买代码托管存储扩展前,须完成代码托管服务基础版及以上规格套餐的购买或已购买CodeArts整体套餐。 代码托管存储容量购买10GB起购,步长10GB,最大1000GB。 计费公式 单价*存储容量*使用时长。 计费周期 根据购买时长确定(以GMT+08:00时间为准)。一个计费周期的起点是您开通或续费代码托管存储容量扩展的时间(精确到秒),终点则是到期日的23:59:59。 例如,您在2023/03/08 15:50:04购买时长为一个月的代码托管存储容量扩展,则其计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59。 变更配置 代码托管存储容量扩展支持变更存储容量,可增加或减少存储容量。变更时系统将按照如下规则为您计算变更费用。 资源升配:变更后的存储容量高于变更前,此时您需要支付新老配置的差价。 资源降配:变更后的存储容量低于变更前,此时华为云会将新老配置的差价退给您。 到期后影响 代码托管存储容量扩展到期未续费时,已购代码托管存储容量扩展将失效。
  • 到期后影响 CodeArts Repo包年/包月 图1描述了代码托管服务套餐中所包含的代码托管服务资源在各个阶段的状态。购买后,在计费周期内各服务可正常使用,此阶段为有效期;套餐到期而未续费时,将陆续进入宽限期和保留期。 图1 代码托管服务套餐资源生命周期 到期预警 代码托管服务套餐在到期前第7天内,系统将向用户推送到期预警消息。预警消息将通过邮件、短信和站内信的方式通知到华为云账号的创建者。 到期后影响 当您的代码托管服务套餐到期未续费,首先会进入宽限期,套餐将显示“已过期”。宽限期内您可以正常访问代码托管服务。 如果您在宽限期内仍未续费代码托管服务套餐,那么就会进入保留期,套餐状态变为“冻结”,您将无法对处于保留期的包年/包月资源执行任何操作。 华为云根据客户等级定义了不同客户的宽限期和保留期时长。 关于充值的详细操作请参见账户充值。 当您处于冻结状态,将会冻结仓库。具体可查看仓库冻结功能约束章节。
  • 计费示例 CodeArts Repo包年/包月计费示例 假设您在2023/03/08 15:50:04购买了CodeArts Repo基础版套餐。购买时长为一个月,并在到期前手动续费1个月,则: 第一个计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59。 第二个计费周期为:2023/04/08 23:59:59 ~ 2023/05/08 23:59:59。 当您购买的CodeArts Repo套餐的存储容量不足时,可在资源扩展中购买更多的存储容量。
  • 变更配置后对计费影响 CodeArts Repo包年/包月套餐 当前代码托管服务套餐不满足您的业务需要时,您可以在代码托管控制台发起变更操作。 变更操作可选择“即时变更”或“续费变更”。 即时变更:变更操作在当前的套餐周期内生效,变更时系统将按照如下规则为您计算变更费用。 资源升配:变更后的套餐价格高于变更前价格,此时您需要支付新老配置的差价。 资源降配:变更后的套餐价格低于变更前价格,此时华为云会将新老配置的差价退给您。 续费变更:即购买新套餐,在当前套餐到期后,新套餐自动生效。 资源降配可能会影响功能特性的使用,通常不建议您这样操作。这里以即时变更-资源升配且无任何优惠的场景为例,假设您在2023/04/05购买了代码托管服务基础版,购买时长为1个月,计划在2023/04/15变更套餐版本为代码托管服务专业版。计算公式如下:升配费用=新配置价格*剩余周期-旧配置价格*剩余周期 公式中的剩余周期为每个自然月的剩余天数/对应自然月的最大天数。
  • 计费周期 CodeArts Repo包年/包月计费周期 CodeArts Repo计费周期是根据您购买的时长来确定的(以GMT+08:00时间为准)。一个计费周期的起点是您开通或续费套餐的时间(精确到秒),终点则是到期日的23:59:59。例如,如果您在2023/03/08 15:50:04购买时长为一个月代码托管服务套餐,那么其计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59。
  • 计费模式概述 代码托管服务采用包年/包月套餐计费模式,提供CodeArts Repo套餐和资源扩展,以满足不同场景下用户需求。 包年/包月套餐:一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大。当您购买的CodeArts Repo套餐的存储容量不足时,可在资源扩展中购买更多的存储容量。 资源扩展:提供存储容量扩展包。购买资源扩展前,须购买CodeArts Repo基础版及以上规格套餐。当您购买的CodeArts Repo套餐的存储容量不足时,可在资源扩展中购买更多的存储容量。 父主题: 计费模式
  • CBS委托授权失败怎么处理? CBS委托授权失败,是因为当前操作的用户子账户没有被授予“Security Administrator”权限导致。详细说明,如下所示: 华为云主账号默认拥有admin用户组权限,admin用户组是拥有所有操作权限的用户组,已默认包含“Security Administrator”权限,所以不会出现因为权限不足而导致CBS委托授权失败的问题。 由华为云主账号创建的 IAM 用户,如果没有被授予“Security Administrator”权限,则CBS委托授权失败,需参考下述操作添加“Security Administrator”权限。 创建用户组并授权 使用华为云主账号登录IAM控制台,创建用户组并授予“Security Administrator”权限。 将IAM用户加入用户组 使用华为云主账号登录IAM控制台,找到IAM用户,并将其加入1中创建的用户组。 父主题: 智能交互
  • 示例7 通过外表读取 DLI 多版本外表。DLI多版本外表示例仅8.1.1及以上版本支持。 创建dli_server,对应的foreign data wrapper为DFS_FDW。 1 2 3 4 5 6 7 8 9 CREATE SERVER dli_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( ADDRESS 'obs.cn-north-1.myhuaweicloud.com', AC CES S_KEY 'xxxxxxxxx', SECRET_ACCESS_KEY 'yyyyyyyyyyyyy', TYPE 'DLI', DLI_ADDRESS 'dli.example.com', DLI_ACCESS_KEY 'xxxxxxxxx', DLI_SECRET_ACCESS_KEY 'yyyyyyyyyyyyy' ); ADDRESS是OBS的终端节点(Endpoint)。DLI_ADDRESS是DLI的终端节点(Endpoint),请根据实际替换。 ACCESS_KEY和SECRET_ACCESS_KEY是云账号体系访问OBS服务的密钥。请根据实际替换。 DLI_ACCESS_KEY和DLI_SECRET_ACCESS_KEY是云账号体系访问DLI服务的密钥。请根据实际替换。 TYPE表示创建的Server为DLI Server。请保持DLI取值不变。 创建访问DLI多版本的OBS外表customer_address,不包含分区列,表关联的DLI服务器为dli_server。其中project_id为xxxxxxxxxxxxxxx,dli上的database_name为database123,需要访问的table_name为table456,根据实际替换。 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 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 customer_address ( ca_address_sk integer not null, ca_address_id char(16) not null, ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(36,33) , ca_location_type char(20) ) SERVER dli_server OPTIONS ( FORMAT 'ORC', ENCODING 'utf8', DLI_PROJECT_ID 'xxxxxxxxxxxxxxx', DLI_DATABASE_NAME 'database123', DLI_TABLE_NAME 'table456' ) DISTRIBUTE BY roundrobin; 通过外表查询DLI多版本表的数据。 1 2 3 4 5 SELECT COUNT(*) FROM customer_address; count ------- 20 (1 row)
  • 示例6 通过外表读取OBS上的json数据。 OBS上有如下json文件,json对象中存在嵌套、数组,部分对象的某些字段缺失,部分对象name重复。 {"A" : "simple1", "B" : {"C" : "nesting1"}, "D" : ["array", 2, {"E" : "complicated"}]} {"A" : "simple2", "D" : ["array", 2, {"E" : "complicated"}]} {"A" : "simple3", "B" : {"C" : "nesting3"}, "D" : ["array", 2, {"E" : "complicated3"}]} {"B" : {"C" : "nesting4"},"A" : "simple4", "D" : ["array", 2, {"E" : "complicated4"}]} {"A" : "simple5", "B" : {"C" : "nesting5"}, "D" : ["array", 2, {"E" : "complicated5"}]} 创建obs_server,对应的foreign data wrapper为DFS_FDW。 1 2 3 4 5 6 CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( ADDRESS 'obs.cn-north-1.myhuaweicloud.com', ACCESS_KEY 'xxxxxxxxx', SECRET_ACCESS_KEY 'yyyyyyyyyyyyy', TYPE 'OBS' ); ADDRESS是OBS的终端节点(Endpoint),请根据实际替换。也是使用region参数,通过指定regionCode在region_map文件中查找对应的 域名 。 ACCESS_KEY和SECRET_ACCESS_KEY是云账号体系访问密钥。请根据实际替换。 TYPE表示创建的Server为OBS Server。请保持OBS取值不变。 创建OBS外表json_f ,定义字段名,以d#2_e为例,从命名可以看出该字段是数组d的第二个元素里嵌套的e对象。表关联的OBS服务器为obs_server。foldername为外表中数据源文件目录,即表数据目录在OBS上对应的文件目录。 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 9 10 11 CREATE FOREIGN TABLE json_f ( a VARCHAR(10), b_c TEXT, d#1 INTEGER, d#2_e VARCHAR(30) )SERVER obs_server OPTIONS ( foldername '/xxx/xxx/', format 'json', encoding 'utf8', force_mapping 'true' )distribute by roundrobin; 查询外表json_f。由于容错性参数force_mapping默认打开,json对象缺失的字段会填NULL;json对象name重复的以最后一次出现的name为准。 1 2 3 4 5 6 7 8 9 SELECT * FROM json_f; a | b_c | d#1 | d#2_e ---------+----------+-----+-------------- simple1 | nesting1 | 2 | complicated1 simple2 | | 2 | complicated2 simple3 | nesting3 | 2 | complicated3 simple4 | nesting4 | 2 | complicated4 repeat | nesting5 | 2 | complicated5 (5 rows)
  • 示例4(仅存算分离3.0版本支持) 通过partsupp外表往obs文件系统读取数据。 创建obs server。 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 了解更多创建Server语法请参见CREATE SERVER。 1 2 3 4 5 6 CREATE SERVER obs_srv FOREIGN DATA WRAPPER dfs_fdw OPTIONS ( address 'obs.cn-north-1.myhuaweicloud.com', type 'obs', access_key 'xxx', secret_access_key 'xxx' ); 创建obs外表partsupp,使用disk cache中的冷缓存。 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE FOREIGN TABLE PARTSUPP ( PS_PARTKEY BIGINT NOT NULL, PS_SUPPKEY BIGINT NOT NULL, PS_AVAILQTY BIGINT NOT NULL, PS_SUPPLYCOST DECIMAL(15,2) NOT NULL, PS_COMMENT VARCHAR(199) NOT NULL ) SERVER obs_srv options ( encoding 'utf-8', format 'parquet', foldername 'xxx', cache_policy 'NONE' ) READ ONLY DISTRIBUTE BY ROUNDROBIN; 通过外表partsupp往obs上读取数据。 1 SELECT * FROM PARTSUPP;
  • 示例5 关于包含信息约束(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/region_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/region_orc/' ) WRITE ONLY; 通过只写外表向HDFS文件系统写入数据。 1 INSERT INTO ft_wo_region SELECT * FROM region;
  • 示例3(仅存算分离3.0版本支持) 通过HDFS多级分区只写外表将TPC-H benchmark测试数据表region表中的数据导出HDFS文件系统的/user/hive/warehouse/mppdb.db/region_orc/目录下。 创建HDFS外表,对应的foreign data wrapper为HDFS_FDW或者DFS_FDW,同示例1。 创建HDFS多级分区只写外表。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE FOREIGN TABLE ft_wo_region_partition ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT ) SERVER hdfs_server OPTIONS ( FORMAT 'orc', encoding 'utf8', FOLDERNAME '/user/hive/warehouse/mppdb.db/region_orc/' ) WRITE ONLY PARTITION BY (R_REGIONKEY, R_NAME); 通过只写外表向HDFS文件系统写入数据。 1 INSERT INTO ft_wo_region_partition SELECT * FROM region;
  • 注意事项 HDFS外表与OBS外表分为只读外表、只写外表和读写外表,只读外表用于查询操作,只写外表可以将 GaussDB (DWS)中的数据导出到分布式文件系统中,读写外表可以查询和数据导出,其中读写外表仅9.1.0.100及以上版本支持。 此方式支持ORC、TEXT、 CS V、CARBONDATA、PARQUET和JSON格式的导入查询,OBS外表支持ORC、PARQUET(仅存算分离3.0版本支持)格式的导出。HDFS外表支持ORC、PARQUET格式的导出。 该方式需要用户手动创建外部服务器,具体请参见CREATE SERVER。 若手动创建Server时指定foreign data wrapper为HDFS_FDW或者DFS_FDW,创建只读外表时需DISTRIBUTE BY子句指定分布方式。
  • 语法格式 创建外表。 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 | READ WRITE} ] 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)的单个外表的导出目录,不能用于多个外表,并且其他组件不能向此目录写入其他文件。
  • 功能描述 在当前数据库创建一个HDFS或OBS外表,用来访问存储在HDFS或者OBS分布式集群文件系统上的结构化数据。也可以导出ORC和PARQUET格式数据到HDFS或者OBS上。 数据存储在OBS:数据存储和计算分离,集群存储成本低,存储量不受限制,并且集群可以随时删除,但计算性能取决于OBS访问性能,相对HDFS有所下降,建议在数据计算不频繁场景下使用。 数据存储在HDFS:数据存储和计算不分离,集群成本较高,计算性能高,但存储量受磁盘空间限制,删除集群前需将数据导出保存,建议在数据计算频繁场景下使用。 单节点集群(单机部署)暂不支持HDFS外表。 单节点集群(单机部署)8.2.0.100及以上集群版本支持OBS外表,但需要指定Server的foreign data wrapper为DFS_FDW。 以下描述的读写外表,仅存算分离3.0版本支持。
  • 示例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)
  • DISTRIBUTE BY参数使用说明 指定表如何在节点之间分布或者复制。 取值范围: REPLICATION:表的每一行存在所有数据节点(DN)中,即每个数据节点都有完整的表数据。 ROUNDROBIN:表的每一行被轮番地发送给各个DN,因此数据会被均匀地分布在各个DN中。(ROUNDROBIN仅8.1.2及以上版本支持) HASH (column_name ) :对指定的列进行Hash,通过映射,把数据分布到指定DN。 当指定DISTRIBUTE BY HASH (column_name)参数时,创建主键和唯一索引必须包含“ column_name”列。 当被参照表指定DISTRIBUTE BY HASH (column_name)参数时,参照表的外键必须包含“ column_name”列。 如果TO GROUP指定为复制表节点组(8.1.2及以上版本支持),DISTRIBUTE BY必须指定为REPLICATION。如果没有指定DISTRIBUTE BY,创建的表会自动设置为复制表。 单节点集群(单机部署)由于只有单DN,因此分布规则会被忽略,也不支持针对分布规则的修改。 默认值:由GUC参数default_distribution_mode控制。 当default_distribution_mode=roundrobin时,DISTRIBUTE BY的默认值按如下规则选取: 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。 若建表时不包含主键/唯一约束,则选取ROUNDROBIN分布。 当default_distribution_mode=hash时,DISTRIBUTE BY的默认值按如下规则选取: 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。 若建表时不包含主键/唯一约束,但存在数据类型支持作分布列的列,则选取HASH分布,分布列为第一个数据类型支持作分布列的列。 若建表时不包含主键/唯一约束,也不存在数据类型支持作分布列的列,选取ROUNDROBIN分布。 以下数据类型支持作为分布列: INTEGER TYPES:TINYINT,SMALLINT,INT,BIGINT,NUMERIC/DECIMAL CHARACTER TYPES:CHAR,BPCHAR,VARCHAR,VARCHAR2,NVARCHAR2,TEXT DATE/TIME TYPES:DATE,TIME,TIMETZ,TIMESTAMP,TIMESTAMPTZ,INTERVAL,SMALLDATETIME 在建表时,选择分布列和分区键可对SQL查询性能产生重大影响。因此,需要根据一定策略选择合适的分布列和分区键。 选择合适的分布列 对于采用散列(Hash)方式的数据分布表,一个合适的分布列应将一个表内的数据,均匀分散存储在多个DN内,避免出现数据倾斜现象(即多个DN内数据分布不均)。请按照如下原则判定合适的分布列: 判断是否已发生数据倾斜现象。 连接数据库,执行如下语句,查看各DN内元组数目。命令中的斜体部分tablename,请填入待分析的表名。 SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_id FROM tablename GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count DESC; 如果各DN内元组数目相差较大(如相差数倍、数十倍),则表明已发生数据倾斜现象,请按照下面原则调整分布列。 重新选择分布列,可通过ALTER TABLE语句调整分布列,选择原则如下: 分布列的列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。 在满足上面原则的情况下,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。 如果找不到一个合适的分布列,使数据能够均匀分布到各个DN,那么可以考虑使用REPLICATION或ROUNDROBIN的数据分布方式。由于REPLICATION的数据分布方式会在每个DN中存放完整的数据,因此在表较大且找不到合适的分布列时,推荐使用ROUNDROBIN的数据分布方式。(ROUNDROBIN分布方式8.1.2及以上版本支持) 选择合适的分区键 数据分区功能,可根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠)。然后为每个范围创建一个分区,用来存储相应的数据。 调整分区键,使每次查询结果尽可能存储在相同或者最少的分区内(称为“分区剪枝”),通过获取连续I/O大幅度提升查询性能。 实际业务中,经常将时间作为查询对象的过滤条件,因此,可考虑选择时间列为分区键,键值范围可根据总数据量、一次查询数据量调整。
  • TEMPORARY | TEMP参数使用说明 LOCAL/VOLATILE临时表通过每个会话独立的以pg_temp开头的schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg_temp,pg_toast_temp开头的schema。 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的schema为当前会话的pg_temp_开头的schema,则此表会被创建为临时表。 LOCAL临时表的所有相关元数据同普通表类似,都存储在系统表内,而VOLATILE临时表会将除schema外的相关表结构元数据直接存储在内存中。所以相对本地临时表而言,VOLATILE临时表有更多约束: 当前CN或DN重启之后,对应实例上的内存数据丢失,相关volatile临时表会失效。 VOLATILE临时表当前不支持ALTER/GRANT等修改表结构相关操作。 VOLATILE临时表和LOCAL临时表共用一种临时schema,所以在同一session中,VOLATILE临时表和LOCAL临时表不能存在同名表。 VOLATILE临时表信息不存储在系统表内,所以无法通过对系统表执行DML语句查询到VOLATILE相关元数据。 VOLATILE临时表仅支持普通的行存、列存表,不支持delta表、时序表、冷热表。 不支持基于VOLATILE临时表创建视图。 不支持创建临时表时指定tablespace(VOLATILE临时表默认tablespace均为pg_volatile)。 创建VOLATILE临时表时不支持指定约束:CHECK约束、UNIQUE约束、主键约束、触发器约束、EXCLUDE约束、PARTIAL CLUSTER约束。 GLOBAL临时表的所有相关元数据同普通表类似,都存储在系统表内。 GLOBAL临时表与LOCAL临时表不同的是,会话退出时元数据不会删除,但会话的数据会删除。不同会话的数据独立,但共享同一份GLOBAL临时表的元数据。 全局临时表的schema与普通表类似,不是以pg_temp开头的schema,但与LOCAL/VOLATILE临时表不同,所以可以与LOCAL/VOLATILE临时表同名。 全局临时表仅支持普通的行存、列存表,不支持delta表、时序表、冷热表。 不支持操作其他逻辑集群的全局临时表。
  • LIKE参数使用说明 新表与源表之间在创建动作完毕之后是完全无关的。在源表做的任何修改都不会传播到新表中,并且也不可能在扫描源表的时候包含新表的数据。 被复制的列和约束并不使用相同的名字进行融合。如果明确的指定了相同的名字或者在另外一个LIKE子句中,将会报错。 源表上的字段缺省表达式或者ON UPDATE表达式只有在指定INCLUDING DEFAULTS时,才会复制到新表中。缺省是不包含缺省表达式的,即新表中的所有字段的缺省值都是NULL。 源表上的CHECK约束仅在指定INCLUDING CONSTRAINTS时,会复制到新表中,而其他类型的约束永远不会复制到新表中。非空约束总是复制到新表中。此规则同时适用于表约束和列约束。 如果指定了INCLUDING INDEXES,则源表上的索引也将在新表上创建,默认不建立索引。 如果指定了INCLUDING STORAGE,则复制列的STORAGE设置会复制到新表中,默认情况下不包含STORAGE设置。 如果指定了INCLUDING COMMENTS,则源表列、约束和索引的注释会复制到新表中。默认情况下,不复制源表的注释。 如果指定了INCLUDING PARTITION,则源表的分区定义会复制到新表中,同时新表将不能再使用PARTITION BY子句。默认情况下,不拷贝源表的分区定义。 如果指定了INCLUDING RELOPTIONS,则源表的存储参数(即源表的WITH子句)会复制到新表中。默认情况下,不复制源表的存储参数。 WITH中的'PERIOD','TTL'为partition相关参数,LIKE INCLUDING RELOPTIONS不会复制到新表中,若要复制需INCLUDING PARTITION。 如果指定了INCLUDING DISTRIBUTION,则源表的分布信息会复制到新表中,包括分布类型和分布列,同时新表将不能再使用DISTRIBUTE BY子句。默认情况下,不拷贝源表的分布信息。 如果指定了INCLUDING DROPCOLUMNS,则源表被删除的列信息会被复制到新表中。默认情况下,不复制源表的删除列信息。 INCLUDING ALL包含了INCLUDING DEFAULTS、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING PARTITION、INCLUDING RELOPTIONS、INCLUDING DISTRIBUTION和INCLUDING DROPCOLUMNS的内容。 如果指定了EXCLUDING,则表示不包括指定的参数。 如果是OBS冷热表,INCLUDING PARTITION后新表所有分区均为本地热分区。 如果源表包含serial、bigserial、smallserial类型,或者源表字段的默认值是sequence,且sequence属于源表(通过CREATE SEQUENCE ... OWNED BY创建),这些Sequence不会关联到新表中,新表中会重新创建属于自己的sequence。这和之前版本的处理逻辑不同。如果用户希望源表和新表共享Sequence,需要首先创建一个共享的Sequence(避免使用OWNED BY),并配置为源表字段默认值,这样创建的新表会和源表共享该Sequence。 不建议将其他表私有的Sequence配置为源表字段的默认值,尤其是其他表只分布在特定的NodeGroup上,这可能导致CREATE TABLE ... LIKE执行失败。另外,如果源表配置其他表私有的Sequence,当该表删除时Sequence也会连带删除,这样源表的Sequence将不可用。如果用户希望多个表共享Sequence,建议创建共享的Sequence。
  • 注意事项 列存表支持的数据类型请参考列存表支持的数据类型。 创建列存和HDFS分区表的数量建议不超过1000个。 表中的主键约束和唯一约束必须包含分布列。 不支持修改已有表的分布列数据类型。 行存REPLICATION分布表不支持将系统列设置为主键。 如果在建表过程中数据库系统发生故障,系统恢复后可能无法自动清除之前已创建的、大小为0的磁盘文件。此种情况出现概率小,不影响数据库系统的正常运行。 列存表支持PARTIAL CLUSTER KEY、主键和唯一表级约束,不支持外键表级约束。 列存表的字段约束只支持NULL、NOT NULL和DEFAULT常量值。 列存表支持delta表,受表级参数enable_delta控制是否开启,受参数deltarow_threshold控制进入delta表的阈值。不推荐使用列存带Delta表,否则会出现由于来不及merge而导致的磁盘膨胀以及性能劣化等问题。 冷热表仅支持列存分区表,依赖于可用的OBS服务。 冷热表仅支持默认表空间为default_obs_tbs,如需新增obs表空间可联系技术支持。 如需创建列存表,需显式设置orientation属性为column,存算分离版本如需创建本地表(数据全部存储在EVS盘),需显式指定colversion=2.0。 创建表后,不支持通过ALTER TABLE语法将非V3表切换为V3表(即colversion为2.0不支持切为3.0)。 V3表(即colversion=3.0,存算分离表,以下简称V3表)不支持设置delta表和列存二级分区。 V3表不支持设置为Hstore表、冷热表、时序表。 V3表不支持创建全局临时表和临时表,创建的临时表会自动转化为colversion=2.0的临时表。 不建议创建普通表时指定自定义TABLESPACE。 创建行存表时应避免指定COMPRESS压缩属性。 创建HASH分布的表对象时,要确保数据分布均匀(10G以上数据量的表,倾斜率控制在10%以内)。 创建REPLICATION分布的表对象,要确保表数据量控制在100万行以内。 创建HSTORE表时,必须确保数据库GUC参数设置满足以下条件: autovacuum设置为on。 autovacuum_max_workers_hstore取值大于0。 autovacuum_max_workers取值大于autovacuum_max_workers_hstore的取值。 针对存在时间字段的大表(数据量5000万行以上),必须设计成分区表,根据查询特征合理设计分区间隔。 针对有大批量数据增删改的表,索引个数建议控制在3个以内,最多不超过5个。 更多开发设计规范参见总体开发设计规范。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 CREATE [ [ GLOBAL | LOCAL | VOLATILE ] { TEMPORARY | TEMP } | UN LOG GED ] TABLE [ IF NOT EXISTS ] table_name { ({ column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] } [, ... ])| LIKE source_table [ like_option [...] ] } [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ] [ COMPRESS | NOCOMPRESS ] [ DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { HASH ( column_name [,...] ) } } ] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ] [ COMMENT [=] 'text' ]; 其中列约束column_constraint为: 1 2 3 4 5 6 7 8 9 10 11 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | ON UPDATE on_update_expr | COMMENT 'text' | UNIQUE [ NULLS [NOT] DISTINCT | NULLS IGNORE ] index_parameters | PRIMARY KEY index_parameters | REFERENCES reftable [ ( refcolumn ) ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中列的压缩可选项compress_mode为: 1 { DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS } 其中表约束table_constraint为: 1 2 3 4 5 6 [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [NOT] DISTINCT | NULLS IGNORE ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | PARTIAL CLUSTER KEY ( column_name [, ... ] ) } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中like选项like_option为: 1 { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | DISTRIBUTION | DROPCOLUMNS | ALL } 其中索引参数index_parameters为: 1 [ WITH ( {storage_parameter = value} [, ... ] ) ]
  • pg_get_external_schema_table_col(text, text) 描述:获取external schema表的列信息。 入参: 第一个入参为external schema名称,第二个入参为表名称。 返回值类型:setof record 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 SELECT * FROM pg_get_external_schema_table_col('ex_lf', 'test_lf'); col_name | col_type | part_col ------------------------+---------------+---------- field_smallint | smallint | f field_int | int | f field_integer | int | f field_bigint | bigint | f field_float | float | f field_double | double | f field_double_precision | double | f field_decimal | decimal(10,0) | f field_numeric | decimal(10,0) | f field_timestamp | timestamp | f field_date | date | f field_varchar | varchar(5) | f field_char | char(5) | f field_boolean | boolean | f field_string | string | f (15 rows)
  • pg_get_external_schema_table_options(text, text) 描述:获取external schema表的option。 入参: 第一个入参为external schema名称,第二个入参为表名称。 返回值类型:setof record 示例: 1 2 3 4 5 6 7 SELECT * FROM pg_get_external_schema_table_options('ex_lf', 'test_lf'); option_name | option_value -------------+------------------------------------ encoding | utf8 format | parquet foldername | /***/***/*** (3 rows)
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全