华为云用户手册

  • 概述 并行导入将存储在服务器普通文件系统中的数据导入到 GaussDB (DWS)数据库中。暂时不支持将存储在HDFS文件系统上的数据导入GaussDB(DWS)。 并行导入功能通过外表设置的导入策略、导入数据格式等信息来识别数据源文件,利用多DN并行的方式,将数据从数据源文件导入到数据库中,从而提高整体导入性能。如图1所示: CN只负责任务的规划及下发,把数据导入的工作交给了DN,释放了CN的资源,使其有能力处理其他外部请求。 所有DN都参与数据导入,这样可以充分利用各设备的计算能力及网络带宽,提升导入效率。 外表灵活的OPTION设置,有利于在数据入库前对数据做预处理,例如非法字符替换、容错处理等。 图1 数据并行导入示意图 上图中所涉及的相关概念说明如下: CN(Coordinator):GaussDB(DWS)协调节点。在导入场景下,接收到应用或客户端的导入SQL指令后,负责任务的规划及下发到DN。 DN(Datanode):GaussDB(DWS)数据节点。接收CN下发的导入任务,将数据源文件中的数据通过外表写入数据库目标表中。 数据源文件:存有数据的文件。文件中保存的是待导入数据库的数据。 数据服务器:数据源文件所在的服务器称为数据服务器。基于安全考虑,建议数据服务器和GaussDB(DWS)集群处于同一内网。 外表Foreign Table:用于识别数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。是关联数据文件与数据库实表(目标表)的对象。 目标表:数据库中的实表。数据源文件中的数据最终导入到这些表中存储,包括行存表和列存表。
  • GDS并发导入 数据量大,数据存储在多个服务器上时,在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。如图2所示。 图2 多数据服务器并行导入 GDS进程数目不能超过DN数目。如果超过,会出现一个DN连接多个GDS进程的情形,可能会导致部分GDS异常运行。 数据存储在一台数据服务器上时,如果GaussDB(DWS)及数据服务器上的I/O资源均还有可利用空间时,可以采用GDS多线程来支持并发导入。 GDS是根据导入事务并发数来决定服务运行线程数的,也就是说即使启动GDS时设置了多线程,也并不会加速单个导入事务。未做过人为事务处理时,一条INSERT语句就是一个导入事务。 综上,多线程的使用场景如下: 多表并发导入时,采用多线程充分利用资源及提升并发导入效率。 对数据量大的某一事实表的导入进行提速。 将该事实表对应的数据拆分为多个数据文件,通过多外表同时入库的方式实现多线程并发导入。注意需确保每个外表所能读取的数据文件不重复。
  • 删除外表和目标表 (可选)如果执行了导入数据后查询数据,请执行以下命令,删除目标表。 1 DROP TABLE product_info; 当结果显示为如下信息,则表示删除成功。 1 DROP TABLE 执行以下命令,删除外表。 1 DROP FOREIGN TABLE product_info_ext_obs; 当结果显示为如下信息,则表示删除成功。 1 DROP FOREIGN TABLE
  • 删除创建的外部服务器 使用创建外部服务器的用户连接到外部服务器所在的数据库。 在本示例中,使用的是普通用户dbuser在数据库mydatabase中创建了一个外部服务器。用户需要通过GaussDB(DWS)提供的数据库客户端连接数据库。例如,使用gsql客户端的用户,可以通过以下两种方法中的一种进行连接: 如果已经登录了gsql客户端,可以执行以下命令进行切换: 1 \c mydatabase dbuser; 根据提示输入密码。 如果已经登录了gsql客户端,您也可以执行“\q”退出gsql后,再执行以下命令重新进行连接: 1 gsql -d mydatabase -h 192.168.2.30 -U dbuser -p 8000 -r 根据提示输入密码。 删除创建的外部服务器。 执行以下命令进行删除: 1 DROP SERVER obs_server; 返回以下信息表示删除成功: 1 DROP SERVER 查看外部服务器: 1 SELECT * FROM pg_foreign_server WHERE srvname='obs_server'; 返回结果如下所示,表示已经删除成功: 1 2 3 srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions ---------+----------+--------+---------+------------+--------+------------ (0 rows)
  • 删除数据库及其所属的用户 如果您执行了(可选)新建用户及数据库并授予外表权限中的步骤,请参照以下步骤删除数据库及其所属的用户。 删除自定义数据库。 通过GaussDB(DWS)提供的数据库客户端连接默认数据库gaussdb。 如果已经登录了gsql客户端,可以直接执行如下命令进行切换: 先切换到默认数据库: 1 \c gaussdb 根据界面提示输入密码。 执行以下命令,删除自定义数据库: 1 DROP DATABASE mydatabase; 返回以下信息表示删除成功: 1 DROP DATABASE 使用管理员用户,删除本示例中创建的普通用户。 使用数据库管理员用户通过GaussDB(DWS)提供的数据库客户端连接数据库。 如果已经登录了gsgl客户端,可以直接执行如下命令进行切换: 1 \c gaussdb dbadmin 执行以下命令回收创建外部服务器的权限: 1 REVOKE ALL ON FOREIGN DATA WRAPPER dfs_fdw FROM dbuser; 其中FOREIGN DATA WRAPPER的名字只能是dfs_fdw,dbuser为创建SERVER的用户名。 执行以下命令删除用户: 1 DROP USER dbuser; 可使用“\du”命令查询用户,确认用户是否已经删除。
  • 导入数据后查询数据 在GaussDB(DWS)数据库中,创建导入数据的目标表,用于存储导入的数据。 该表的表结构必须与创建外表中创建的外表的表结构保持一致,即字段个数、字段类型要完全一致。 例如,创建一个名为product_info的表,示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 DROP TABLE IF EXISTS product_info; CREATE TABLE product_info ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) with ( orientation = column, compression=middle ) DISTRIBUTE BY HASH (product_id); 执行“INSERT INTO .. SELECT ..”命令从外表导入数据到目标表。 示例: 1 INSERT INTO product_info SELECT * FROM product_info_ext_obs; 若出现以下类似信息,说明数据导入成功。 1 INSERT 0 10 执行SELECT命令,查看从OBS导入到GaussDB(DWS)中的数据。 1 SELECT * FROM product_info; 查询结果显示如原始数据中所示的数据,表示导入成功。查询结果的结尾将显示以下信息: 1 (10 rows)
  • 创建外表 创建外表的语法格式如下: 1 2 3 4 5 6 7 8 9 10 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 dfs_server OPTIONS ( { option_name ' value ' } [, ...] ) DISTRIBUTE BY {ROUNDROBIN | REPLICATION} [ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ; 例如,创建一个名为“product_info_ext_obs”的外表,对语法中的参数按如下描述进行设置: table_name 外表的表名。 表字段定义 column_name:外表中的字段名。 type_name:字段的数据类型。 多个字段用“,”隔开。 外表的字段个数和字段类型,需要与OBS上保存的数据完全一致。 SERVER dfs_server 外表的外部服务器名称,这个server必须存在。外表通过设置外部服务器连接OBS读取数据。 此处应填写为参照创建外部服务器创建的外部服务器名称。 OPTIONS参数 用于指定外表数据的各类参数,关键参数如下所示。 “format”:表示对应的OBS服务上的文件格式,支持“orc”、“carbondata”格式。 “foldername”:必选参数。数据源文件的OBS路径,此处仅需要填写“/桶名/文件夹目录层级/”。 可以先通过OBS上的数据准备中的2获取数据源文件的完整的OBS路径,该路径为OBS服务的终端节点(Endpoint)。 “totalrows”:可选参数。该参数不是导入的总行数。由于OBS上文件可能很多,执行analyze可能会很慢,通过“totalrows”参数,让用户来设置一个预估的值,使优化器能通过这个值做大小表的估计。一般预估值与实际值的数量级差不多时,查询效率较高。 “encoding”:外表中数据源文件的编码格式名称,缺省为utf8。对于OBS外表此参数为必选项。 DISTRIBUTE BY: 这个子句是必须的,对于OBS外表,当前只支持ROUNDROBIN分布方式。 表示外表在从数据源读取数据时,GaussDB(DWS)集群每一个节点随机读取一部分数据,并组成完整数据。 语法中的其他参数 其他参数均为可选参数,用户可以根据自己的需求进行设置,在本例中不需要设置。 根据以上信息,创建外表命令如下所示: 建立不包含分区列的OBS外表,表关联的外部服务器为obs_server,表对应的OBS服务上的文件格式为“orc”,OBS上的数据存储路径为“/mybucket/data/”。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 DROP FOREIGN TABLE IF EXISTS product_info_ext_obs; CREATE FOREIGN TABLE product_info_ext_obs ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER obs_server OPTIONS ( format 'orc', foldername '/mybucket/demo.db/product_info_orc/', encoding 'utf8', totalrows '10' ) DISTRIBUTE BY ROUNDROBIN; 建立包含分区列的OBS外表,product_info_ext_obs外表使用product_manufacturer字段作为分区键,obs/mybucket/demo.db/product_info_orc/路径下有如下分区目录: 分区目录1:product_manufacturer=10001 分区目录2:product_manufacturer=10010 分区目录3:product_manufacturer=10086 ... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 DROP FOREIGN TABLE IF EXISTS product_info_ext_obs; CREATE FOREIGN TABLE product_info_ext_obs ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) , product_manufacturer integer ) SERVER obs_server OPTIONS ( format 'orc', foldername '/mybucket/demo.db/product_info_orc/', encoding 'utf8', totalrows '10' ) DISTRIBUTE BY ROUNDROBIN PARTITION BY (product_manufacturer) AUTOMAPPED;
  • 创建外部服务器 使用即将创建外部服务器的用户去连接其对应的数据库。 在本示例中,将使用(可选)新建用户及数据库并授予外表权限中创建的普通用户dbuser连接其创建的数据库mydatabase 。用户需要通过GaussDB(DWS)提供的数据库客户端连接数据库。 例如,使用gsql客户端的用户可以通过以下两种方法中的一种进行连接: 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户: 1 \c mydatabase dbuser; 根据提示输入密码。 如果尚未登录gsql客户端,或者已经登录了gsql客户端执行“\q”退出gsql后,执行以下命令重新进行连接: 1 gsql -d mydatabase -h 192.168.2.30 -U dbuser -p 8000 -r 根据提示输入密码。 创建外部服务器。 例如,执行以下命令创建外部服务器“obs_server”: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 CREATE SERVER obs_server FOREIGN DATA WRAPPER dfs_fdw OPTIONS ( address 'obs.cn-north-1.myhuaweicloud.com' , AC CES S_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', encrypt 'on', type 'obs' ); 以下为必选参数的说明: 外部服务器名称 允许用户自定义名字。 在本例中指定为“obs_server” 。 FOREIGN DATA WRAPPER fdw_name的名字可以是hdfs_fdw或者dfs_fdw,它在数据库中已经存在。 OPTIONS参数 address 指定OBS服务的终端节点。 address的获取方法如下: 先通过OBS上的数据准备中的2获取OBS路径。 在OBS上查看到的OBS路径,为OBS服务终端节点(Endpoint):obs.example.com。 访问密钥(AK和SK)(必选) GaussDB(DWS)需要通过访问密钥(AK和SK)访问OBS,因此,必须先获取访问密钥。 “access_key”(必选):表示用户的AK信息。 “secret_access_key”(必选):表示用户的SK信息。 获取访问密钥的具体步骤,请参见创建访问密钥(AK和SK)。 type 取值为“obs”,表示dfs_fdw连接的是OBS。 查看外部服务器: 1 SELECT * FROM pg_foreign_server WHERE srvname='obs_server'; 返回结果如下所示,表示已经创建成功: 1 2 3 4 5 6 srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions ------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- obs_server | 24661 | 13686 | | | | {address=xxx.xxx.x.xxx,access_key=xxxxxxxxxxxxxxxxxxxx,type=obs,secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} (1 row)
  • (可选)新建用户及数据库并授予外表权限 如果您将使用普通用户在自定义数据库中创建外部服务器和外表,由于普通用户没有外表权限无法创建,所以,您必须参照以下步骤新建用户和数据库,并授予该用户外表权限。 以下示例,是新建一个普通用户dbuser并创建一个数据库mydatabase,然后使用管理员用户授予dbuser外表权限。 使用数据库管理员通过GaussDB(DWS)提供的数据库客户端连接默认数据库gaussdb。 例如,使用gsql客户端的用户执行下面命令连接数据库: 1 gsql -d gaussdb -h 192.168.2.30 -U dbadmin -p 8000 -W password -r 新建一个普通用户,并用它创建一个数据库。 新建一个具有创建数据库权限的用户dbuser: 1 CREATE USER dbuser WITH CREATEDB PASSWORD 'password'; 切换为新建的用户: 1 SET ROLE dbuser PASSWORD 'password'; 执行以下命令创建数据库: 1 CREATE DATABASE mydatabase; 查询数据库: 1 SELECT * FROM pg_database; 返回结果中有mydatabase的信息表示创建成功: 1 2 3 4 5 6 7 8 9 10 datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility | datacl ------------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+---------------+------------------+-------------------------------------- -------------- template1 | 10 | 0 | C | C | t | t | -1 | 14146 | 1351 | 1663 | ORA | {=c/Ruby,Ruby=CTc/Ruby} template0 | 10 | 0 | C | C | t | f | -1 | 14146 | 1350 | 1663 | ORA | {=c/Ruby,Ruby=CTc/Ruby} gaussdb | 10 | 0 | C | C | f | t | -1 | 14146 | 1352 | 1663 | ORA | {=Tc/Ruby,Ruby=CTc/Ruby,chaojun=C/Ruby,hu obinru=C/Ruby} mydatabase | 17000 | 0 | C | C | f | t | -1 | 14146 | 1351 | 1663 | ORA | (4 rows) 使用管理员用户给普通用户赋予创建外部服务器的权限和使用外表的权限。 使用数据库管理员用户通过GaussDB(DWS)提供的数据库客户端连接新建的数据库。 例如,使用gsql客户端的用户可以直接使用如下语句切换为管理员用户去连接新建的数据库: 1 \c mydatabase dbadmin; 根据提示输入管理员用户密码。 注意,必须先使用管理员用户连接到将要创建外部服务器和使用外表的数据库,再对普通用户进行授权。 默认只有系统管理员才可以创建外部服务器,普通用户需要授权才可以创建,执行以下命令授权: 1 2 GRANT ALL ON SCHEMA public TO dbuser; GRANT ALL ON FOREIGN DATA WRAPPER dfs_fdw TO dbuser; 其中fdw_name的名字可以是hdfs_fdw或者dfs_fdw,dbuser为创建SERVER的用户名。 执行以下命令赋予用户使用外表的权限。 1 ALTER USER dbuser USEFT; 查看用户: 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT r.rolname, r.rolsuper, r.rolinherit, r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, r.rolconnlimit, r.rolvalidbegin, r.rolvaliduntil, ARRAY(SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid) as memberof , r.rolreplication , r.rolauditadmin , r.rolsystemadmin , r.roluseft FROM pg_catalog.pg_roles r ORDER BY 1; 返回结果中dbuser的信息中包含了UseFT权限,表示授权成功: 1 2 3 4 5 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolconnlimit | rolvalidbegin | rolvaliduntil | memberof | rolreplication | rolauditadmin | rolsystemadmin | roluseft -----------+----------+------------+---------------+-------------+-------------+--------------+---------------+---------------+----------+----------------+---------------+----------------+---------- dbuser | f | t | f | t | t | -1 | | | {} | f | f | f | t lily | f | t | f | f | t | -1 | | | {} | f | f | f | f Ruby | t | t | t | t | t | -1 | | | {} | t | t | t | t
  • 获取源数据的OBS路径并设置读取权限 登录OBS管理控制台。 单击“服务列表”,选择“ 对象存储服务 ”,打开OBS管理控制台页面。 获取数据源文件的OBS路径。 数据源文件在上传到OBS桶之后,会生成全局唯一的访问路径。在创建外表时需要指定数据源文件的OBS路径。 如何查看OBS路径,请参见《对象存储服务控制台指南》的通过对象URL访问对象章节。 例如,在本例中,查看到数据文件的OBS路径分别为: 1 2 https://obs.cn-north-1.myhuaweicloud.com/mybucket/demo.db/product_info_orc/product_info.0 https://obs.cn-north-1.myhuaweicloud.com/mybucket/demo.db/product_info_orc/product_info.1 为用户设置OBS桶的读取权限。 在使用SQL on OBS功能时,执行该功能的用户需要取得数据源文件所在OBS桶的读取权限。通过配置桶的ACL权限,可以将读取权限授予指定的用户账号。 具体请参见《对象存储服务控制台指南》中的配置桶ACL章节。
  • 原始数据 假设您已将2个ORC数据文件存储在OBS上,其原始数据分别如下: 数据文件“product_info.0” 示例数据如下所示: 1 2 3 4 5 100,XHDK-A-1293-#fJ3,2017-09-01,A,2017 Autumn New Shirt Women,red,M,328,2017-09-04,715,good! 205,KDKE-B-9947-#kL5,2017-09-01,A,2017 Autumn New Knitwear Women,pink,L,584,2017-09-05,406,very good! 300,JODL-X-1937-#pV7,2017-09-01,A,2017 autumn new T-shirt men,red,XL,1245,2017-09-03,502,Bad. 310,QQPX-R-3956-#aD8,2017-09-02,B,2017 autumn new jacket women,red,L,411,2017-09-05,436,It's really super nice. 150,ABEF-C-1820-#mC6,2017-09-03,B,2017 Autumn New Jeans Women,blue,M,1223,2017-09-06,1200,The seller's packaging is exquisite. 数据文件“product_info.1” 示例数据如下所示: 1 2 3 4 5 200,BCQP-E-2365-#qE4,2017-09-04,B,2017 autumn new casual pants men,black,L,997,2017-09-10,301,The clothes are of good quality. 250,EABE-D-1476-#oB1,2017-09-10,A,2017 autumn new dress women,black,S,841,2017-09-15,299,Follow the store for a long time. 108,CDXK-F-1527-#pL2,2017-09-11,A,2017 autumn new dress women,red,M,85,2017-09-14,22,It's really amazing to buy. 450,MMCE-H-4728-#nP9,2017-09-11,A,2017 autumn new jacket women,white,M,114,2017-09-14,22,Open the package and the clothes have no odor. 260,OCDA-G-2817-#bD3,2017-09-12,B,2017 autumn new woolen coat women,red,L,2004,2017-09-15,826,Very favorite clothes.
  • 操作场景 使用SQL on OBS功能查询OBS数据之前: 已将ORC数据存储在OBS上。 例如,在使用Hive或Spark等组件时创建了ORC表,其表数据已经存储在OBS上的场景。 假设有2个ORC数据文件“product_info.0”和“product_info.1”,其原始数据如原始数据所示,都已经存储在OBS桶“mybucket”的“demo.db/product_info_orc/”目录中。 如果数据文件已经在OBS上了,请执行获取源数据的OBS路径并设置读取权限中的步骤。 本小节以导入ORC格式为例,CARBONDATA数据的导入方法与ORC格式相似。
  • OBS导入数据示例 在GaussDB(DWS)上,创建导入的目标表tpcds.customer_address。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE tpcds.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(5,2) , ca_location_type char(20) ) WITH (orientation = column,compression=middle) DISTRIBUTE BY hash (ca_address_sk); 用户通过管理控制台登录到OBS数据服务器。在OBS数据服务器上,分别创建数据文件存放的两个桶“/input-data1”和“/input-data2”,并创建每个桶下面的data目录“/input-data1/data”和“/input-data2/data”。 将数据源文件均匀上传至OBS数据服务器的“/input-data1/data/”和“/input-data2/data/”目录中。 在GaussDB(DWS)上,创建外表tpcds.customer_address_ext用于接收数据服务器上的数据。 假设OBS数据服务器与集群网络连接正常,OBS数据服务器IP为xxx.xxx.x.xx,数据源文件格式为 CS V,规划的并行导入与示例保持一致。 其中设置的导入信息如下所示: 由于OBS服务器上的数据源文件存放目录为“/input-data1/data/ ”和“/input-data2/data/ ”,所以设置参数“location”为“obs://input-data1/data/ | obs://input-data2/data/”。 设置的数据格式信息是根据数据源文件的详细数据格式参数信息指定的,参数设置如下所示: 数据源文件格式(format)为CSV。 编码格式(encoding)为UTF-8。 字段分隔符(delimiter)为E'\x08'。 引号字符(quote)为E'\x1b'。 是否使用加密(encrypt),默认为 “off”。 用户获取OBS访问协议对应的AK值(access_key) 。 用户获取OBS访问协议对应的SK值 (secret_access_key)。 请根据用户实际获取的access_key和secret_access_key的密钥替换示例中的对应内容。 设置的导入容错性如下所示: 允许每个DN上出现数据格式错误的个数(PER NODE REJECT LIMIT 'value')为unlimited,即接受导入过程中所有数据格式错误。 将数据导入过程中出现的数据格式错误信息( LOG INTO error_table_name)写入表customer_address_err。 根据以上信息,创建的外表如下所示: 认证用的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 25 26 CREATE FOREIGN TABLE tpcds.customer_address_ext ( ca_address_sk integer , ca_address_id char(16) , 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(5,2) , ca_location_type char(20) ) SERVER gsmpp_server OPTIONS(location 'obs://input-data1/data/ | obs://input-data2/data/', FORMAT 'CSV' , encoding 'utf8', DELIMITER E'\x08', quote E'\x1b', encrypt 'off', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )LOG INTO customer_address_err PER NODE REJECT LIMIT 'unlimited'; 在GaussDB(DWS)上,通过外表tpcds.customer_address_ext,将数据导入目标表tpcds.customer_address。 1 INSERT INTO tpcds.customer_address SELECT * FROM tpcds.customer_address_ext; 查询错误信息表customer_address_err,处理数据导入错误。更多关于错误表的信息,请参见处理导入错误。 1 SELECT * FROM customer_address_err; 在数据导入完成后,执行ANALYZE语句生成表统计信息。 1 ANALYZE tpcds.customer_address; 父主题: 从OBS导入CSV、TXT数据
  • 处理数据导入错误 根据获取的错误信息,请对照下表,处理数据导入错误。 表2 处理数据导入错误 错误信息 错误类型 原因 解决办法 missing data for column "r_reason_desc" 格式错误 数据源文件中的列数比外表定义的列数少。 对于TEXT格式的数据源文件,由于转义字符(\)导致delimiter(分隔符)错位或者quote(引号字符)错位造成的错误。 示例:目标表存在3列字段,导入的数据如下所示。由于存在转义字符“\”,分隔符“|”被转义为第二个字段的字段值,导致第三个字段值缺失。 BE|Belgium\|1 由于列数少导致的报错,选择下列办法解决: 在数据源文件中,增加列“r_reason_desc”的字段值。 在创建外表时,将参数“fill_missing_fields”设置为“on”。即当导入过程中,若数据源文件中一行数据的最后一个字段缺失,则把最后一个字段的值设置为NULL,不报错。 对由于转义字符导致的错误,需检查报错的行中是否含有转义字符(\)。若存在,建议在创建外表时,将参数“noescaping”(是否不对'\'和后面的字符进行转义)设置为true。 extra data after last expected column 格式错误 数据源文件中的列数比外表定义的列数多。 在数据源文件中,删除多余的字段值。 在创建外表时,将参数“ignore_extra_data”设置为“on”。即在导入过程中,若数据源文件比外表定义的列数多,则忽略行尾多出来的列。 invalid input syntax for type numeric: "a" 格式错误 数据类型错误。 在数据源文件中,修改输入字段的数据类型。根据此错误信息,请将输入的数据类型修改为numeric。 null value in column "staff_id" violates not-null constraint 非格式错误 非空约束。 在数据源文件中,增加非空字段信息。根据此错误信息,请增加“staff_id”列的值。 duplicate key value violates unique constraint "reg_id_pk" 非格式错误 唯一约束。 删除数据源文件中重复的行。 通过设置关键字“DISTINCT”,从SELECT结果集中删除重复的行,保证导入的每一行都是唯一的。 1 INSERT INTO reasons SELECT DISTINCT * FROM foreign_tpcds_reasons; value too long for type character varying(16) 格式错误 字段值长度超过限制。 在数据源文件中,修改字段值长度。根据此错误信息,字段值长度限制为VARCHAR2(16)。
  • 示例 创建一个名为product_info的目标表,示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 DROP TABLE IF EXISTS product_info; CREATE TABLE product_info ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) with ( orientation = column, compression=middle ) DISTRIBUTE BY HASH (product_id); 执行以下命令将外表product_info_ext的数据导入到目标表product_info中: 1 INSERT INTO product_info SELECT * FROM product_info_ext;
  • 操作步骤 在GaussDB(DWS)数据库中,创建目标表,用于存储从OBS导入的数据。 目标表的表结构和OBS上将要导入的数据源文件的字段要保持一一对应,即字段个数、字段类型要一致。并且目标表和创建的外表的表结构也要保持一致,字段名称可以不一样。 (可选)如果导入表存在索引,在数据导入过程中,将增量更新索引信息,影响数据导入性能。建议在执行数据导入前,先删除相关表的索引。在数据导入完成后,再重新创建索引。 执行数据导入。 1 INSERT INTO [目标表名] SELECT * FROM [foreign table 表名]; 如果出现以下类似信息,说明数据导入成功。请查询错误信息表,查看是否存在数据格式错误,详细操作请参见处理导入错误。 1 INSERT 0 20 如果出现数据加载错误,请参见处理导入错误,并重新执行数据导入。
  • 背景信息 在执行数据导入前,您可以参考以下优秀实践方法进行合理的设计部署,最大化的使用系统资源,以提高数据导入性能。 OBS的数据导入性能,多数场景受限于网络的并发访问速率,因此在OBS服务器上最好部署多个桶,使用多桶并发导入,提高DN数据传输利用率。 并发导入场景,与单表导入相似,至少应保证I/O性能大于网络最大速率。 配置GUC参数“raise_errors_if_no_files”、“partition_mem_batch”和“partition_max_cache_size”,设置导入时是否区分“导入文件记录数为空”和“导入文件不存在”、导入时的缓存个数以及数据缓存区大小。 如果导入表存在索引,在数据导入过程中,将增量更新索引信息,影响数据导入性能。建议在执行数据导入前,先删除相关表的索引。在数据导入完成后,再重新创建索引。
  • 示例 在GaussDB(DWS)数据库中,创建一个外表。参数信息如下所示: 数据格式参数访问密钥(AK和SK) 用户获取OBS访问协议对应的AK值(access_key)。 用户获取OBS访问协议对应的SK值 (secret_access_key)。 请根据用户实际获取的access_key和secret_access_key的密钥替换示例中的对应内容。 设置数据格式参数 数据源文件格式(format)为“CSV”。 编码格式(encoding)为“UTF-8”。 是否使用加密(encrypt),默认为 “off”。 字段分隔符(delimiter)为“,”。 引号字符(quote)使用默认值双引号。 null(数据文件中空值的表示)为“一个没有引号的空字符串”。 header(指定导出数据文件是否包含标题行)为“false”,当数据文件第一行不是标题行(即表头),不需要设置。 OBS导出数据时不支持该参数为true,使用缺省值false。 设置导入时的容错性参数 PER NODE REJECT LIMIT 'value' 为“unlimited”,即接受导入过程中所有数据格式错误。 LOG INTO error_table_name指定为“product_info_err”,将数据导入过程中出现的数据格式错误信息写入表“product_info_err”。 fill_missing_fields为“true”,即当数据加载时,若数据源文件中一行数据的最后一个字段缺失,则把最后一个字段的值设置为NULL,不报错。 ignore_extra_data为“true”,当数据加载时,若数据源文件比外表定义列数多,则忽略行尾多出来的列,不报错。 根据以上信息,创建的外表如下所示: 认证用的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 25 26 27 28 29 30 31 32 DROP FOREIGN TABLE product_info_ext; CREATE FOREIGN TABLE product_info_ext ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER gsmpp_server OPTIONS( LOCATION 'obs://mybucket/input_data/product_info | obs://mybucket02/input_data/product_info', FORMAT 'CSV' , DELIMITER ',', encoding 'utf8', header 'false', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', fill_missing_fields 'true', ignore_extra_data 'true' ) READ ONLY LOG INTO product_info_err PER NODE REJECT LIMIT 'unlimited'; 返回如下信息表示创建成功: 1 CREATE FOREIGN TABLE
  • 操作步骤 根据上传数据到OBS中规划的路径,由此确定创建外表时使用的参数loaction的值。 用户获取OBS访问协议对应的AK值和SK值。获取访问密钥,请登录管理控制台,单击右上角的用户名并选择菜单“我的凭证”,然后在左侧导航树单击“访问密钥”。在访问密钥页面,可以查看已有的访问密钥ID(即AK),如果要同时获取AK和SK,可以单击“新增访问密钥”创建并下载访问密钥。 梳理待导入数据的格式信息,确定创建外表时使用的数据格式参数的值。需要收集的主要数据源格式信息如下: format:外表中数据源文件的格式。OBS外表导入支持CSV、TEXT格式。缺省值为TEXT。 header:指定导出数据文件是否包含标题行,header只能用于CSV格式的文件中。 delimiter:指定数据文件行数据的字段分隔符,不指定则使用默认分隔符。 外表可以识别的更多参数,详细使用请参见数据格式参数 。 规划并行导入容错性,以控制导入过程中处理错误的方式。 fill_missing_fields:数据入库时,数据源文件中某行的最后一个字段缺失时,请选择是直接将字段设为Null,还是在错误表中报错提示。 取值范围:true/on,false/off。 参数为true/on,当数据导入时,若数据源文件中一行数据的最后一个字段缺失,则把最后一个字段的值设置为NULL,不报错。 参数为false/off,如果最后一个字段缺失会显示如下错误信息。 missing data for column "tt" 缺省值:false/off。 ignore_extra_data:数据源文件中的字段比外表定义列数多时,请选择是忽略多出的列,还是在错误表中报错提示。 取值范围:true/on、false/off。 参数为true/on,若数据源文件比外表定义列数多,则忽略行尾多出来的列。 参数为false/off,若数据源文件比外表定义列数多,会显示如下错误信息。 1 extra data after last expected column 缺省值:false/off。 per node reject limit:本次数据导入过程中每个DN实例上允许出现的数据格式错误的数量。如果有一个DN实例上录入错误表中的错误数量超过设定值时,本次导入失败,报错退出。可以选择不做限制,也可以根据所能容忍的错误数量选择一个上限值。 compatible_illegal_chars:导入时遇到非法字符,选择如何处理。是将非法字符按照转换规则转换后入库,还是报错中止导入。 取值范围:true/on,false/off。 参数为true/on,则导入时遇到非法字符进行容错处理,非法字符转换后入库,不报错,不中断导入。 参数为false/off,导入时遇到非法字符进行报错,中断导入。 缺省值:false/off。 非法字符容错转换规则如下: 对于'\0',容错后转换为空格。 对于其他非法字符,容错后转换为问号。 对非法字符进行容错转换时,如遇NULL、DELIMITER、QUOTE、ESCAPE也设置成了空格或问号,GaussDB(DWS)会通过如“illegal chars conversion may confuse COPY escape 0x20”等报错信息提示用户修改可能引起混淆的参数以避免导入错误。 error_table_name:用于记录数据格式错误信息的错误表表名。并行导入结束后查询此错误信息表,能够获取详细的错误信息。 更多参数,详细使用请参见容错性参数。 根据前面步骤确定的参数,创建OBS外表。外表的创建语法以及详细使用,请参考CREATE FOREIGN TABLE (OBS导入导出)。
  • 创建访问密钥(AK和SK) 在创建访问密钥前,请确保登录控制台的账号已通过实名认证。 通过管理控制台创建访问密钥(AK和SK)操作步骤如下: 登录GaussDB(DWS)管理控制台。 单击右上角用户名,在下拉菜单中单击“我的凭证”。 在左侧导航树单击“访问密钥”。 如果在访问密钥列表中已经有访问密钥了,可以直接使用现有的访问密钥。但是,在访问密钥列表中只能查看到访问密钥ID(即Access Key ID),只有在新增访问密钥时,用户才可以下载到含有Access Key ID和Secret Access Key的密钥文件。如果您没有该密钥文件,可以单击“新增访问密钥”重新创建。 每个用户最多可创建两个有效的访问密钥,如果当前已存在两个访问密钥,只能先删除现有的访问密钥,然后再重新创建。删除时,需要输入当前用户的登录密码、邮箱或手机短信的验证码,验证通过才能成功删除。 为了账号安全性,建议您定期更换并妥善保存访问密钥。 单击“新增访问密钥”。 在弹出的对话框中,输入登录密码和对应验证码,然后单击“确定”。 用户如果未绑定邮箱和手机,则只需输入登录密码。 用户如果同时绑定了邮箱和手机,可以选择其中一种方式进行验证。 在弹出的“下载确认”提示框中,单击“确定”后,密钥会直接保存到浏览器默认的下载文件夹中。 为防止访问密钥泄露,建议您将其保存到安全的位置。 如果用户在此提示框中单击“取消”,则不会下载密钥,后续也将无法重新下载。如果需要使用访问密钥,可以重新创建新的访问密钥。 打开下载下来的“credentials.csv”文件即可获取到访问密钥(AK和SK)。
  • 导入流程图 图2 并行导入流程 表1 流程说明 流程 说明 子任务 上传数据至OBS 在OBS服务器上规划存储路径,并上传数据文件。 详细请参见上传数据到OBS。 - 创建OBS外表 创建外表用于识别OBS服务器上的数据源文件。在OBS外表中保存了数据源在OBS服务器上的桶名、对象名、文件格式、存放位置、编码格式、数据间的分隔符等信息。 详细请参见创建OBS外表。 - 执行导入数据 在创建好外表后,通过INSERT语句,将数据快速、高效地导入到目标表中。 详细请参见执行导入数据。 - 处理错误表 在数据并行导入发生错误时,请根据错误信息,处理导入错误,以保证导入数据的完整性。 - 优化查询效率 导入数据后,通过ANALYZE语句生成表统计信息。ANALYZE语句会将统计结果自动存储在系统表PG_STATISTIC中。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。 -
  • 相关概念 数据源文件:存储有数据的TEXT、CSV、ORC、CARBONDATA、JSON文件。文件中保存的是待并行导入数据库的数据。 OBS:对象存储服务,是一种可存储文档、图片、影音视频等非结构化数据的 云存储 服务。向GaussDB(DWS)并行导入数据时,数据对象放置在OBS服务器上。 桶(Bucket):对OBS中的一个存储空间的形象称呼,是存储对象的容器。 对象存储是一种非常扁平化的存储方式,桶中存储的对象都在同一个逻辑层级,去除了文件系统中的多层级树形目录结构。 在OBS中,桶名必须是全局唯一的且不能修改,即用户创建的桶不能与自己已创建的其他桶名称相同,也不能与其他用户创建的桶名称相同。每个桶在创建时都会生成默认的桶ACL(Access Control List),桶ACL列表的每项包含了对被授权用户授予的权限,如读取权限、写入权限、完全控制权限等。用户需要对桶有相应的权限,才可以对桶进行操作,如创建、删除、显示、设置桶ACL等。 一个用户最多可创建100个桶,但每个桶中存放的总数据容量和对象/文件数量没有限制。 对象:是存储在OBS中的基本数据单位。用户上传的数据以对象的形式存储在OBS的桶中。对象的属性包括名称Key,Metadata,Data。 通常,将对象等同于文件来进行管理,但是由于OBS是一种对象存储服务,并没有文件系统中的文件和文件夹概念。为了使用户更方便进行管理数据,OBS提供了一种方式模拟文件夹。通过在对象的名称中增加“/”,如tpcds1000/stock.csv,tpcds1000可以等同于文件夹,stock.csv就可以等同于文件名,而对象名称(Key)仍然是tpcds1000/stock.csv、对象的内容就是stock.csv数据文件的内容。 Key:对象的名称(键),是经过UTF-8编码的长度大于0且不超过1024的字符序列,一个桶里的每个对象必须拥有唯一的对象键值。用户可使用“桶名+对象名”来存储和获取对应的对象。 Metadata:对象元数据,用来描述对象的信息。元数据又可分为系统元数据和用户元数据。这些元数据以键值对(Key-Value)的形式随http头域一起上传到OBS系统。 系统元数据由OBS系统产生,在处理对象数据时使用。系统元数据包括:Date、Content-length、last-modify、Content-MD5等。 用户元数据由用户上传对象时指定,是用户自己对对象的一些描述信息。 Data:对象的数据内容,OBS对于数据的内容是无感知的,即认为对象内的数据为无状态的二进制数据。 数据库普通表:数据库中的普通表,数据源文件中的数据最终并行导入到这些表中存储,包括行存表、列存表。 外表:用于识别数据源文件中的数据。外表中保存了数据源文件的位置、文件格式、编码格式、数据间的分隔符等信息。
  • GAUSS-04681 -- GAUSS-04690 有部分PostgreSQL特性,GaussDB(DWS)暂不支持,所以在SQL执行过程中可能会出现某特性不支持的报错信息。详细内容可参考GaussDB(DWS)不支持的PostgreSQL功能。 GAUSS-04681: "EXCLUDE constraint is not yet supported." SQLSTATE: 0A000 错误原因:GaussDB(DWS)不支持用EXCLUDE为表创建排它约束。 解决办法:不建议使用。 GAUSS-04682: "FOREIGN KEY ... REFERENCES constraint is not yet supported." SQLSTATE: 0A000 错误原因:GaussDB(DWS)不支持为表创建外键(FOREIGN KEY)约束。 解决办法:不建议使用。 GAUSS-04683: "CREATE TABLE ... INHERITS is not yet supported." SQLSTATE: 0A000 错误原因:GaussDB(DWS)不支持继承表特性。 解决办法:不建议使用。 GAUSS-04684: "CREATE TABLE ... WITH OIDS is not yet supported." SQLSTATE: 0A000 错误原因:GaussDB(DWS)不支持CREATE TABLE ... WITH OIDS。 解决办法:不建议使用。 GAUSS-04685: "Unrecognized distribution option '%s'." SQLSTATE: 42601 错误原因:不能识别的分布列格式。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04686: "Syntax is not supported" SQLSTATE: 42601 错误原因:语法暂不支持。 解决办法:不建议使用。支持的语法请参考《SQL语法参考》的“CREATE TABLE”章节。 GAUSS-04687: "SCROLL CURSOR is not yet supported." SQLSTATE: 0A000 错误原因:GaussDB(DWS)不支持可滚动的游标,即SCROLL CURSOR。 解决办法:不建议使用。 GAUSS-04688: "INSENSITIVE CURSOR is not yet supported." SQLSTATE: 0A000 错误原因:GaussDB(DWS)不支持INSENSITIVE CURSOR。 解决办法:不建议使用。 GAUSS-04689: "CURSOR ... WITH HOLD is not yet supported." 错误原因:系统内部错误。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04690: "For foreign table ROUNDROBIN distribution type is built-in support." SQLSTATE: 0A000 错误原因:GDS外表内建支持ROUNDROBIN分布信息,不支持在创建外表时显式添加分布信息。 解决办法:在创建GDS外表时,去除指定的分布信息。 父主题: GAUSS-04601 -- GAUSS-04700
  • GAUSS-04721 -- GAUSS-04730 GAUSS-04721: "The path here must be an absolute path, but it is: %s" SQLSTATE: HV00A 错误原因:Dfs表扫描算子中传入的文件名应当为绝对路径名,但该路径为非绝对路径名。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04722: "Unsupported data type on typeoid:%d when parsing partition signature" SQLSTATE: 0A000 错误原因:分区表查询过程中发现分区键的数据类型不再支持的类型中。 解决办法:查看系统目录表是否有数据不一致情况——以创建的分区表分区列是否是不支持的分区类型。 GAUSS-04723: "We only support pushing down opExpr and null test predicate." SQLSTATE: 0A000 错误原因:HDFS表过滤谓词出现不支持的类型。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04724: "could not find operator by oid %u" SQLSTATE: 42704 错误原因:系统内部错误。通过OID查找操作类型失败。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04725: "Not support pushing predicate with sublink param now!" SQLSTATE: 0A000 错误原因:系统内部错误。不支持子查询的谓词下推。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04726: "Not support pushing predicate with non-const" SQLSTATE: 0A000 错误原因:系统内部错误。不支持非常量的谓词下推。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04727: "We only support pushing down opExpr and null test predicates." SQLSTATE: 0A000 错误原因:系统内部错误。仅仅支持表达式和null谓词下推。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04728: "Data type %u has not been supported for predicate push down." SQLSTATE: 0A000 错误原因:系统内部错误。报错的数据类型不支持动态谓词下推。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-04729: "The maximum accuracy of decimal/numeric data type supported is %d bits." SQLSTATE: 0A000 错误原因:decimal/numeric支持的最大精度超过规定38位。 解决办法:建表时定义decimal/numeric类型的精度小于或者等于38。 GAUSS-04730: "Column %s is unsupported data type for a orc table." SQLSTATE: HV004 错误原因:ORC格式的HDFS外表不支持报错的列的数据类型。 解决办法:查看报错列的数据类型,修改为支持的数据类型。 父主题: GAUSS-04701 -- GAUSS-04800
  • GAUSS-02091 -- GAUSS-02100 GAUSS-02091: "unrecognized OID: '%.*s'" SQLSTATE: XX000 错误原因:内部错误:无法识别的OID号。 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02092: "unexpected right parenthesis" SQLSTATE: XX000 错误原因:在读取节点信息时遇到了非预期的右括号 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02093: "cannot list_concat() a list to itself" SQLSTATE: XX000 错误原因:不可将一个list连接到它本身。 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02094: "tuple offset out of range: %u" SQLSTATE: XX000 错误原因:数据偏移量超过了单个页面所能存放的最大元组个数。 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02095: "negative bitmapset member not allowed" SQLSTATE: XX000 错误原因:位置信息不可以为负数。 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02096: "bitmapset is empty" SQLSTATE: XX000 错误原因:当前的bitmapset不可为空。 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02097: "bitmapset has multiple members" SQLSTATE: XX000 错误原因:系统内部错误:bitmapset有重复的成员。 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02098: "cannot get type for untransformed sublink" SQLSTATE: XX000 错误原因:系统内部错误:对于sublink表达式节点,如果sublink未转换,则无法正确获得表达式类型 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02099: "cannot get collation for untransformed sublink" SQLSTATE: XX000 错误原因:系统内部错误:对于sublink表达式节点,如果sublink未转换,则无法正确获得表达式的collation 解决办法:内部错误,请联系技术支持工程师提供技术支持。 GAUSS-02100: "cannot set collation for untransformed sublink" SQLSTATE: XX000 错误原因:系统内部错误:无法未转换的sublink设置collation 解决办法:内部错误,请联系技术支持工程师提供技术支持。 父主题: GAUSS-02001 -- GAUSS-02100
  • GAUSS-51600 -- GAUSS-51699 GAUSS-51600 : "Failed to obtain the cluster status." SQLSTATE: 无 错误原因:获取集群状态失败。 解决办法:1.检查集群是否搭建完成; 2.检查搭建好的集群是否启动正常。 GAUSS-51601 : "Failed to check %s status." SQLSTATE: 无 错误原因:检查集群/本地节点状态失败。 解决办法:检查集群/本地节点状态是否正常。 GAUSS-51602 : "The cluster status is Abnormal." SQLSTATE: 无 错误原因:集群状态不正常。 解决办法:检查是否因为工具脚本命令未执行完成导致集群状态没有恢复。 GAUSS-51603 : "Failed to obtain peer %s instance." SQLSTATE: 无 错误原因:获取对等的实例失败。 解决办法:1.如果获取GTM,则确保gtm.conf路径存在;2.检查配置是否正确。 GAUSS-51605 : "Failed to check whether the %s process exists." SQLSTATE: 无 错误原因:检查进程是否存在失败。 解决办法:1.确保权限可执行检查;2.确保检查进程的正确性。 GAUSS-51606 : "Failed to kill the %s process. SQLSTATE: 无 错误原因:杀进程失败。 解决办法:1.确保权限可执行此操作;2.检查执行命令是否正确。 GAUSS-51607 : "Failed to start %s." 错误原因:启动集群/节点/实例失败。 解决办法:1.检查网络连接是否正常;2.检查配置文件是否正确。 GAUSS-51608 : "Failed to lock cluster." SQLSTATE: 无 错误原因:锁集群失败。 解决办法:确保在该会话完成前没有进行关闭停止等操作。 GAUSS-51609 : "Failed to unlock cluster." SQLSTATE: 无 错误原因:解锁集群失败。 解决办法:确保在该会话完成前没有进行关闭停止等操作。 GAUSS-51610 : "Failed to stop %s." SQLSTATE: 无 错误原因:停止集群/节点/实例失败。 解决办法:1.确保命令操作执行正确;2.检查确保集群/节点/实例当前状态无异常。 GAUSS-51612 : "The instance IDs [%s] are not found in %s." SQLSTATE: 无 错误原因:在节点信息里没有找到某个实例ID。 解决办法:在做增删CN时,检查XML中增删CN的节点配置是否正确。 GAUSS-51613 : "There is no instance in %s to be built." SQLSTATE: 无 错误原因:没有需要创建的实例。 解决办法:在做manageCN的时候,XML配置的不正确,XML中没有在新节点中配实例。 GAUSS-51614:"Received signal[%d]." SQLSTATE: 无 错误原因:接收信号%d。 解决办法:重新接收。 GAUSS-51615 : "Failed to initialize instance." SQLSTATE: 无 错误原因:初始化实例失败。 解决办法:1.确保gs_initdb/gs_initcm工具存在;2.确保gs_initdb/gs_initcm命令正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51616 : "Failed to dump %s schema." SQLSTATE: 无 错误原因:dump CN/DN schema失败。 解决办法:1.dumpall/dump工具存在;2.确保dumpall/dump命令操作正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51617:"Failed to rebuild %s" SQLSTATE: 无 错误原因:重建失败 解决办法:重新执行命令 GAUSS-51618 : "Failed to get all hostname." SQLSTATE: 无 错误原因:获取所有主机名失败。 解决办法:确保ssh互信正常。 GAUSS-51619 : "The current node [%s] is not in the cluster." SQLSTATE: 无 错误原因:当前节点不在集群内。 解决办法:检查xml中是否配置了该节点。 GAUSS-51620 : "Failed to obtain %s instance information." SQLSTATE: 无 错误原因:获取实例信息失败。 解决办法:1.确保XML配置正确;2.检查确保集群/节点/实例当前状态无异常。 GAUSS-51621 : "HA IP is empty." SQLSTATE: 无 错误原因:HA IP为空。 解决办法:检查XML文件配置信息,如果XML中配置了HA IP,此时需确保其值配置正确;如果XML中没有配置HA IP,则其会默认使用backIP,此时需要确保正确配置XML文件中的backIP。 GAUSS-51622 : "There is no %s on %s node." SQLSTATE: 无 错误原因:节点上没有CN/DN实例。 解决办法:1.检查XML中该节点是否配置了CN/DN实例;2.检查确保集群/节点/实例当前状态无异常。 GAUSS-51623 : "Failed to obtain version." SQLSTATE: 无 错误原因:获取集群版本失败。 解决办法:1.确保version.cfg文件存在;2.检查version.cfg文件中数据格式是否正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51624 : "Failed to get CN connections." SQLSTATE: 无 错误原因:获取CN连接数失败。 解决办法:检查确保集群/节点/实例当前状态无异常。 GAUSS-51625 : "Cluster is running." SQLSTATE: 无 错误原因:集群正在运行。 解决办法:停止集群。 GAUSS-51626 : "Failed to rollback." SQLSTATE: 无 错误原因:回滚失败。 解决办法:1.确保命令操作执行正确;2.检查确保集群/节点/实例当前状态无异常;3.查看对应日志信息。 GAUSS-51627:"Configuration failed." SQLSTATE: 无 错误原因:配置失败 解决办法:重新配置 GAUSS-51628 : "The version number of new cluster is [%s]. It should be float." SQLSTATE: 无 错误原因:新集群的版本号格式不正确。 解决办法:1.确保version.cfg文件存在;2.检查version.cfg文件中数据格式是否正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51629 : "The version number of new cluster is [%s]. It should be greater than or equal to the old version." SQLSTATE: 无 错误原因:新集群的版本号不正确,应该大于或等于旧版本号。 解决办法:1.确保version.cfg文件存在;2.检查新集群的version.cfg文件中数据是否小于现有集群的版本号;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51630 : "No node named %s." SQLSTATE: 无 错误原因:节点名不存在。 解决办法:1.检查XML中是否配置了该节点;2.检查确保集群/节点/实例当前状态无异常。 GAUSS-51631 : "Failed to delete the %s instance." SQLSTATE: 无 错误原因:删除CN实例失败。 解决办法:1.确保ssh互信正常;2.确保命令操作执行正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51632 : "Failed to do %s." SQLSTATE: 无 错误原因:执行python脚本失败。 解决办法:1.确保python脚本存在;2.确保命令操作执行正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51633 : "The %s must be a digit." SQLSTATE: 无 错误原因:ID必须是数字。 解决办法:1.确保指定的实例存在;2.确保命令操作执行正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51635 : "Failed to check SHA256." SQLSTATE: 无 错误原因:检查SHA256失败。 解决办法:1.确保SHA256文件存在;2.确保命令操作执行正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51636 : "Failed to obtain %s node information." SQLSTATE: 无 错误原因:获取节点信息失败。 解决办法:1.确保XML中配置了该节点;2.确保命令操作执行正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51637: "The %s does not match with %s." SQLSTATE: 无 错误原因:集群信息不匹配。 解决办法:1.确保需要匹配的双方同时更新;2.确保命令操作执行正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51638 : "Failed to append instance on host [%s]." SQLSTATE: 无 错误原因:在某个节点上追加实例失败。 解决办法:1.检查XML配置是否正确,路径是否有冲突;2.检查确保集群/节点/实例当前状态无异常。 GAUSS-51640 : "Can't connect to cm_server, cluster is not running possibly." SQLSTATE: 无 错误原因:连接不上cm_server,集群可能不在运行。 解决办法:重启集群。 GAUSS-51641 : "Cluster redistributing status is not accord with expectation." SQLSTATE: 无 错误原因:重分布状态不满足条件。 解决办法:1.检查进群状态是否正常和健康;2.检查确保集群/节点/实例当前状态无异常。 GAUSS-51642 : "Failed to promote peer instances." SQLSTATE: 无 错误原因:拉起对等实例失败。 解决办法:1.确保指定的实例存在;2.确保命令操作执行正确;3.检查确保集群/节点/实例当前状态无异常。 GAUSS-51643 : "Failed to restart %s." SQLSTATE: 无 错误原因:重启集群/逻辑集群失败。 解决办法:1.检查网络连接是否正常;2.检查配置文件是否正确。 GAUSS-51644 : "Failed to set resource control for the cluster." SQLSTATE: 无 错误原因:设置集群资源控制失败。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-51645 : "Failed to restart %s." SQLSTATE: 无 错误原因:重启集群/逻辑集群失败。 解决办法:1.检查网络连接是否正常;2.检查配置文件是否正确。 GAUSS-51646 : "The other OM operation is currently being performed in the cluster node: '%s'.” SQLSTATE: 无 错误原因:集群节点正在进行其它OM操作。 解决办法:等待集群节点上的其它OM操作完成后,重新调用操作。 GAUSS-51647 : "The operation step of OM components in current cluster nodes do not match with each other: %s." SQLSTATE: 无 错误原因:当前的OM操作同集群节点中记录的操作步骤不匹配。 解决办法:删除$PGHOST目录下操作步骤文件,重新调用操作。 GAUSS-51648 : "Waiting for redistribution process to end timeout." SQLSTATE: 无↵ 错误原因:等待重分布进程结束超时。 解决办法:重新调用重分布操作。 GAUSS-51649 : "Capture exceptions '%s' : %s." SQLSTATE: 无 错误原因:异常信息不在定义异常范围内。 解决办法:根据捕获异常信息,解决问题。 GAUSS-51650 : "Unclassified exceptions: %s." SQLSTATE: 无↵ 错误原因:异常信息不在定义异常范围内。 解决办法:根据捕获异常信息,解决问题。 父主题: GAUSS-51000 -- GAUSS-51999
  • GAUSS-01761 -- GAUSS-01770 GAUSS-01761: "column name must be qualified" SQLSTATE: 42601 错误原因:在对象中属性名称必须是已知被描述的。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-01762: "must be owner of large object %u" SQLSTATE: 42501 错误原因:对该大对象数据的所有权关系错误。 解决办法:检查通过get_object_address处所获得的大对象数据Id并于此处的进行比对。 GAUSS-01763: "must be system admin" SQLSTATE: 42501 错误原因:该对象被初始用户所拥有,但是该对象的持有者却并非被初始用户所拥有。 解决办法:检查在定义该对象时,是否正确继承相关用户权限。 GAUSS-01764: "must have CREATEROLE privilege" SQLSTATE: 42501 错误原因:如果不是初始用户,那至少是拥有基本的创建对象权限。 解决办法:检查持有该对象数据的用户权限,并核对对象的有效性。 GAUSS-01765: "unrecognized object type: %d" SQLSTATE: XX000 错误原因:系统内部错误。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-01766: "cache lookup failed for cache %d oid %u" SQLSTATE: XX000 错误原因:系统内部错误。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-01767: "unrecognized class id: %u" SQLSTATE: XX000 错误原因:系统内部错误。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-01768: "temporary tables cannot specify a schema name" SQLSTATE: 42P16 错误原因:当前的临时表并不在创建临时表所创建的临时表空间中,即临时表所属的是其他空间,因此错误。 解决办法:检查创建临时表时临时表空间是否被正确创建,并查看对应的临时表空间的OID。 GAUSS-01769: "could not obtain lock on relation '%s.%s'" SQLSTATE: 55P03 错误原因:无法请求到锁,因此报错。 解决办法:检查在该表上是否存在冲突锁或锁被分配完。 GAUSS-01770: "no schema has been selected to create in" SQLSTATE: 3F000 错误原因:在创建表时没有指定相应的空间。 解决办法:创建某个schema或者进入某个已经创建好的schema,然后再次创建该表。 父主题: GAUSS-01701 -- GAUSS-01800
  • GAUSS-03091 -- GAUSS-03100 GAUSS-03091: "malformed array literal: '%s'" SQLSTATE: 22P02 错误原因:数组输入数据格式错误。 解决办法:请确认输入字符串,是否可以转换成数组常量。 GAUSS-03092: "multidimensional arrays must have array expressions with matching dimensions" SQLSTATE: 22P02 错误原因:多维的数组必须具有与维度相匹配的数组表达式。 解决办法:检查输入字符串。 GAUSS-03093: "array size exceeds the maximum allowed (%d)" SQLSTATE: 54000 错误原因:数组长度超出了最大值。 解决办法:请检查输入字符串中包含的数组元素是否超过了错误信息中指定的数值。 GAUSS-03094: "null array element where not supported" SQLSTATE: XX000 错误原因:系统内部错误。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-03095: "invalid number of dimensions: %d" SQLSTATE: 22P03 错误原因:数组的维度小于0。 解决办法:检查输入参数。 GAUSS-03096: "invalid array flags" SQLSTATE: 22P03 错误原因:数组标志非法,只能为0或1。 解决办法:检查输入参数。 GAUSS-03097: "wrong element type" SQLSTATE: 42804 错误原因:数组元素的类型不一致。 解决办法:检查输入参数。 GAUSS-03098: "insufficient data left in message" SQLSTATE: 22P03 错误原因:message中剩余的长度小于message首获取的长度值。 解决办法:检查当前字符串。 GAUSS-03099: "improper binary format in array element %d" SQLSTATE: 22P03 错误原因:读完数组时,缓冲区还有数据。 解决办法:输入数据有误,检查之。 GAUSS-03100: "slices of fixed-length arrays not implemented" SQLSTATE: 0A000 错误原因:定长数组不支持分片。 解决办法:去掉查询中对定长数组分片的操作。 父主题: GAUSS-03001 -- GAUSS-03100
  • 响应消息 正常响应参数说明 表4 响应Body参数 参数 参数类型 描述 flavor_groups Array of FlavorGroupInfo objects 引擎信息列表。 表5 FlavorGroupInfo 参数 参数类型 描述 flavors Array of Flavor objects 引擎ID。 offset Integer 分页参数: 起始值。 limit Integer 分页参数:每页多少条。 total Integer 引擎信息总数。 表6 Flavor 参数 参数类型 描述 az_infos Array of AvailableZone objects 可用区信息。 normal:在售。 unsupported:暂不支持该规格。 sellout:售罄。 id String 规格ID。 spec_code String 资源规格编码。 vcpus String CPU大小。例如:1表示1U。 ram String 内存大小,单位:GB。 表7 AvailableZone 参数 参数类型 描述 code String 可用区CODE。 description String 可用区描述。 status String 可用区状态。 support_ipv6 Boolean 是否支持IPV6。
  • URI URL格式 GET /v3/{project_id}/flavors?engine_id={engine_id}&offset={offset}&limit={limit}&engine_version={engine_version}&available_zones={available_zones} 参数说明 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户在某一region下的project ID。 获取方法请参见获取项目ID。 表2 Query参数 参数 是否必选 参数类型 描述 engine_id 否 String 引擎ID,通过查询DDM引擎信息接口获取,引擎ID与引擎版本至少指定一个。 engine_version 否 String 引擎版本,通过查询DDM引擎信息接口获取,引擎ID与引擎版本至少指定一个。 available_zones 否 String 可用区,多个用","分割,如cn-southwest-244a,cn-southwest-244b。取值非空,请参见地区和终端节点。 offset 否 Integer 索引位置,偏移量。 从第一条数据偏移offset条数据后开始查询,默认为0。 取值必须为数字,且不能为负数。 limit 否 Integer 查询个数上限值。 取值范围:1~128。 不传该参数时,默认值为10。
共100000条